比如语句是: 但是在检索的时候,并不强制要求输入,可能我只输入姓名“张三”,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就可以了,多谢启发 |