sql >> Database >  >> RDS >> Sqlserver

SQLServerException:de instructie heeft geen resultaatset geretourneerd bij het uitvoeren van SQL

Opgewaardeerd van SQL 2000 naar SQL 2005 en overgestapt naar Microsoft SQL Server 2005 JDBC Driver versie 1.2. Ik kreeg de foutmelding "De instructie heeft geen resultaat geretourneerd" bij het uitvoeren van een Insert gevolgd door SELECT SCOPE_IDENTITY()". Ik heb het probleem opgelost met executeUpdate() en getGeneratedKeys in plaats van executeQuery. Hier is de code voor en na.

Opmerking:de verbinding die in dit voorbeeld wordt gebruikt, is java.sql.connection en niet de 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);
}


  1. MYSQL:Vind begin- en eindtijdstempel van een opeenvolgende telling

  2. Oracle opgeslagen procedure

  3. Selecteer DATEADD minuten met query SQL Server 2008

  4. kan symbool PreparedStatement niet vinden na JAR-upgrade