java - MySQL Java Spring batchUpdate 列名转义

标签 java mysql spring spring-jdbc

我有一个使用 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 存在,但转义 ' 使 SQL 查询失败,那么如何防止转义并手动执行,或者以其他方式实现批量插入所需的通用功能

最佳答案

到目前为止,似乎不可能,我也尝试过:

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);

因此,感谢您在这里提供反馈!

关于java - MySQL Java Spring batchUpdate 列名转义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34501843/

相关文章:

java - 使用break z时标签z丢失编译错误

mysql:多个数据集的选择和求和

php - PDO 语句什么都不做?

java - Spring restTemplate execute() POST 大文件并获得响应

java - Spring Data JPA - 如何以编程方式设置 JpaRepository 基础包

java - 检测浏览器在 http 请求响应周期中关闭

java - 使用bindFactory时No object available for injection错误

java - 我如何从 java web 应用程序跟踪用户 Windows 登录名

mysql - 从 MySQL 查询执行 .bat

ajax - spring 400 错误请求。我该如何修复它,或者至少看看是什么原因造成的?