代码之家  ›  专栏  ›  技术社区  ›  Wearybands

在Spring JDBC中更新查询[重复]

  •  0
  • Wearybands  · 技术社区  · 6 年前

    我正在编写一个使用spring jdbc更新记录的简单方法

     @Override
    public void updateEmployee(Employee e, int id) {
        try {
            Connection connection = DemoApplicationServiceImpl.getConnection();
            Statement statement = connection.createStatement();
            String update = "UPDATE salesforce.Employee__c SET First_Name__c = " + e.getFirst() + ", Last_Name__c = "
                    + e.getLast() + ", Email__c = " + e.getEmail() + " WHERE Id = " + id;
            System.out.println(update);
            statement.executeQuery(update);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
    

    这给了我一个错误

     psqlexception column "umair" does not exist
    

    umair甚至不是数据库中的一列

    有人能帮忙吗?

    谢谢

    2 回复  |  直到 6 年前
        1
  •  1
  •   Youcef LAIDANI    6 年前

    您的解决方案可能会导致SQL注入或语法错误,请改用 PreparedStatement 它更安全、更有用:

    String update = "UPDATE salesforce.Employee__c SET First_Name__c = ?, Last_Name__c = ?, Email__c = ? WHERE Id = ? ";
    try (PreparedStatement pstm = connection.prepareStatement(update)) {
        pstm.setString(1, e.getFirst());
        pstm.setString(2, e.getLast());
        pstm.setString(3, e.getEmail());
        pstm.setInt(4, id);
    
        pstm.executeUpdate();
    }
    

    关于您的错误:

    您之所以会出现此错误,是因为您试图使用以下内容:

    SET First_Name__c = umair
    

    但String或varchar应位于两个引号之间:

    SET First_Name__c = 'umair'
    //------------------^_____^
    
        2
  •  0
  •   mrdc    6 年前

    尝试以下操作:

    String update = "UPDATE salesforce.Employee__c SET First_Name__c = '" + e.getFirst() + "', Last_Name__c = '"
                + e.getLast() + "', Email__c = '" + e.getEmail() + "' WHERE Id = " + id;
    

    将字段与字符串值(以及其他一般值)进行比较时,需要使用引号,如字段='值'。

    但正如其他人所说,最好总是使用PreparedStatement https://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html