我正在做一个简单的预备陈述查询执行,它给我这个错误: java.sql.SQLException:net.sourceforge.jtds.jdbc中net.sourceforge.jtds.jdbc.JtdsPreparedStatement.notSupported(JtdsPreparedStatement.java:197)的此类语句不支持使用executeQuery(string)方法。 testconn.itemcheck上的JtdsPreparedStatement.executeQuery(JtdsPreparedStatement.java:822)(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
答案 0 :(得分:6)
有几件事值得检查:
con.prepareStatement(query);
即语句准备中使用它就足够了。<强>附录强>
jTDS支持对PreparedStatement使用String arg方法是值得怀疑的。理由是PreparedStatement.executeQuery()似乎已实现,而Statement.executeQuery(String)似乎已在PreparedStatement.executeQuery()中被覆盖以抛出声明的异常。
答案 1 :(得分:6)
因此...
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();