String sql="select * from Data where (Name like '%' + ? + '%') or (Name=?) or (Note like '%' + ? + '%') or (Class like '%' + ? + '%') or (Class=?)";
java.sql.PreparedStatement stmt = conn.prepareStatement(sql,java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,
java.sql.ResultSet.CONCUR_READ_ONLY);
stmt.setString(1,sqlkeyword);
stmt.setString(2,sqlkeyword);
stmt.setString(3,sqlkeyword);
stmt.setString(4,sqlkeyword);
stmt.setString(5,sqlkeyword);以上程序不能实现象"select * from data where name='123'"这样的效果,其他的不完全匹配完全正常实现,看看该怎么处理?

解决方案 »

  1.   

    (Name like '%' + ? + '%') 包含了 (Name=?) 了。
      

  2.   

    将PreparedStatement改为Statement即可
      

  3.   

    String sql="select * from Data where (Name like ? ) or (Name=?) or (Note like ? ) or (Class like ? ) or (Class=?)";
    java.sql.PreparedStatement stmt = conn.prepareStatement(sql,java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,
    java.sql.ResultSet.CONCUR_READ_ONLY);
    stmt.setString(1,"%" + sqlkeyword + "%");
    stmt.setString(2,sqlkeyword);
    stmt.setString(3,,"%" + sqlkeyword + "%");
    stmt.setString(4,,"%" + sqlkeyword + "%");
    stmt.setString(5,sqlkeyword);改成这样试试看
      

  4.   

    Name like '%' + ? + '%' 
    已经包括了 or Name=?  
    所以or Name=?是多余的如果有其他等于条件
    select * from aaa where id like '%'+?+'%' or id=?
    这么写是不会出错的:
    sql="select * from Data where Name like '%' + ? + '%' or Name=? or Note like '%' + ? + '%' or Class like '%' + ? + '%' or Class=?";