【问题标题】:Update query in Spring JDBC [duplicate]Spring JDBC中的更新查询[重复]
【发布时间】:2018-09-22 15:51:40
【问题描述】:

我正在写一个使用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 甚至不是数据库中的一列

谁能帮忙?

谢谢

【问题讨论】:

  • 这与 Spring 无关,它只是基本的 JDBC。关于不该做什么的一个非常糟糕的例子。始终使用PreparedStatement 而不是Statement
  • 也许您需要在 sql 查询中的 = 之后添加 '(quotes)。如果您不想处理它,可以使用准备好的语句并设置参数..
  • 说真的??? 永远不要连接 SQL 语句!阅读 SQL 注入。使用准备好的语句。

标签: java spring spring-jdbc


【解决方案1】:

您的解决方案可能会导致 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】:

    试试这个:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-12
      • 1970-01-01
      • 1970-01-01
      • 2018-11-08
      • 2013-02-09
      • 2020-02-25
      • 1970-01-01
      相关资源
      最近更新 更多