java中的Oracle更新语句

时间:2014-06-23 02:36:54

标签: java oracle

这是我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);
}

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

3 个答案:

答案 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+"'