sql字符串拼接和绑定变量疑问和sql注入
在程序中经常需要进行sql字符串拼接,但是字符串拼接存在sql注入的问题。最好用绑定变量(用?等代替占位),但是用绑定变量存在的问题是sql语句是事先固定好的,如果用户某个字段可以不输入,这个字段为null,那么就会有问题,因为不应该把这个字段加到sql里。请问,这种问题大家都怎么解决的?谢谢
例如拼接字符串:
String sql = "select * from table "
String name = 用户输入名字
if(name!=null) {
sql+="where name='$name'";
}else{
//不对sql进行添加限制条件
}
这段代码用绑定变量形式怎么实现?如果有多个拼接条件,换成绑定变量的形式可以怎么实现?
------解决方案--------------------
一般这样解决:
List params = new ArrayList();
String sql = "select * from table "
String name = 用户输入名字
if(name!=null) {
sql+="where name=?";
params.add(name);
}else{
//不对sql进行添加限制条件
}
PrepareStament pstm = con.createPrepareStatment(sql);
for(int i =0 ; i < params.size(); i++){
pstm.setString(i+1, params.get(i));
}
..,,
然后就不说了,你应该知道了。hibernate hql查不多
------解决方案--------------------
------解决方案--------------------不晓得这样可以么!
Java code
public void test(String name,String sex){
String sql = "select * from user_info where 1 = 1 ";
if(name!=null) {
sql+="and name=?";
}else{
//不对sql进行添加限制条件
}
if(sex!=null) {
sql+="and name=?";
}else{
//不对sql进行添加限制条件
}
//假设已经有连接
Connection conn ;
PreparedStatement pre=conn.prepareStatement(sql);
//按参数顺序
int i=0;
if(name!=null)
pre.setString(++i, name);
if(sex!=null)
pre.setString(++i, sex);
pre.executeQuery();
}