Upgrade dari SQL 2000 ke SQL 2005 dan beralih ke Microsoft SQL Server 2005 JDBC Driver versi 1.2. Saya mendapatkan kesalahan "Pernyataan tidak mengembalikan hasil" saat menjalankan Sisipan diikuti oleh SELECT SCOPE_IDENTITY()".Saya memecahkan masalah menggunakan executeUpdate() dan getGeneratedKeys alih-alih executeQuery. Ini kode sebelum dan sesudahnya.
Catatan:Koneksi yang digunakan dalam contoh ini adalah java.sql.connection bukan com.microsoft.sqlserver.jdbc.SqlServerConnection.
kode 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);
}
Kode 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);
}