Я должен выполнить запрос транзакции в 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:?]
...