我在我的net beans java应用程序中执行插入查询。
public boolean Update(){
String sql="insert into customer(cNic,cName,cAddress,cTp,cEmail,creditLimit,CustomerStatus)"
+ "values('"+cs.getcNic()+"','"+cs.getcName()+"','"+cs.getcAddress()+"','"+cs.getcTp()+"'"
+ ",'"+cs.getcEmail()+"','"+cs.getCreditLimit()+"',0) "
+ "ON DUPLICATE KEY UPDATE cName=VALUES(cName), cAddress=VALUES(cAddress), "
+ "cTp=VALUES(cTp), cEmail=VALUES(cEmail), \n" +
"creditLimit=VALUES(creditLimit),CustomerStatus=0;";
try {
Statement stmt=dbConn.createStatement();
int rslt =stmt.executeUpdate(sql);
if(rslt==1){
return true;
}
else{
return false;
}
}
catch (SQLException ex) {
JOptionPane.showMessageDialog(null, ex, "DB_CONNECTION ERROR", JOptionPane.ERROR_MESSAGE);
return false;
}
}
此方法适用于新行。
但是当我添加一行(表中已有主键)时,stmt.executeUpdate(sql)
方法返回2.但是数据已在表中更新。但我无法检查插入是否已成功完成。在正常情况下,如果执行成功,则返回1.是否有办法在网络bean中执行此查询并知道它是否已正确更新。
答案 0 :(得分:0)
首先请帮我用PreparedStatement替换声明
executeUpdate() - 返回SQL数据操作语言(DML)语句的行数
method returns 2
表示两行受到影响
But I can't check whether the insertion has been done successfully
如果没有插入,它将返回0或抛出异常
答案 1 :(得分:0)
多数说,你不需要将stmt.executeUpdate()函数保存为int。 如果更新成功,它将工作,你可以返回true(假设你希望它返回true,如果它工作),否则,如果将抛出异常,你的代码将导致catch子句,因此将返回假;
我建议你改写你的方法我会用一段代码给你一个例子:
public boolean update(Long id) throws SQLException{
Statement stmt = dbCon.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
String allRoomsToArchive = String.format("Update Room SET "
+ "archive=1 WHERE building_id=%s;",id);
stmt.executeUpdate(allRoomsToArchive);
// You always need to close your statements and connections, as for security reasons, and // also because sometimes, you will have too many connections, so that your query can not // be done. A connection does not automatically close after your statement has finished!
stmt.close();
dbCon.close();
}
这种方式的优点是你可以从另一种方法调用你的更新方法,例如callUpdate()并在那里处理异常。 如果你必须做很多sql-queries,你可以把它们放在一个队列中,并且只需要像这里一样使用try catch来处理它,但是如果它是你唯一的那个它看起来更顺畅:
public boolean callUpdate(){
try{
update();
// update2();
// update3();
return true;
}catch(SQLException e){
System.out.println(e.toString());
return false;
}
}