【问题标题】:java : use of executeQuery(string) method not supported error?java:使用executeQuery(string)方法不支持错误?
【发布时间】:2010-08-05 21:22:53
【问题描述】:

我正在执行一个简单的preparedstatement 查询执行,它向我抛出了这个错误: java.sql.SQLException:net.sourceforge.jtds.jdbc.JtdsPreparedStatement.notSupported(JtdsPreparedStatement.java:197) 上的此类语句不支持在 net.sourceforge.jtds.jdbc 上使用 executeQuery(string) 方法。 JtdsPreparedStatement.executeQuery(JtdsPreparedStatement.java:822) 在 testconn.itemcheck(testconn.java:58)

任何想法我做错了什么?提前致谢 这是代码:

private static int itemcheck (String itemid ) { 
  String query;
  int count = 0;
  try { 
   Class.forName("net.sourceforge.jtds.jdbc.Driver");
        con = java.sql.DriverManager.getConnection(getConnectionUrl2());
   con.setAutoCommit(false);
   query = "select count(*) as itemcount from timitem where itemid like ?";

   //PreparedStatement pstmt = con.prepareStatement(query); 
   //pstmt.executeUpdate(); 

   PreparedStatement pstmt = con.prepareStatement(query);
   pstmt.setString(1,itemid);
   java.sql.ResultSet rs = pstmt.executeQuery();



   while (rs.next()) {
     count = rs.getInt(1);
    System.out.println(count);
   } //end while 



  }catch(Exception e){ e.printStackTrace(); } 

  return (count);

} //end itemcheck 

【问题讨论】:

    标签: java sql-server


    【解决方案1】:

    有几件事值得检查:

    1. 使用不同的别名。使用 COUNT 作为别名会自找麻烦。
    2. 查询对象不需要传递两次,一次是在准备语句期间,另一次是在执行期间。在con.prepareStatement(query); 即语句准备中使用它就足够了。

    附录

    jTDS 是否支持对 PreparedStatement 使用 String arg 方法是值得怀疑的。理由是 PreparedStatement.executeQuery() 似乎已实现,而 Statement.executeQuery(String) 似乎已在 PreparedStatement.executeQuery() 中被覆盖以引发所述异常。

    【讨论】:

    • 第二点......即使我也犯了同样的错误。谢谢你节省了我很多时间
    【解决方案2】:

    所以...

    PreparedStatement pstmt = con.prepareStatement(query); 
    pstmt.setString(1,itemid);
    java.sql.ResultSet rs = pstmt.executeQuery(query);
    

    Statement 不同,PreparedStatement 在创建时传递查询 sql(通过 Connection 对象)。你正在这样做,但是当你调用 executeQuery(query) 时,你也再次传递它。

    使用为 PreparedStatement 定义的no-arg overload of executeQuery()

    所以...

    PreparedStatement pstmt = con.prepareStatement(query); 
    pstmt.setString(1,itemid);
    java.sql.ResultSet rs = pstmt.executeQuery();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-25
      • 2021-09-25
      • 2013-04-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多