一个方法中有两个JdbcTemplate更新语句

时间:2014-05-13 07:13:59

标签: java sql spring transactions jdbctemplate

我试图用同样的方法做两个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);     
}

2 个答案:

答案 0 :(得分:0)

你的代码看起来很好。 您可以尝试在一个

中完成所有更新
...
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 = ?

和params应该是

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

答案 1 :(得分:0)

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