首先发现一个异常,徘徊好久不能解决!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
分享到:
相关推荐
当你在`INSERT`语句后添加`ON DUPLICATE KEY UPDATE`,如果新插入的行违反了唯一性约束,MySQL将执行指定的`UPDATE`操作。这里的“唯一性”指的是任何具有唯一索引或主键的列。例如,如果你有一个名为`consume_locus...
在MySQL数据库中,`ON DUPLICATE KEY UPDATE` 是一个非常实用的特性,它允许你在执行INSERT语句时,如果插入的数据违反了唯一性约束(即存在相同的唯一索引),则自动执行UPDATE操作来更新已有记录。这个功能在处理...
在MySQL数据库中,`ON DUPLICATE KEY UPDATE` 是一个非常实用的特性,它允许你在插入新数据时,如果遇到重复的唯一键值,自动执行更新操作,而不是抛出错误。这个功能大大简化了数据处理的流程,特别是当你需要在一...
ON DUPLICATE KEY UPDATE` 是MySQL的非标准扩展,其他数据库系统可能不支持这种语法。因此,在编写跨数据库兼容的SQL代码时,需要特别注意这一点。 如果你想了解更多关于`INSERT`、`UPDATE`和其他DML语句的使用,...
mysql “ON DUPLICATE KEY UPDATE” 语法如果在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则在出现重复值的行执行UPDATE;如果不会导致唯一值列...
ON DUPLICATE KEY UPDATE`是两种处理数据冲突的方法,它们在处理已有键值冲突时的行为有所不同。这两种语句都是在插入新记录时,如果发现存在相同的唯一键值,则采取不同的策略。 1. `REPLACE INTO`: - 当尝试...
互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术...
ON DUPLICATE KEY UPDATE`都是MySQL提供的强大工具,它们可以帮助我们更高效、更精确地管理数据库中的数据,特别是处理需要确保数据唯一性和排序顺序的情况下。通过合理利用这些语句,我们可以减少数据库操作的复杂...
MySQL的`ON DUPLICATE KEY UPDATE`语法是一种特殊的数据插入机制,它允许你在尝试插入新记录时,如果遇到唯一约束冲突(比如主键或唯一索引的值已经存在),则自动更新已有记录。这个特性在处理数据导入、同步或批量...
在MySQL中,`REPLACE INTO` 和 `INSERT INTO ON DUPLICATE KEY UPDATE` 是两种处理数据插入时冲突的方法,主要用于处理当试图插入一条记录,而该记录的唯一键或主键已经在表中存在的情况。这两种方法都可以实现如果...
MySQL中的`ON DUPLICATE KEY UPDATE`语句是一个非常实用的功能,它允许你在插入新记录时检查是否存在冲突的唯一键。如果遇到冲突(即试图插入的键已经存在),它会更新已有记录而不是抛出错误。这在处理批量导入或...
在MySQL数据库中,如果你需要执行一个操作,即当数据存在时进行更新,如果不存在则进行插入,你可以使用`INSERT INTO...ON DUPLICATE KEY UPDATE`语句。这个功能强大的语句结合了`INSERT`和`UPDATE`操作,允许你在...
ON DUPLICATE KEY UPDATE 语句是在 MySQL 中处理重复数据的常用方法。该语句在插入数据时,如果遇到唯一键冲突(即主键或有唯一索引的字段),则会执行更新操作。示例: INSERT INTO table_name (col1, col2, col3...
ON DUPLICATE KEY UPDATE` 和 `REPLACE INTO` 是MySQL中处理批量插入并更新已有数据的两种有效策略,它们提供了在保持数据完整性和性能之间平衡的解决方案。根据具体业务需求和数据约束,选择合适的方法来优化数据...
ON DUPLICATE KEY UPDATE` 是 MySQL 数据库中的一种高效操作,它结合了插入新记录和更新已有记录的功能。这个语句主要用于处理唯一性约束冲突,如 PRIMARY KEY 或 UNIQUE 索引的情况。当试图插入的记录与现有记录在...
MySQL中的`INSERT`语句是用于向数据库表中插入新数据的命令,它有多种变体,包括`DELAYED`, `IGNORE`, 和 `ON DUPLICATE KEY UPDATE`。这些选项提供了不同的处理策略,以适应不同场景的需求。 1. **DELAYED**: `...