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

JAVA带预编译的模糊查询问题
import   java.sql.*;
public   class   mohu
{public   static   void   main(String   args[])
  {
    Connection   con;
    //Statement   sql;
    ResultSet   rs;
    PreparedStatement   sql;
    try{Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver ");
          }
    catch(ClassNotFoundException   e)
          {System.out.println( "   "+e);
          }
    try{con=DriverManager.getConnection( "jdbc:odbc:词典 ", " ", " ");
            System.out.println( "数据库连接成功 ");


            sql=con.prepareStatement( "SELECT   *   FROM   翻译   where   中文   LIKE   '%?% ' ");
            sql.setString(2, "瓷 ");
            System.out.println(sql);
            rs=sql.executeQuery();
            while(rs.next())
              {String   number=rs.getString(1);
                String   kname=rs.getString(2);

                System.out.print( "中文: "+number);
                System.out.print( "   英文: "+kname);
           
              }
            con.close();    
          }
      catch(SQLException   e)
        {   System.out.println(e);}
  }
}  
以上为源码,编译后运行不出结果,但把语句                     sql=con.prepareStatement( "SELECT   *   FROM   翻译   where   中文   LIKE   '%?% ' ");
            sql.setString(2, "瓷 ");
换成
sql=con.prepareStatement( "SELECT   *   FROM   翻译   where   中文   LIKE   '%瓷% ' ");
就通了,哪位达人帮帮忙看下,呵呵。。。。。

------解决方案--------------------
没看懂,明明应该是 sql.setString(1, "瓷 "); 为什么是2阿
------解决方案--------------------
sql=con.prepareStatement( "SELECT * FROM 翻译 where 中文 LIKE '%瓷% ' ");
========================
汗,上面一句跟用Statement一样,不存在预编译了,改成下面的试试看:
  sql=con.prepareStatement( "SELECT * FROM 翻译 where 中文 LIKE ? ");  
  sql.setString(1, "% "+ "瓷 "+ "% ");
当然了,“ "瓷 " ”可以用变量代替。

------解决方案--------------------
sql=con.prepareStatement( "SELECT * FROM 翻译 where 中文 LIKE ? ");  
sql.setString(1, " '%瓷% ' ");

------解决方案--------------------
我也郁闷这个问题呢 我觉得实在不行就用另一个笨一点的方法
用sql里的charindex代替like
数据量不大的话 我想应该没有什么问题的吧
------解决方案--------------------
创建这个类preparedStatement实例时《输入参数时》用“?”代替,在执行带参数的sql语句《前》,必须对”?“进行赋值,这就是为什么没通过的原因。