首先发现一个异常,徘徊好久不能解决!error log如下:
Caused by: java.sql.SQLException: Parameter index out of range (35 > number of parameters, which is 34).
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
at com.mysql.jdbc.PreparedStatement.checkBounds(PreparedStatement.java:3729)
at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3713)
at com.mysql.jdbc.PreparedStatement.setBytesNoEscapeNoQuotes(PreparedStatement.java:3463)
at com.mysql.jdbc.PreparedStatement.setOneBatchedParameterSet(PreparedStatement.java:4264)
at com.mysql.jdbc.PreparedStatement.executeBatchedInserts(PreparedStatement.java:1766)
at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:1440)
at org.apache.commons.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:297)
at org.apache.commons.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:297)
at com.ibatis.sqlmap.engine.execution.SqlExecutor$Batch.executeBatch(SqlExecutor.java:611)
at com.ibatis.sqlmap.engine.execution.SqlExecutor.executeBatch(SqlExecutor.java:118)
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.executeBatch(SqlMapExecutorDelegate.java:759)
at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.executeBatch(SqlMapSessionImpl.java:184)
mysql jdbc jar 版本:5.1.18
初步定位:sql语句问题!
<insert id="insert" parameterClass="***">
insert into ****** (
gmt_created,
nick
)
values (
#gmtCreated#,
#nick#
) on duplicate
key update
gmt_modified=#gmtModified#,
nick=#nick#
</insert>
最终定位:
on duplicate
key update
应该为:
on duplicate key update
问题原因:
“ on duplicate key update ” 中如果有换行,sql解析就会失败!
注意:
mysql jdbc jar 版本5.1.8以下都存在一定程度的sql解析问题。最好能升级到最新版本!
如果sql解析异常,大多异常信息为:
Caused by: java.sql.SQLException: Parameter index out of range
分享到:
相关推荐
[mysql]mysql通过on duplicate key update实现批量插入或更新(csdn)————程
mysql “ON DUPLICATE KEY UPDATE” 语法如果在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则在出现重复值的行执行UPDATE;如果不会导致唯一值列...
代码如下: insert into table(a, b, c) values (1, 2, 3) on duplicate key update c = c + 1;1 update table set c = c + 1 where a = 1; 另外值得一提的是,这个语句知识mysql中,而标准sql语句中是没有的。 ...
mysql数据库Insert语句后加ONDUPLICATE KEY UPDATE,保证唯性如果在INSERT语句末尾指定了ON DUPLICATE KEY UP
本文介绍一下关于mysql中INSERT INTO… ON DUPLICATE KEY UPDATE用法
今天听同事介绍oracle到mysql的数据migration,他用了Insert into ..... on duplicate key update ...,我当时就想怎么不用Replace呢,于是回来就仔细查了下,它们果然还是有区别的
本文实例讲述了mysql 中 replace into 与 insert into on duplicate key update 的用法和不同点。分享给大家供大家参考,具体如下: replace into和insert into on duplicate key update都是为了解决我们平时的一个...
在对看看的后台进行排序的时候,遇到了一个像这样的需求,在电影表中有ID(主键自增)和orderby(排序字段) ,假设有十条数据id分别从1-10之间,对应的...下面来看看Mysql的REPLACE和INSERT … ON DUPLICATE KEY UPDATE REP
本篇文章是对mysql "ON DUPLICATE KEY UPDATE"语法进行了详细的分析介绍,需要的朋友参考下
深入理解和优雅使用ON DUPLICATE KEY Update 解决存在则更新,不存在则新增的问题 先看语法INSERT INTO table(id,a,……) values(1,‘xh’,……) ON DUPLICATE KEY Update a=‘value’,……; 举个例子 1,先创建表...
INSERT语法 INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [(col_name,…)] VALUES ({expr | DEFAULT},…),(…),… [ ON DUPLICATE KEY UPDATE col_name=expr, … ] 或: INSERT [LOW_...
在之前面对这样的问题的时候,我们知道,MySQL提供了ON DUPLICATE KEY UPDATE或者REPLACE INTO来解决。 使用ON DUPLICATE KEY UPDATE 插入数据之前,表中就一条记录,如下图 SQL语句如下,当插入记录时候,与表中...
碰到了 #1062 – Duplicate entry ‘1′ for key ‘PRIMARY’ 当时那个急啊,原本的数据我已经全部删除了,没办法只有请求万能的百度了。我找了大半天终于给我给我找到了。兴奋ing,马上测试,O(∩_∩)O哈哈~成功了...
本文详细的介绍了关于INSERT INTO .. ON DUPLICATE KEY更新多行记录,有需要了解的同学可参考一下
当我插入一条数据时,我要判断(k1,k2)是否已经存在(1条selete),若存在就update,不存在就insert