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

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

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

最佳答案

有几件事值得检查:

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

  • ADDENDUM

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

    10-06 14:05