【问题标题】:Two JdbcTemplate update statements in one method一种方法中的两个 JdbcTemplate 更新语句
【发布时间】:2014-05-13 07:13:59
【问题描述】:

我正在尝试以相同的方法进行两次 JdbcTemplate 更新,但只执行第一个。如何在一种方法中执行两个更新语句? EduId 和 timeId 返回正确的值,我猜 SQL 语法是有效的,所以问题不存在。

编辑:我正在使用 MySQL。

@Transactional(propagation=Propagation.REQUIRED, isolation=Isolation.SERIALIZABLE, readOnly=false)
public void moveEdu(int eduId, int timeId) {

    final String sql = "UPDATE timeslot ts"
                    + " INNER JOIN eduevent ee ON ts.edu_id = ee.edu_id"
                    + " SET ts.edu_id = null"
                    + " WHERE ts.edu_id = ?;";

    Object[] parameters = new Object[] {eduId};

    final String sql2 = "UPDATE timeslot ts"
                    + " INNER JOIN eduevent ee ON ts.edu_id = ee.edu_id"
                    + " SET ts.edu_id = ?"
                    + " WHERE ts.time_id = ?;";

    Object[] parameters2 = new Object[] {eduId, timeId};

    jdbcTemplate.update(sql, parameters);
    jdbcTemplate.update(sql2, parameters2);     
}

【问题讨论】:

    标签: java sql spring transactions jdbctemplate


    【解决方案1】:

    您的代码看起来不错。 您可以尝试一次性完成所有更新

    ...
    SET ts.edu_id=CASE
                  WHEN ts.time_id=? THEN ? <-- time_id=timeID then eduID
                  ELSE null
                  END
    WHERE ts.time_id = ? OR ts.edu_id = ?
    

    参数应该是

    Object[] parameters = new Object[] {timeId, eduId, timeId, eduId};
    

    【讨论】:

    • 它给我“UncategorizedSQLException”错误:“无法设置参数;嵌套异常是 java.sql.SQLException:无法设置参数”。
    【解决方案2】:

    我通过从那个 SQL2 字符串中删除“INNER JOIN”解决了这个问题。

    【讨论】:

      猜你喜欢
      • 2017-12-09
      • 2018-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-03
      • 1970-01-01
      • 2017-08-07
      相关资源
      最近更新 更多