Đã nâng cấp từ SQL 2000 lên SQL 2005 và chuyển sang Microsoft SQL Server 2005 JDBC Driver phiên bản 1.2. Tôi gặp lỗi "Câu lệnh không trả về kết quả" khi thực thi Chèn theo sau là SELECT SCOPE_IDENTITY () ". Tôi đã giải quyết sự cố bằng cách sử dụng executeUpdate () và getGeneratedKeys thay vì thực thi. Đây là mã trước và sau.
Lưu ý:Kết nối được sử dụng trong ví dụ này là java.sql.connection không phải com.microsoft.sqlserver.jdbc.SqlServerConnection.
Mã 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);
}
Mã 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);
}