preparedstatement怎么拼接sql语句

时间:2020-12-01 11:55:37
表单里提交了多个参数做为查询条件时,用preparedstatement 怎么去拼接sql句语,多个参数里也有可能有空值,没填的,以前都是有if esle if 去拼接sql,在用statement处理 用preparedstatement怎么办 ,不要在隐藏你的智慧了,该出手时就出手哈.来给个解决方案 

7 个解决方案

#1


还是if else

#2


也可以用if else啊...只是拼SQL嘛。
不存在就这样。比如:if(where_a!=""){
     sql.append(" and where_a="+where_a);

}拼好了SQL再传到preparedstatement里,就可以了。传之前,
可以通过Syetem.out.println(sql.toString());看你拼的语句是否是对的。

#3


1.你写个方法,有IF
2.直接传个对象

#4


引用 2 楼 lizhi1026 的回复:
也可以用if else啊...只是拼SQL嘛。 
不存在就这样。比如:if(where_a!=""){ 
    sql.append(" and where_a="+where_a); 

}拼好了SQL再传到preparedstatement里,就可以了。传之前, 
可以通过Syetem.out.println(sql.toString());看你拼的语句是否是对的。

对,2楼的兄弟说的方法还是可以的。

你的sql语句都是在执行之前拼接好,
这和是preparedstatement还是statement是没有关系的
关键是你到时sql语句的格式要掌握好

#5


偶认为用if else去判断可维护性,可读性差,作为模糊查询应该用通配符%,别管它有值没值,都在变量前后加%就行了

#6


我想是我没有把问题说清楚,我的意思是这样的,
perParedStatement pre=con.PerParedStatement("insert into goods values(?,?,?)");
pre.setString(1,"sun");
pre.setString(2,"java");
pre.setString(3,"ajax");
pre.executeUpdate();
如果用了preparedStatement对象,在对组合查询form里提交的参数怎么去拼接sql语句,?占位符怎么判断,PerparedStatement的sql语句里并没有实际的查询参数 是?占位符
下面是我的一个数据库操作对象用的是Statement对象,谁帮我看下该成PerparedStatement后怎么去拼这个sql语句
package javabean;
import java.io.*;
import java.util.*;
import java.sql.*;
import javabean.*;
public class ModfiyUserInfo {
 private Data_Con con;
 private ResultSet set;
 private int i;
  public void updateForUser(UserInfo user)
  {
  con=new Data_Con();
  con.con();
  String sql="update userInfo ";
  if(user.getInterprovincial()!="")
  {
sql+="set Interprovincial='"+user.getInterprovincial()+"'";
  }
  if(user.getCity()!="")
  {
  sql+=",city='"+user.getCity()+"'";
  }
  if(user.getRealname()!="")
  {
  sql+=",realname='"+user.getRealname()+"'";
  }
  if(user.getSex()!="")
  {
  sql+=",sex='"+user.getSex()+"'";
  }
  if(user.getTel()!="")
  {
  sql+=",tel='"+user.getTel()+"'";
  }
  if(user.getIdcard()!="")
  {
  sql+=",idcard='"+user.getIdcard()+"'";
  }
  try{
  sql+=" where username='"+user.getUsername()+"'";
//   sql=new String(sql.getBytes("ISO-8859-1"),"UTF-8");
  System.out.print(sql+"\n");
  i=con.stmt.executeUpdate(sql);
  }catch(Exception e){System.out.print(e.getMessage()+"\n");System.out.print(i+"\n");}

  
  }
}

#7


不用吧 拼sql不放在底层去 sql由参数传进去 每次传sql进去
比如
public void update(String sql,Object[] params){
   perParedStatement pre=con.PerParedStatement(sql);
   if(params!=null&&params.length>0){
     for(int i=0;i<params.length;i++){
     pre.setObject(i+1,params[i]);
    }
   }
      ...略
}

你还可以把为ps设置参数的那段封个方法。。。。很灵活了。。

#1


还是if else

#2


也可以用if else啊...只是拼SQL嘛。
不存在就这样。比如:if(where_a!=""){
     sql.append(" and where_a="+where_a);

}拼好了SQL再传到preparedstatement里,就可以了。传之前,
可以通过Syetem.out.println(sql.toString());看你拼的语句是否是对的。

#3


1.你写个方法,有IF
2.直接传个对象

#4


引用 2 楼 lizhi1026 的回复:
也可以用if else啊...只是拼SQL嘛。 
不存在就这样。比如:if(where_a!=""){ 
    sql.append(" and where_a="+where_a); 

}拼好了SQL再传到preparedstatement里,就可以了。传之前, 
可以通过Syetem.out.println(sql.toString());看你拼的语句是否是对的。

对,2楼的兄弟说的方法还是可以的。

你的sql语句都是在执行之前拼接好,
这和是preparedstatement还是statement是没有关系的
关键是你到时sql语句的格式要掌握好

#5


偶认为用if else去判断可维护性,可读性差,作为模糊查询应该用通配符%,别管它有值没值,都在变量前后加%就行了

#6


我想是我没有把问题说清楚,我的意思是这样的,
perParedStatement pre=con.PerParedStatement("insert into goods values(?,?,?)");
pre.setString(1,"sun");
pre.setString(2,"java");
pre.setString(3,"ajax");
pre.executeUpdate();
如果用了preparedStatement对象,在对组合查询form里提交的参数怎么去拼接sql语句,?占位符怎么判断,PerparedStatement的sql语句里并没有实际的查询参数 是?占位符
下面是我的一个数据库操作对象用的是Statement对象,谁帮我看下该成PerparedStatement后怎么去拼这个sql语句
package javabean;
import java.io.*;
import java.util.*;
import java.sql.*;
import javabean.*;
public class ModfiyUserInfo {
 private Data_Con con;
 private ResultSet set;
 private int i;
  public void updateForUser(UserInfo user)
  {
  con=new Data_Con();
  con.con();
  String sql="update userInfo ";
  if(user.getInterprovincial()!="")
  {
sql+="set Interprovincial='"+user.getInterprovincial()+"'";
  }
  if(user.getCity()!="")
  {
  sql+=",city='"+user.getCity()+"'";
  }
  if(user.getRealname()!="")
  {
  sql+=",realname='"+user.getRealname()+"'";
  }
  if(user.getSex()!="")
  {
  sql+=",sex='"+user.getSex()+"'";
  }
  if(user.getTel()!="")
  {
  sql+=",tel='"+user.getTel()+"'";
  }
  if(user.getIdcard()!="")
  {
  sql+=",idcard='"+user.getIdcard()+"'";
  }
  try{
  sql+=" where username='"+user.getUsername()+"'";
//   sql=new String(sql.getBytes("ISO-8859-1"),"UTF-8");
  System.out.print(sql+"\n");
  i=con.stmt.executeUpdate(sql);
  }catch(Exception e){System.out.print(e.getMessage()+"\n");System.out.print(i+"\n");}

  
  }
}

#7


不用吧 拼sql不放在底层去 sql由参数传进去 每次传sql进去
比如
public void update(String sql,Object[] params){
   perParedStatement pre=con.PerParedStatement(sql);
   if(params!=null&&params.length>0){
     for(int i=0;i<params.length;i++){
     pre.setObject(i+1,params[i]);
    }
   }
      ...略
}

你还可以把为ps设置参数的那段封个方法。。。。很灵活了。。