sql >> Databasteknik >  >> RDS >> Sqlserver

SQLServerException:Satsen returnerade inte en resultatuppsättning när SQL kördes

Uppgraderad från SQL 2000 till SQL 2005 och bytte till Microsoft SQL Server 2005 JDBC Driver version 1.2. Jag fick felet "Satsen returnerade inte ett resultat" när jag körde en Insert följt av SELECT SCOPE_IDENTITY()". Jag löste problemet med executeUpdate() och getGeneratedKeys istället för executeQuery. Här är före- och efterkoden.

Obs:Anslutningen som används i det här exemplet är java.sql.connection, inte com.microsoft.sqlserver.jdbc.SqlServerConnection.

SQL 2000-kod

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-kod

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. Hur hittar man lagrade procedurer efter namn?

  2. Hur konverterar man en kolumnrubrik och dess värde till rad i sql?

  3. Optimera en SELECT-fråga som körs långsamt på Oracle som körs snabbt på SQL Server

  4. Yii-modell med sammansatt primärnyckel