SQL 2000 से SQL 2005 में अपग्रेड किया गया और Microsoft SQL Server 2005 JDBC ड्राइवर संस्करण 1.2 पर स्विच किया गया। SELECT SCOPE_IDENTITY ()" के बाद एक इंसर्ट को निष्पादित करते समय मुझे "स्टेटमेंट ने कोई परिणाम नहीं दिया" त्रुटि मिली। मैंने एक्ज़ीक्यूटिव के बजाय एक्ज़िक्यूटअपडेट () और getGeneratedKeys का उपयोग करके समस्या को हल किया। यहाँ कोड से पहले और बाद में है।
नोट:इस उदाहरण में उपयोग किया गया कनेक्शन java.sql.connection है न कि com.microsoft.sqlserver.jdbc.SqlServerConnection।
एसक्यूएल 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);
}
एसक्यूएल 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);
}