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'
,因此只需在所有执行此操作的地方更正即可。然后确保没有引用整数值