"SELECT * FROM TABLE WHERE  1=1  ? ? ? "
ps.set(1,"AND NAME='张三'") ;
ps.set(2,"") ;
ps.set(3,"") ;

解决方案 »

  1.   

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

  2.   

    ps.setNull(1,java.sql.Type.Integer);
    ps.setNull(2,java.sql.Type.Integer);
      

  3.   

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

  4.   

    好像不太对啊,置空了查询不出结果,我再举个更简单的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”,这样查询是查不到东西的啊。
      

  5.   

    好像我题目的问法也有点问题,使得楼上几位大哥有点偏解了我的意思,我自己要做个检讨。反正一句话就是,当我想进行全部检索的时候,用带参数的preparedStatement如何能实现?
      

  6.   

    现在问题算是解决了吧,把语句改成模糊查询了:
    SELECT * FROM TABLE WHERE ID like ?||'%' AND CLASS like ?||'%' AND NAME like ?||'%'
    即使传空值,也可以做全部检索了。
    还是要感谢大家的热心,结贴啦。
      

  7.   

    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就可以了,多谢启发