Java 语句类中的executeUpdate(字符串sql)方法,该方法具有一个insert查询,该查询在重复密钥更新时

Java 语句类中的executeUpdate(字符串sql)方法,该方法具有一个insert查询,该查询在重复密钥更新时,java,mysql,sql,netbeans,Java,Mysql,Sql,Netbeans,我正在我的NetBeans 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

我正在我的NetBeans 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。有没有办法在net beans中执行此查询,并知道它是否已正确更新。

首先请帮我一个忙,用PreparedStatement替换该语句

-返回SQL数据操作语言(DML)语句的行数

方法返回2
表示两行受到影响

但我无法检查插入是否成功


如果未插入它,它将返回0或引发异常

没错,您不需要将stmt.executeUpdate()函数保存为int。 如果更新成功,它将工作,您可以返回true(假设您希望它返回true,如果它工作),否则,如果抛出异常,您的代码将导致catch子句,因此将返回false

我建议您重写您的方法我将用我的一段代码为您提供一个示例:

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();


}
这种方法的优点是,您可以从另一个方法调用update方法,例如callUpdate()并在其中处理异常。 如果您必须执行许多sql查询,您可以将它们放入队列中,并且只需要使用此处所示的try-catch处理一次,但如果这是您唯一的一个查询,则这样看起来更平滑:

public boolean callUpdate(){


try{
 update();
 // update2();
 // update3();

 return true;
}catch(SQLException e){
 System.out.println(e.toString());
 return false;
}

}