- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate 批量更新表。 nameParameterJdbcTemplate.batchUpdate(query...) 方法; 我的查询包含子句,因此我收到如下 SQL 错误:
nested exception is com.ibm.db2.jcc.am.SqlSyntaxErrorException: [jcc][1091][10824][4.14.113] Invalid data conversion: Parameter instance [1271, 1272] is invalid for the requested conversion. ERRORCODE=-4461, SQLSTATE=42815.
下面是我想要批量更新的数据。它是contractId(字符串)作为键和值作为taskid(整数)列表的映射 数据:
{10008=[1271, 1272], 10007=[1269, 1270], 10009=[1273, 1274], 10011=[1277, 1278], 10010=[1275, 1276], 10012=[1279], 10006=[1267, 1268]}
where key is the CONTRACT_ID (String) and value is list of TASK_ID ( Integer)
e.g. CONTRACT_ID are 10008, 10007, 10009 etc.
and respective TASK_ID are [1271, 1272], [1269, 1270], [1273, 1274] etc.
我尝试在循环内调用namedParameterJdbcTemplate.update,它工作正常,我可以使用单个更新来更新相同的查询
@Override
public int assignUserTask(String customerId, String userId, Map<String, List<Integer>> resultMap)
throws ApplicationException {
int totalCount = 0;
String ts = DateUtils.getCurrentDatetimeStamp();
String todaysDate = DateUtils.getTodaysDate();
String query = CommonUtils.buildQuery("UPDATE EM_WF_USER_QUEUE SET", "CURRENT_USER_ID = :currentUserId,",
"INITIAL_USER_ID = :initialUserId,", "USER_REASSIGN_TYPE_CD = 'GW',",
"USER_REASSIGN_TIME = :userReassignTime,", "LAST_CENTRAL_QUEUE_DATE = :lastCentralQueueData,",
"REASSIGN_CENTRAL_DATE = :reassignCentralDate,", "ORG_GW_CRT_TIME = :orgGwCreateTime,",
"LAST_UPDT_USER = :lastUpdtUser ,", "LAST_UPDT_TIME = :lastUpdtTime",
"WHERE CONTRACT_ID = :contractId AND TASK_ID IN (:taskIds)",
"AND CUSTOMER_ID = :customerId AND CURRENT_USER_ID = 'UNASSIGNED'",
"AND OVERIDE_IND = 'N' AND QUEUE_STATUS != 'CLOSED'");
try {
MapSqlParameterSource params = new MapSqlParameterSource();
params.addValue("currentUserId", userId);
params.addValue("initialUserId", userId);
params.addValue("userReassignTime", ts);
params.addValue("lastCentralQueueData", todaysDate);
params.addValue("reassignCentralDate", todaysDate);
params.addValue("orgGwCreateTime", ts);
params.addValue("lastUpdtUser", userId);
params.addValue("lastUpdtTime", ts);
params.addValue("customerId", customerId);
for (Entry<String, List<Integer>> entry : resultMap.entrySet()) {
params.addValue("contractId", entry.getKey());
params.addValue("taskIds", entry.getValue());
totalCount += namedParameterJdbcTemplate.update(query, params);
}
return totalCount;
} catch (DataAccessException exp) {
throw new CustomException(exp, "Exception occured!");
}
}
@覆盖 公共(public) int allocateUserTask(String customerId, String userId, Map> resultMap) 抛出自定义异常{
String ts = DateUtils.getCurrentDatetimeStamp();
String todaysDate = DateUtils.getTodaysDate();
String query = CommonUtils.buildQuery("UPDATE EM_WF_USER_TASK SET", "CURRENT_USER_ID = :currentUserId,",
"INITIAL_USER_ID = :initialUserId,", "USER_REASSIGN_TIME = :userReassignTime,",
"LAST_CENTRAL_QUEUE_DATE = :lastCentralQueueData,", "REASSIGN_CENTRAL_DATE = :reassignCentralDate,",
"ORG_GW_CRT_TIME = :orgGwCreateTime,", "LAST_UPDT_USER = :lastUpdtUser ,",
"LAST_UPDT_TIME = :lastUpdtTime", "WHERE CONTRACT_ID = :contractId AND TASK_ID IN (:taskIds)",
"AND CUSTOMER_ID = :customerId AND CURRENT_USER_ID = 'UNASSIGNED'",
"AND ACTIVE_IND = 'Y' AND TASK_STATUS != 'CLOSED'");
try {
List<MapSqlParameterSource> batchArgs = new ArrayList<>();
for (Entry<String, List<Integer>> entry : resultMap.entrySet()) {
MapSqlParameterSource params = new MapSqlParameterSource();
params.addValue("currentUserId", userId);
params.addValue("initialUserId", userId);
params.addValue("userReassignTime", ts);
params.addValue("lastCentralQueueData", todaysDate);
params.addValue("reassignCentralDate", todaysDate);
params.addValue("orgGwCreateTime", ts);
params.addValue("lastUpdtUser", userId);
params.addValue("lastUpdtTime", ts);
params.addValue("contractId", entry.getKey());
params.addValue("taskIds", entry.getValue());
params.addValue("customerId", customerId);
batchArgs.add(params);
}
int[] retVal = namedParameterJdbcTemplate.batchUpdate(query,
batchArgs.toArray(new MapSqlParameterSource[resultMap.size()]));
return retVal.length;
} catch (DataAccessException exp) {
throw new CustomException(exp, "Exception occured!");
}
}
当我使用namedParameterJdbcTemplate.batchUpdate(query..)时,我希望查询能够批量运行
但它给出了类型转换错误。
Caused by: org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [UPDATE EM_WF_USER_TASK SET CURRENT_USER_ID = ?, INITIAL_USER_ID = ?, USER_REASSIGN_TYPE_CD = 'GW', USER_REASSIGN_TIME = ?, LAST_CENTRAL_QUEUE_DATE = ?, REASSIGN_CENTRAL_DATE = ?, ORG_GW_CRT_TIME = ?, LAST_UPDT_USER = ? , LAST_UPDT_TIME = ? WHERE CONTRACT_ID = ? AND TASK_ID IN (?, ?) AND CUSTOMER_ID = ? AND CURRENT_USER_ID = 'UNASSIGNED' AND ACTIVE_IND = 'Y' AND TASK_STATUS != 'CLOSED' ]; nested exception is com.ibm.db2.jcc.am.SqlSyntaxErrorException: [jcc][1091][10824][4.14.113] Invalid data conversion: Parameter instance [1271, 1272] is invalid for the requested conversion. ERRORCODE=-4461, SQLSTATE=42815 at org.springframework.jdbc.support.SQLExceptionSubclassTranslator.doTranslate(SQLExceptionSubclassTranslator.java:93) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81) at org.springframework.jdbc.core.JdbcTemplate.translateException(JdbcTemplate.java:1402) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:620) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:634) at org.springframework.jdbc.core.JdbcTemplate.batchUpdate(JdbcTemplate.java:924) at org.springframework.jdbc.core.namedparam.NamedParameterBatchUpdateUtils.executeBatchUpdateWithNamedParameters(NamedParameterBatchUpdateUtils.java:43) at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.batchUpdate(NamedParameterJdbcTemplate.java:357) at com.medicare.mss.daoImpl.ContractDAO.assignUserTask(ContractDAO.java:274) ... 164 more Caused by: com.ibm.db2.jcc.am.SqlSyntaxErrorException: [jcc][1091][10824][4.14.113] Invalid data conversion: Parameter instance [1271, 1272] is invalid for the requested conversion. ERRORCODE=-4461, SQLSTATE=42815 at com.ibm.db2.jcc.am.ed.a(ed.java:677) at com.ibm.db2.jcc.am.ed.a(ed.java:60) at com.ibm.db2.jcc.am.ed.a(ed.java:103) at com.ibm.db2.jcc.am.po.c(po.java:2630) at com.ibm.db2.jcc.am.po.setObject(po.java:2409) at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.setObject(HikariProxyPreparedStatement.java) at org.springframework.jdbc.core.StatementCreatorUtils.setValue(StatementCreatorUtils.java:411) at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValueInternal(StatementCreatorUtils.java:232) at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValue(StatementCreatorUtils.java:163) at org.springframework.jdbc.core.BatchUpdateUtils.setStatementParameters(BatchUpdateUtils.java:70) at org.springframework.jdbc.core.namedparam.NamedParameterBatchUpdateUtils.access$000(NamedParameterBatchUpdateUtils.java:33) at org.springframework.jdbc.core.namedparam.NamedParameterBatchUpdateUtils$1.setValues(NamedParameterBatchUpdateUtils.java:50) at org.springframework.jdbc.core.JdbcTemplate.lambda$batchUpdate$2(JdbcTemplate.java:932) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:605) ... 169 more com.medicare.mss.exception.ApplicationException: Error occured while assignUserTask! at com.medicare.mss.daoImpl.ContractDAO.assignUserTask(ContractDAO.java:279) at com.medicare.mss.daoImpl.ContractDAO$$FastClassBySpringCGLIB$$30e66146.invoke() ... at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:745)
最佳答案
我发现问题出在batchUpdate 查询中的IN 子句上。请检查以下链接。希望这可以帮助: https://github.com/spring-projects/spring-framework/issues/21935
关于java - 在查询中使用子句时,namedParameterJdbcTemplate.batchUpdate(query..) 出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58725046/
这个问题已经有答案了: Java MongoDB save multiple documents at once (5 个回答) 已关闭 3 年前。 jdbcTemplate.batchUpdate(
谁能帮我解答一下这个问题:如果我执行 JDBC batchUpdate,它更新多个表并且不包含在任何事务中,它会锁定任何表或行吗? 我的代码执行一堆 UPDATE 语句,所有语句如下所示 St
我正在使用 batchUpdate() 在表中插入多条记录。根据要求,如果主键在插入时存在重复值,则应使用最新接收到的数据对其进行更新,因此我尝试在 INSERT< 中使用 ON DUPLICATE
我在 UICollectionView 的 batchUpdate 操作中确定了一个简单的边缘情况,它应该可以工作但失败了 attempt to perform an insert and a mov
类似的电话 spreadsheets.batchUpdate和 spreadsheets.values.batchUpdate可以在一次调用中执行多个更新操作。 我在 https://develope
我正在使用 NamedParameterJdbcTemplate.batchUpdate 对我的数据库表进行批量更新,但我想禁用 auto-commit 并手动执行提交。 我可以从 connectio
在处理大量查询时,我遇到了 JdbcTemplate.batchUpdate(String[] requests) 方法的问题。 该语句正在执行,没有任何异常,但更新未反射(reflect)在数据库中
我正在尝试使用 batchUpdate 更新表中的数千行。我的要求是: 1) 假设一个批次有 1000 条记录。记录号 235 导致了错误。如何找出导致错误的记录。 2) 假设记录 600 没有导致更
这个问题已经有答案了: JDBC Batch Update Problem (7 个回答) 已关闭 9 年前。 我正在使用 spring 的 NamedParameterJdbcTemplate ba
我正在使用 spring 将批处理记录插入到数据库中。但我收到此错误:java.sql.SQLException:无法在 java.util.ArrayList 和 JAVA_OBJECT 之间转换。
我正在尝试使用 org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate 批量更新表。 nameParameterJdbc
我有一个使用 Spring 的名为 JDBC 的 mysql batchUpdate,如下所示: public SqlParameterSource[] getBatchParamsArray(Col
需要插入记录使用spring jdbctemplate批量更新。插入时如果发现重复记录,则需要更新记录否则插入。我怎么做?下面是我的代码。 注意:没有包含异常处理。 result = jdbcTem
我有一个 collectionView,它有 3 个部分,每个部分都有一个不同的单元格(将单元格的数据分成单独的部分比只分成 1 个部分更容易)。 collectionView 的数据源中只有一个 d
我正在做的项目使用了以下依赖 org.springframework spring-jdbc 3.2.0.RELEASE 有了这个,我将进行以下方法调用 (1) temp
我想从 org.springframework.jdbc.core.JdbcTemplate.batchUpdate 获取插入/更新的行 ID(主键) 有什么方法可以像 this 一样使用 KeyHo
我一直在寻找一种最佳方式更新大量行的方法,因为 orm 操作速度很慢,最终我当前使用的解决方案是通过 jdbc 批量更新将数据库更新包装在 forkjoinpool 任务中。(使用 ORM 在数据库中
我正在尝试使用批量更新来更新表中的数据。当我更新数据时,出现了一些失败。我想获取失败查询的更新语句。例如,如果失败的查询是“update table set abc= 123”。然后我希望异常处理程序
假设,我们要通过java代码在mysql表中插入20行。以下哪种方法有效以及原因。 1)使用executeBatch将所有插入语句合并为一批,然后使用Preparedstatement的commit方
我有 MariaDb 实例和一个临时表。工作流程: 开始交易 如果存在则删除临时表,创建临时表 使用 insert into TEMP1 (xxx,yyy) values(?,?),(?,?),(?,
我是一名优秀的程序员,十分优秀!