这是我Oracle database
更新记录的代码我已经完成插入删除和搜索但无法更新。请告诉我代码或查询中有什么问题。
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);
}
我被困在这一点需要一些帮助:)提前谢谢。
答案 0 :(得分:1)
第一个问题是你似乎引用了一些约束的列名和值......
...'name="+name+"','login="+login+"','password="+psd+"','zip="+Zip+"','persontypeid="+typeid+"' ...
^-------------^ ^---------------^ ^----------------^ ^-----------^ ^-----------------------^
第二个问题是,你应该使用PreparedStament
来降低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();
}
此外,假设autoCommit
的{{1}}设置为false
,您应该只需使用Connection
提交更新,而不是执行其他查询,但这可能是司机的特殊要求
答案 1 :(得分:1)
只是猜测,因为您没有提供错误消息并且未提供变量内容,但您在某些属性的名称前设置了' ,例如'name="+name+"'
可能会导致例如'name=John'
,但正确的语法是name='John'
所以只需在你执行此操作的所有地方更正。然后确保您没有引用整数值。
答案 2 :(得分:0)
您应该打印最终的SQL语句以记录并检查错误。所有其他字段都将'name="+name+"'
更改为name='"+name+"'
。