我试图插入一个新的记录到MS SQL数据库中,我得到了一个我从未见过的异常。当我打电话executeUpdate
以下异常被抛出:SQLServerException:结果集生成更新
com.microsoft.sqlserver.jdbc.SQLServerException: A result set was generated for update.
这是产生错误的Java代码:
// addComment method adds a new comment for a given requestId
public CommentBean addComment(CommentBean comment) {
PreparedStatement stmt = null;
INative nat = null;
Connection conn = null;
try {
nat = dbConn.retrieveNative();
conn = (Connection)nat.getNative("java.sql.Connection");
stmt = conn.prepareStatement(ADD_COMMENT);
stmt.setInt(1, comment.getRequestId());
stmt.setString(2, comment.getComment());
stmt.setString(3, new SimpleDateFormat("MM/dd/yyyy").format(comment.getDateCreated()));
stmt.setString(4, comment.getCreatedBy());
comment.setCommentId(stmt.executeUpdate()); // exception
} catch(Exception ex) {
System.err.println("ProjectRegistration::SQLDAO - addComment");
ex.printStackTrace();
} finally {
try {
if (stmt != null) stmt.close();
} catch (Exception e) {}
}
return comment;
}// end addComment
凡ADD_COMMENT被定义为一个字符串:
private static final String ADD_COMMENT = "INSERT INTO RequestComments OUTPUT INSERTED.commentId VALUES(?,?,?,?)";
为了彻底,表格定义为:
CREATE TABLE RequestComments (
commentId int NOT NULL PRIMARY KEY IDENTITY(1,1),
requestId int FOREIGN KEY REFERENCES Requests(requestId),
comment varchar(400),
dateCreated date,
createdBy varchar(12)
);
我不认为我在这里做任何非常复杂的事情,但我想不出为什么我得到这个例外。我有一个方法在同一类中执行完全相同的插入类型(字面意思是具有不同表名和值的相同查询),并且它没有问题。有没有人有任何想法如何解决这个问题?
我在这是形式的同班另一个查询字符串'= NEW_REQUEST“INSERT INTO要求OUTPUT INSERTED.requestId VALUES(...'我找回?这个id与'stmt.executeUpdate()'。是否有任何理由这样的不一致?或者预测它的方式? – Nathan
好吧,你的建议工作。我猜SQL Server没问题,通过' executeUpdate'只在某些情况下,这是一个令人讨厌的不一致性,但我的代码现在可以工作。 – Nathan