我使用Spring命名JDBC的mysql batchUpdate如下:
public SqlParameterSource[] getBatchParamsArray(Collection params) {
List<SqlParameterSource> dbParams = new ArrayList<>();
for(Object p: params) {
BeanPropertySqlParameterSource beanPropertySqlParameterSource = new BeanPropertySqlParameterSource(p);
dbParams.add(beanPropertySqlParameterSource);
}
return dbParams.toArray(new SqlParameterSource[0]);
}
使用如下:
String SQL = "INSERT INTO mytable (user_id, related_user_id,:tagName) VALUES (:userId,:relatedUserId,:taggedAt) ON DUPLICATE KEY UPDATE set :tagName=:taggedAt"
this.namedJDBC.batchUpdate(SQL, this.getBatchParamsArray(listOfPOJOs));
我的问题是batchUpdate会转义列名,从而产生如下查询:
INSERT INTO mytable (tuser_id, related_user_id,'some_tag') VALUES (1234,24542336,'2015-12-17 10:44:25') ON DUPLICATE KEY UPDATE 'some_tag'='2015-12-17 10:44:25'
列some_tag存在,但逃脱&#39;使SQL查询失败,那么如何防止转义并手动执行,或以其他方式实现批量插入所需的通用功能
答案 0 :(得分:0)
到目前为止,似乎不可能,我也尝试过:
SET @tagName='some_tag'; INSERT INTO myTable (user_id, related_user_id,@tagName) ....
仍然是同样的问题。 所以我得到了这个:
this.getConnection().setAutoCommit(false);
for(POJO t:listOfPOJOs) {
this.namedJDBC.update(SQL.replace(":tagName",t.getTagName()), new BeanPropertySqlParameterSource(t));
}
this.getConnection().setAutoCommit(true);
因此,感谢您的反馈!