JDBCTemplate:如果ID不存在,则更新或插入

3
请看下面我用来更新表中字段的方法,如果表中存在ID,则更新相关字段,否则在表中插入新记录。
  1. 如果ID存在,则更新
  2. 如果表中不存在ID,则插入新记录
是否有一种批量更新的方式可以同时满足这两个条件或者其他方式,因为我需要处理数百行数据。
public void updateTable(List<TestClass> testList){

String UPDATE_ITEM_ARTICLENO = "UPDATE itemTable SET articleno=? WHERE itemId=?";

jdbcTemplate.batchUpdate(UPDATE_ITEM_ARTICLENO, new BatchPreparedStatementSetter() {         
    @Override
    public void setValues(PreparedStatement ps, int i) throws SQLException {
        TestClass article = testList.get(i);            
        ps.setString(1, article.getItemId());
        ps.setString(2, article.getArticleno());            
    }        
    @Override
    public int getBatchSize() {
        return testList.size();
    }
  });
 }

你正在使用哪个数据库?你需要查看“merge”,但它并不被所有的数据库支持。请参考http://en.wikipedia.org/wiki/Merge_(SQL) 然后你可以在批量更新中使用merge。 - Shawn Vader
当我调用updateTable方法并传递一个包含bean类对象的列表作为参数时,在该方法中,我获取bean类对象的对象,然后从bean类对象中获取itemId。 - Bibhaw
好的,如果创建了一个新项目(因此您必须插入而不是更新),那么如何生成新项目的ID? - Dirk Lachowski
@DirkLachowski 这不是我的问题。请再仔细阅读一遍。 - Bibhaw
@ShawnVader 谢谢,看起来我找到了解决方案。我现在会尝试它。 - Bibhaw
显示剩余2条评论
1个回答

0

有一个标准的合并(SQL)语句。但不是所有的RDBMS都支持它。其中一些有替代方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接