sql >> データベース >  >> RDS >> Sqlserver

SQLServerException:SQL の実行時にステートメントが結果セットを返しませんでした

    SQL 2000 から SQL 2005 にアップグレードし、Microsoft SQL Server 2005 JDBC ドライバー バージョン 1.2 に切り替えました。 Insert の後に SELECT SCOPE_IDENTITY() を実行すると、「The statement did not return a result」というエラーが発生しました。>

    注:この例で使用されている接続は、com.microsoft.sqlserver.jdbc.SqlServerConnection ではなく、java.sql.connection です。

    SQL 2000 コード

    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 コード

    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エンティティ属性値スキーマをピボットする方法

    2. PHPでさまざまなユーザーレベルのビューを実装する

    3. SQLServer2008で通知を変更する

    4. 複数の小数点を使用したPostgreSQLからのレコードの並べ替え(。)