【问题标题】:Problem in updating a data column in spring春季更新数据列的问题
【发布时间】:2018-10-22 04:20:05
【问题描述】:

我有一个名为 ProgramData 的数据库表。他们我有一个名为 Id 的数据列并被执行。 id 设置为自动增量。

表结构是这样的。

我想要的是根据 id 执行的列需要更新。以下是我的代码段。

 public void saveDtvProgDataExecuted()
  {
    ProgramData programeData = new ProgramData();
    String SQL = "UPDATE program_data SET executed=1 WHERE programeData.id = ?";
    this.jdbcTemplate.update(SQL);
}

如果我运行此代码,则会出现 bad SQL 语法 [UPDATE program_data SET executed=1 WHERE programeData.id = ?]; 之类的错误。嵌套异常是 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax;检查与您的 MariaDB 服务器版本相对应的手册,以了解在“?”附近使用的正确语法。在第 1 行

【问题讨论】:

  • 您是否传递了 { programeData.id = ?} 的值
  • 我认为你的错误是你在 WHERE 子句中输入了错误的表名......你可以写WHERE id = ?。但是@this_is_om_vm 是对的——当你超过它时,它会抱怨,因为你没有为 ?占位符。
  • 不,实际上我不知道如何通过它。
  • @moilejter 问题是我想不出如何传递那个 id 以及我应该在哪里做这个

标签: spring spring-boot


【解决方案1】:

问题是您没有将 ID 值传递给 jdbctemplate。

你应该使用 this.jdbctemplate.update(SQL, id); 其中 id 是您正在更新的记录的 id。

有关详细信息,请参阅文档: http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/htmlsingle/spring-framework-reference.html#jdbc-updates

【讨论】:

    【解决方案2】:

    在你路过的时候试试这个语句?在您的 sql 查询中,它需要在执行时设置。

     String SQL = "UPDATE program_data SET executed=1 WHERE programeData.id = ?";
       this.jdbcTemplate.update(SQL,new PreparedStatementCallback<Boolean>(){  
        @Override  
        public Boolean doInPreparedStatement(PreparedStatement ps)  
                throws SQLException, DataAccessException {  
    
            ps.setInt(1,"here you need to pass value of programeData.id);  
            return ps.execute();  
                  }  
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-07
      • 2015-07-25
      • 2011-10-19
      • 2018-07-31
      • 2013-12-09
      • 2016-06-29
      相关资源
      最近更新 更多