Почему оператор не возвращает набор результатов для MS SQL jdb c 6.1.0 - PullRequest
0 голосов
/ 19 февраля 2020

Я должен выполнить запрос транзакции в java для MS SQL, чтобы обновить значение в строке и вернуть обновленный результат в java. Я использую следующий код. Он отлично работает для ms sql -jdb c -7.0.0.jre8, но у меня есть исключение для ms sql -jdb c -6.1.0.jre8. Не могли бы вы объяснить, как это исправить в java для версии 6.1?

String sql = "BEGIN\n" +
        "   BEGIN TRANSACTION\n" +
        "   declare @i bigint = -1\n" +
        "   UPDATE tableWithUniqueIds WITH(UPDLOCK)\n" +
        "   SET    @i = currentValue = (currentValue + 1)\n" +
        "   SELECT @i\n" +
        "   COMMIT\n" +
        "   END";
try(Connection con = getConnection(); CallableStatement stmt = con.prepareCall(sql);) {

stmt.setQueryTimeout(1000);

ResultSet rs = stmt.executeQuery();
...
} catch(Exception ex) {
...
} finally {
...
}

Исключение:

com.microsoft.sqlserver.jdbc.SQLServerException: The statement did not return a result set.
        at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:206) ~[mssql-jdbc-6.1.0.jre8.jar:?]
        at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:464) ~[mssql-jdbc-6.1.0.jre8.jar:?]
        at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:405) ~[mssql-jdbc-6.1.0.jre8.jar:?]
        at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7535) ~[mssql-jdbc-6.1.0.jre8.jar:?]
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:2438) ~[mssql-jdbc-6.1.0.jre8.jar:?]
        at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:208) ~[mssql-jdbc-6.1.0.jre8.jar:?]
        at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:183) ~[mssql-jdbc-6.1.0.jre8.jar:?]
        at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(SQLServerPreparedStatement.java:317) ~[mssql-jdbc-6.1.0.jre8.jar:?]
...
...