NutzCN Logo
问答 使用druid和nutzdao结合,调用CallableStatement.execute 异常
发布于 478天前 作者 thineagle 463 次浏览 复制 上一个帖子 下一个帖子
标签:

使用nutzdao和druid结合做数据操作时最近遇到一个怪问题,代码片段如下

        Trans.begin();
        Connection conn = Trans.getConnectionAuto(dao.getDataSource());
        CallableStatement cs = conn.prepareCall("?=call function(?,?)", ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
        cs.registerOutParameter(1, java.sql.Types.INTEGER);
        for (int i = 0; i < params.length; i++)
            cs.setObject(i + 2, params[i]);
        cs.execute();

偶尔会出现 java.lang.ArrayIndexOutOfBoundsException: null 这个异常 ,堆栈如下

java.lang.ArrayIndexOutOfBoundsException: null
	at java.util.ArrayList.add(ArrayList.java:474) ~[?:1.8.0]
	at com.alibaba.druid.pool.DruidPooledConnection.transactionRecord(DruidPooledConnection.java:730) ~[druid-1.1.20.jar:1.1.20]
	at com.alibaba.druid.pool.DruidPooledStatement.transactionRecord(DruidPooledStatement.java:285) ~[druid-1.1.20.jar:1.1.20]
	at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:491) ~[druid-1.1.20.jar:1.1.20]

能是哪的问题呢, 现象还不能重现。

4 回复

看这sql,params应该是固定长度的数组,然后你传的数组太长

哦, 代码没写全,params是传入的参数,长度是二维数组, 应该没问题,跟踪了下druid的代码发现是 transactionRecord内部的一个list登记执行sql的时候,执行list.add的时候报错的

长度是二维数组? 啥???

Object[] params = new Object[]{"1","2"}; 类似于这样。
看druid的源码transactionRecord 只记录了10个sql, 并且是每个连接不同的,使用的还是ArryaList, 如果连接不同的话不应该有ArrayIndexOutOfBoundsException:null 这种错误。

添加回复
请先登陆
回到顶部