日期:2014-05-20  浏览次数:20714 次

用prepareStatement模糊查询问题,我晕了
我用的是sql server 2005(记得),我看过网上介绍的这种方法,都是不行的,大哥们,有其他方法吗?急啊,用prepareStatement模糊查询这么难吗,我要是sql server 的方法
public List queryByLike(String cond) throws Exception{
List all = new ArrayList() ;
String sql = "SELECT * FROM note WHERE title LIKE ? or AUTHOR LIKE ? or CONTENT LIKE ?" ;
PreparedStatement pstmt = null ;
DataBaseConnection dbc = null ;
dbc = new DataBaseConnection() ;
try
{
pstmt = dbc.getConnection().prepareStatement(sql) ;
pstmt.setString(1,"%"+cond+"%") ;//这里已经按照网上大部分去做的,我晕了
pstmt.setString(2,"%"+cond+"%") ;
pstmt.setString(3,"%"+cond+"%") ;

------解决方案--------------------
你的这个问题错在别处了吧
pstmt.setString(1,"%"+cond+"%") ;
pstmt.setString(2,"%"+cond+"%") ; 
pstmt.setString(3,"%"+cond+"%") ;
pstmt的sql语句中的?号与setString方法的第一个参数1,2,3一一对应,第二个参数是字符串。
PreparedStatement使用没有错误
------解决方案--------------------
这种做法是没错的,我今天也刚好做到的这个,查询成功了,代码也和你差不多的
ps.setString(1, "%"+s_keyword+"%");//句子就是这样写的,
我反而是怀疑你的sql语句写错了,我看见你的那个select * 怪怪的,会不会是输入是时变成中文的输入
,你试试先将你的sql语句填上参数在你的数据库那边运行一下,确认sql语句无误再放到程序里面,有时候经常是出错在一些容易忽略的细节上啊
 
------解决方案--------------------
试:


String sql = "SELECT * FROM note WHERE title LIKE '%'+?+'%' or AUTHOR LIKE '%'+?+'%' or CONTENT LIKE '%'+?+'%'"; 
PreparedStatement pstmt = null; 
DataBaseConnection dbc = null; 
dbc = new DataBaseConnection(); 
try 

pstmt = dbc.getConnection().prepareStatement(sql) ; 
pstmt.setString(1, cond);//这里已经按照网上大部分去做的,我晕了 
pstmt.setString(2, cond); 
pstmt.setString(3, cond);
// ...