Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQLServerException:Die Anweisung hat beim Ausführen von SQL keine Ergebnismenge zurückgegeben

Upgrade von SQL 2000 auf SQL 2005 und Wechsel zu Microsoft SQL Server 2005 JDBC Driver Version 1.2. Ich habe den Fehler „Die Anweisung hat kein Ergebnis zurückgegeben“ erhalten, wenn ein Insert gefolgt von SELECT SCOPE_IDENTITY() ausgeführt wurde. Ich habe das Problem mit executeUpdate() und getGeneratedKeys anstelle von executeQuery gelöst. Hier ist der Vorher- und Nachher-Code.

Hinweis:Die in diesem Beispiel verwendete Verbindung ist java.sql.connection, nicht com.microsoft.sqlserver.jdbc.SqlServerConnection.

SQL 2000-Code

String  dbURL = "jdbc:sqlserver" + "://" + dbServer + ":" +
                 dbServerPort + ";SelectedMethod=cursor;databaseName="
                           + dbName + ";user=xxx;password=xxx";
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
java.sql.Connection connection = DriverManager.getConnection(dbURL);
sql = "insert into Contact (name) values ('ABC'); SELECT SCOPE_IDENTITY()";
PreparedStatement ps = connection.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
if (rs.next()) {
     long id = rs.getLong(1);
     System.out.println("Id=" + id);
}

SQL 2005-Code

String  dbURL = "jdbc:sqlserver" + "://" + dbServer + ":" +
                 dbServerPort + ";SelectedMethod=cursor;databaseName="
                           + dbName + ";user=xxx;password=xxx";

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
java.sql.Connection connection = DriverManager.getConnection(dbURL);
sql = "insert into Contact (name) values ('ABC'); SELECT SCOPE_IDENTITY()";
PreparedStatement ps = connection.prepareStatement(sql);
ps.executeUpdate();  // do not use execute() here otherwise you may get the error
                     // The statement must be executed before 
                     // any results can be obtained on the next
                     // getGeneratedKeys statement.

ResultSet rs = ps.getGeneratedKeys();
if (rs.next()) {
     long id = rs.getLong(1);
     System.out.println("Id=" + id);
}