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 '%瓷%'");
就通了,哪位达人帮帮忙看下,呵呵。。

解决方案 »

  1.   

    没看懂,明明应该是  sql.setString(1,"瓷"); 为什么是2阿
      

  2.   

    sql=con.prepareStatement("SELECT * FROM 翻译 where 中文 LIKE '%瓷%'");
    ========================
    汗,上面一句跟用Statement一样,不存在预编译了,改成下面的试试看:
      sql=con.prepareStatement("SELECT * FROM 翻译 where 中文 LIKE ?");  
      sql.setString(1, "%"+"瓷"+"%");
    当然了,“ "瓷" ”可以用变量代替。
      

  3.   

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

  4.   

    sql=con.prepareStatement("SELECT * FROM 翻译 where 中文 LIKE ?");  
    sql.setString(1, "'%瓷%'");
    =====================================
    楼上的,谢谢你的提示。对于这一类的操作我已经尝试多遍,都不行,关于这个查询还有其他方案吗
      

  5.   

    我也郁闷这个问题呢 我觉得实在不行就用另一个笨一点的方法
    用sql里的charindex代替like 
    数据量不大的话 我想应该没有什么问题的吧
      

  6.   

    创建这个类preparedStatement实例时《输入参数时》用“?”代替,在执行带参数的sql语句《前》,必须对”?“进行赋值,这就是为什么没通过的原因。
      

  7.   

    大哥,我也遇到了这个问题,后来解决了,不过不是用的预编译:String sql="SELECT   *   FROM   翻译   where   中文   LIKE '%" +  瓷  +  "%'";
    我是传的参数,“瓷”是用一个参数代替的。