| 比如语句是: 但是在检索的时候,并不强制要求输入,可能我只输入姓名“张三”,ID 和CLASS留空,这么一来检索语句就变成了: 就不符合我想要的检索结果了,如果非要用preparedStatement,该怎么做呢? | |
|  15分 | “SELECT * FROM TABLE WHERE  1=1  ? ? ? ”
 ps.set(1,”AND NAME=””张三”””) ; | 
|  | 这样写的话,PS原来语句的格式就变了,什么“AND NAME=”是不允许传入的(这是公司的一个小项目,经理要求,而且要求只能用preparedStatement,要不然只是拼SQL就可以解决了) | 
|  5分 | ps.setNull(2); | 
|  5分 | ps.setNull(1,java.sql.Type.Integer); ps.setNull(2,java.sql.Type.Integer); | 
|  | 这位大哥,能详细一点讲吗?我看不太明白 | 
|  5分 | 置空~ | 
|  5分 |  ps.setString(2, null); ps.setNull(2, Types.NUMERIC); | 
|  5分 | 同意 | 
|  | 好像不太对啊,置空了查询不出结果,我再举个更简单的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试了不行,但这样可以: pstm.setString(1,”%”); 确实用like就可以了,多谢启发 | 
 
                    


