java: использование метода executeQuery (string) не поддерживается?

Я выполняю простое выполнение запроса на предварительный запрос и его вывод этой ошибки: java.sql.SQLException: использование метода executeQuery (string) не поддерживается в этом типе инструкции в net.sourceforge.jtds.jdbc.JtdsPreparedStatement.notSupported (JtdsPreparedStatement.java:197) в файле net.sourceforge.jtds.jdbc.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 

Несколько вещей стоит проверить:

  1. Используйте другой псевдоним. Использование COUNT в качестве псевдонима будет задавать проблемы.
  2. Объект запроса не должен передаваться дважды, один раз во время подготовки инструкции, а затем во время выполнения. Использование его в con.prepareStatement(query); т.е. подготовка инструкций, достаточно.

ДОПОЛНЕНИЕ

Сомнительно, что jTDS поддерживает использование метода String arg для PreparedStatement. Обоснование заключается в том, что PreparedStatement.executeQuery (), по-видимому, реализован, тогда как Statement.executeQuery (String), похоже, был переопределен в PreparedStatement.executeQuery (), чтобы выбросить указанное исключение.

Так…

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

В отличие от Statement , с PreparedStatement вы передаете запрос sql при его создании (через объект Connection ). Вы делаете это, но затем вы также передаете его снова, когда вы вызываете executeQuery(query) .

Используйте переменную no-arg для executeQuery (), определенную для PreparedStatement.

Так…

 PreparedStatement pstmt = con.prepareStatement(query); pstmt.setString(1,itemid); java.sql.ResultSet rs = pstmt.executeQuery(); 
  • Недопустимое имя объекта 'tableName', использующее Hibernate и Spring, с SQLServer
  • Итерация через SQL-результаты в Java
  • jTDS + хранимые процедуры + prepareSQL = ошибка уровня вложенности?
  • OpenJPA 1 - таблица последовательности не создается
  • datetime в sql изменяется только на дату моего приложения
  • Вызов функции MSSQL без указания схемы
  • SQL Server JDBC: невозможно создать новый собственный поток
  • Почему запрос Microsoft SQL Server 2012 занимает несколько минут по сравнению с JDBC 4.0, но второй (и) в Management Studio?
  • Сравнение JDBC java.sql.Date () дает false
  • Соединение JDBC с Eclipse на сервер MSSQL с использованием sqljdbc4.jar
  • Я не понимаю, почему «no sqljdbc_auth в java.library.path» сохраняется
  • Давайте будем гением компьютера.