java中的Oracle更新语句

java中的Oracle更新语句,java,oracle,Java,Oracle,这是我的代码,用于Oracle数据库更新我已完成插入、删除和搜索但未能更新的记录。请告诉我代码或查询中的错误 Statement stmt; try { stmt = DBPRoject.conn.createStatement(); stmt.executeUpdate("update personinfo set cnic='"+CnicNo+"','name="+name+"','login="+login+"','password="+psd+"','zip="+Zip+

这是我的代码,用于
Oracle数据库
更新我已完成插入、删除和搜索但未能更新的记录。请告诉我代码或查询中的错误

Statement stmt;
try {
    stmt = DBPRoject.conn.createStatement();
    stmt.executeUpdate("update personinfo set cnic='"+CnicNo+"','name="+name+"','login="+login+"','password="+psd+"','zip="+Zip+"','persontypeid="+typeid+"' where cnic="+CnicNo);
    //stmt.executeQuery("update  personinfo set cnic=" + '"+CnicNo+"', '"+name+"', '"+login+"', '"+psd+"', '"+Zip+"',+typeid+);
    stmt.executeQuery("commit");
    stmt.executeQuery("update  personcont set cnic='"+CnicNo+", 'address="+HomeAdd+"', 'city="+City+"', 'statep="+State+"', 'mobno="+MobNo+"','email="+Email+"','nationality="+Nationality+"','persontypeid"+typeid+"','status"+Status+"' where cnic="+CnicNo);
    stmt.executeQuery("commit");
    JOptionPane.showMessageDialog(null, "Updated sucessfully"); 

}
catch(SQLIntegrityConstraintViolationException uni){
    JOptionPane.showMessageDialog(null, "Enter Uniqe CNIC");
    return;
}
catch (SQLException ex) {
    Logger.getLogger(Add_Customer.class.getName()).log(Level.SEVERE, null, ex);
}

我被困在这一点上,需要一些帮助:)提前谢谢。

第一个问题是,您似乎在引用列名称和列值以满足某些约束条件

 ...'name="+name+"','login="+login+"','password="+psd+"','zip="+Zip+"','persontypeid="+typeid+"' ...
    ^-------------^ ^---------------^ ^----------------^ ^-----------^ ^-----------------------^
第二个问题是,您应该使用它来降低SQL注入的风险

例如

try (PreparedStatement stmt = con.prepareStatement("update personinfo set cnic=?,name=?,login=?,password=?,zip=?,persontypeid=? where cnic=?")) {
    stmt.setString(1, CnicNo);
    stmt.setString(2, name);
    stmt.setString(3, login);
    stmt.setString(4, psd);
    stmt.setString(5, Zip);
    stmt.setString(6, typeid);
    stmt.setString(7, CnicNo);
    int rows = stmt.executeUpdate();
}

另外,假设
连接的
自动提交
设置为
false
,您应该能够简单地使用
con.commit()
提交更新,而不是执行另一个查询,但这可能是驱动程序的一个特殊要求

您应该在日志中打印最后的SQL语句并检查错误。将所有其他字段的
'name=“+name+”
更改为
name='“+name+”

只是猜测,因为您没有提供错误消息,也没有给出变量的内容,但您正在将'设置在某些属性的名称之前,例如
'name=“+name+”例如,
可能会导致
'name=John'
,但正确的语法是
name='John'
,因此只需在所有执行此操作的地方更正即可。然后确保没有引用整数值