Code Bye

preparedStatement语句能不能传空值进去?

 

比如语句是:
SELECT * FROM TABLE WHERE ID=? AND CLASS=? AND NAME=?

但是在检索的时候,并不强制要求输入,可能我只输入姓名“张三”,ID 和CLASS留空,这么一来检索语句就变成了:
SELECT * FROM TABLE WHERE ID=”””” AND CLASS=”””” AND NAME=””张三””

就不符合我想要的检索结果了,如果非要用preparedStatement,该怎么做呢?


15分
“SELECT * FROM TABLE WHERE  1=1  ? ? ? ”

ps.set(1,”AND NAME=””张三”””) ;
ps.set(2,””) ;
ps.set(3,””) ;

引用 1 楼 cai5 的回复:

“SELECT * FROM TABLE WHERE  1=1  ? ? ? ”

ps.set(1,”AND NAME=””张三”””) ;
ps.set(2,””) ;
ps.set(3,””) ;

这样写的话,PS原来语句的格式就变了,什么“AND NAME=”是不允许传入的(这是公司的一个小项目,经理要求,而且要求只能用preparedStatement,要不然只是拼SQL就可以解决了)


5分
ps.setNull(2);

5分
ps.setNull(1,java.sql.Type.Integer);
ps.setNull(2,java.sql.Type.Integer);
引用 3 楼 ticmy 的回复:

ps.setNull(2);

这位大哥,能详细一点讲吗?我看不太明白


5分
置空~

5分
 ps.setString(2, null);
ps.setNull(2, Types.NUMERIC);

5分
引用 6 楼 mscf 的回复:

置空~

同意

好像不太对啊,置空了查询不出结果,我再举个更简单的SELECT语句来问吧,假设我只根据ID来查询表,
preparedStatement语句为:SELECT * FROM TABLE WHERE ID = ?
这里的ID值是通过用户输入的,如果输入了ID就根据ID的值来检索;如果ID未输入则进行全部检索。即是说,当我想进行全部检索的时候,希望通过preparedStatement设置一个值使它能达到“SELECT * FROM TABLE”这样的一个效果。
如果置空,ps.setString(1,null),则语句就变成了 “SELECT * FROM TABLE WHERE ID = null”,这样查询是查不到东西的啊。
好像我题目的问法也有点问题,使得楼上几位大哥有点偏解了我的意思,我自己要做个检讨。反正一句话就是,当我想进行全部检索的时候,用带参数的preparedStatement如何能实现?
现在问题算是解决了吧,把语句改成模糊查询了:
SELECT * FROM TABLE WHERE ID like ?||””%”” AND CLASS like ?||””%”” AND NAME like ?||””%””
即使传空值,也可以做全部检索了。
还是要感谢大家的热心,结贴啦。
SELECT * FROM TABLE WHERE ID like ?||””%”” AND CLASS like ?||””%”” AND NAME like ?||””%””

上面的mysql.jdbc试了不行,但这样可以:
String sql=”SELECT * FROM TABLE WHERE ID like ? AND CLASS like ? AND NAME like ?”

pstm.setString(1,”%”);
pstm.setString(2,”%”);
pstm.setString(3,”%”);

确实用like就可以了,多谢启发


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明preparedStatement语句能不能传空值进去?