用mybatis往oracle批量插入数据报错java.lang.StackOverflowError

尝试向Oracle数据库批量插入10000条数据时遇到java.lang.StackOverflowError异常。该问题源于MyBatis XML配置文件中的SQL语句,在解析过程中因递归调用过深触发堆栈溢出错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

往oracle中批量插入10000条数据,报错如下

java.lang.StackOverflowError

at java.util.HashMap.hash(HashMap.java:362)
at java.util.HashMap.getEntry(HashMap.java:462)
at java.util.HashMap.get(HashMap.java:417)
at com.alibaba.druid.sql.parser.Keywords.getKeyword(Keywords.java:151)
at com.alibaba.druid.sql.parser.Lexer.scanIdentifier(Lexer.java:847)
at com.alibaba.druid.sql.parser.Lexer.nextToken(Lexer.java:296)
at com.alibaba.druid.sql.parser.SQLExprParser.primary(SQLExprParser.java:215)
at com.alibaba.druid.sql.dialect.oracle.parser.OracleExprParser.primary(OracleExprParser.java:485)
at com.alibaba.druid.sql.parser.SQLExprParser.expr(SQLExprParser.java:119)
at com.alibaba.druid.sql.dialect.oracle.parser.OracleSelectParser.parseTableSourceQueryTableExpr(OracleSelectParser.java:745)
at com.alibaba.druid.sql.dialect.oracle.parser.OracleSelectParser.parseTableSource(OracleSelectParser.java:737)
at com.alibaba.druid.sql.parser.SQLSelectParser.parseFrom(SQLSelectParser.java:316)
at com.alibaba.druid.sql.dialect.oracle.parser.OracleSelectParser.query(OracleSelectParser.java:272)
at com.alibaba.druid.sql.dialect.oracle.parser.OracleSelectParser.queryRest(OracleSelectParser.java:300)
at com.alibaba.druid.sql.dialect.oracle.parser.OracleSelectParser.query(OracleSelectParser.java:282)
at com.alibaba.druid.sql.dialect.oracle.parser.OracleSelectParser.queryRest(OracleSelectParser.java:300)
at com.alibaba.druid.sql.dialect.oracle.parser.OracleSelectParser.query(OracleSelectParser.java:282)
at com.alibaba.druid.sql.dialect.oracle.parser.OracleSelectParser.queryRest(OracleSelectParser.java:300)
at com.alibaba.druid.sql.dialect.oracle.parser.OracleSelectParser.query(OracleSelectParser.java:282)
at com.alibaba.druid.sql.dialect.oracle.parser.OracleSelectParser.queryRest(OracleSelectParser.java:300)
at com.alibaba.druid.sql.dialect.oracle.parser.OracleSelectParser.query(OracleSelectParser.java:282)
at com.alibaba.druid.sql.dialect.oracle.parser.OracleSelectParser.queryRest(OracleSelectParser.java:300)
at com.alibaba.druid.sql.dialect.oracle.parser.OracleSelectParser.query(OracleSelectParser.java:282)
at com.alibaba.druid.sql.dialect.oracle.parser.OracleSelectParser.queryRest(OracleSelectParser.java:300)
at com.alibaba.druid.sql.dialect.oracle.parser.OracleSelectParser.query(OracleSelectParser.java:282)
at com.alibaba.druid.sql.dialect.oracle.parser.OracleSelectParser.queryRest(OracleSelectParser.java:300)
at com.alibaba.druid.sql.dialect.oracle.parser.OracleSelectParser.query(OracleSelectParser.java:282)
at com.alibaba.druid.sql.dialect.oracle.parser.OracleSelectParser.queryRest(OracleSelectParser.java:300)
at com.alibaba.druid.sql.dialect.oracle.parser.OracleSelectParser.query(OracleSelectParser.java:282)
at com.alibaba.druid.sql.dialect.oracle.parser.OracleSelectParser.queryRest(OracleSelectParser.java:300)
at com.alibaba.druid.sql.dialect.oracle.parser.OracleSelectParser.query(OracleSelectParser.java:282)
at com.alibaba.druid.sql.dialect.oracle.parser.OracleSelectParser.queryRest(OracleSelectParser.java:300)
at com.alibaba.druid.sql.dialect.oracle.parser.OracleSelectParser.query(OracleSelectParser.java:282)

at com.alibaba.druid.sql.dialect.oracle.parser.OracleSelectParser.queryRest(OracleSelectParser.java:300)



mybatis xml中的sql如下:


当往oracle数据库插入10000条数据时,报以上错误,后查询阿里druid源码发现query()方法递归调用,调用层级过多,导致java.lang.StackOverflowError 。

阿里Druid源码如下:

com.alibaba.druid.sql.dialect.oracle.parser.OracleSelectParser类中的方法



评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值