如何使用需要 2 个参数且其中只有一个参数存储在列表中的查询进行批处理更新
Posted
技术标签:
【中文标题】如何使用需要 2 个参数且其中只有一个参数存储在列表中的查询进行批处理更新【英文标题】:how can I batchUpdate with a query that requires 2 parameters and only one of them is stored in a list 【发布时间】:2011-09-18 03:17:42 【问题描述】:我使用 Spring-JDBC 在我的 mysql 数据库中插入用户的 facebook 好友列表。
我有一个包含用户 uid 的最终 Long 和一个包含他的朋友列表的 List。
我的查询是:
final String sqlInsert="insert into fb_user_friends(fb_uid,friend_uid) values(?,?)";
我使用 SqlParameterSourceUtils 创建批处理参数
SqlParameterSource[] batch = SqlParameterSourceUtils.createBatch(friendsList.toArray());
我使用以下命令执行插入:
int[] insertCounts = this._jdbcTemplate.batchUpdate(sqlInsert,batch);
这里的问题是列表只包含查询所需的第二个参数。
我是否必须修改friendsList以添加另一列或有其他方法?
谢谢!
【问题讨论】:
【参考方案1】:这应该会有所帮助:http://static.springsource.org/spring/docs/3.0.x/reference/jdbc.html#jdbc-advanced-jdbc
编辑:
final Long uid = 1L;
final List<Long> friendList /* = ... */;
int[] updateCounts = jdbcTemplate.batchUpdate(
"insert into fb_user_friends(fb_uid,friend_uid) values(?,?)",
new BatchPreparedStatementSetter()
public void setValues(final PreparedStatement ps, final int i) throws SQLException
ps.setLong(1, uid);
ps.setLong(2, friendList.get(i));
public int getBatchSize()
return friendList.size();
);
或
final List<User> userList /* = ... */;
SqlParameterSource[] batch = SqlParameterSourceUtils.createBatch(userList.toArray());
int[] updateCounts = simpleJdbcTemplate.batchUpdate(
"insert into fb_user_friends(fb_uid,friend_uid) values(:uid,:friendUid)",
batch);
与
@Data // from lombok
class User
private Long uid;
private Long friendUid;
未经测试,改编自提供的链接示例
【讨论】:
嗨。我已经熟悉 Spring JDBC 文档。在那里没有找到相关信息后,我来这里询问。也许无法完成,但我只是想确定一下。以上是关于如何使用需要 2 个参数且其中只有一个参数存储在列表中的查询进行批处理更新的主要内容,如果未能解决你的问题,请参考以下文章