首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >JDBC Oracle结果集空指针异常

JDBC Oracle结果集空指针异常
EN

Stack Overflow用户
提问于 2014-09-10 02:30:51
回答 3查看 4.3K关注 0票数 0

我有一个连接到oracle数据库的多线程程序。

第一个线程执行“大”查询,并将对象加载到LinkedBlockingQueue中。大约有200,000个物体。

第二个线程轮询这个列表,对于每个对象,它运行14个其他查询,更新对象参数。然后,我最后一次连接到另一个数据库,为当前对象获取相应的对象,创建一个包含这两个对象的混合对象,并将其发送到第三个线程。

对于这14个查询中的每个查询,我都使用一条语句和多个结果集。

代码语言:javascript
代码运行次数:0
运行
复制
    stat=predefinedobject.getConnection().createStatement();  
    ResultSet rs = null;
    ResultSet rs1 = null;
    ResultSet rs2 = null;
    ResultSet rs3 = null;
          .
          .
    rs=stat.executeQuery(Query1);
    while(rs.next()) {
        object1.setParameter1(rs.getString(5));
    }
    SqlUtils.closeResultSet(rs);

    rs1=stat.executeQuery(Query2);
    while(rs1.next()) {
        object1.setParameter2(rs1.getString(5));
    }
    SqlUtils.closeResultSet(rs1);
           .
           .
           .
    SqlUtils.closeResultSet(rs14);
    SqlUtils.closeResultSet(stat);

过了一段时间后,我得到了空指针异常。

代码语言:javascript
代码运行次数:0
运行
复制
java.lang.NullPointerException
at oracle.jdbc.driver.T4C8Oall.getNumRows(T4C8Oall.java:876)
at oracle.jdbc.driver.T4CStatement.executeForDescribe(T4CStatement.java:825)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1049)
at oracle.jdbc.driver.T4CStatement.executeMaybeDescribe(T4CStatement.java:845)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1154)
at oracle.jdbc.driver.OracleStatement.executeQuery(OracleStatement.java:1313)
EN

回答 3

Stack Overflow用户

发布于 2014-09-10 06:13:24

仔细检查您的sql查询字符串,看起来您连接了查询,但其中缺少一些空格。

例如:

代码语言:javascript
代码运行次数:0
运行
复制
String sql="select"+MYCOULUM+" form MYTABLE"

将生成以下字符串

代码语言:javascript
代码运行次数:0
运行
复制
selectMYCOULUM form MYTABLE

执行此类查询将导致oracle jdbc驱动程序出现此错误。

票数 3
EN

Stack Overflow用户

发布于 2018-10-04 20:15:06

在我的例子中,我使用大写的proc而不是小写的call来调用存储的CALL

例如,{ ?= CALL proc_name(?) }给出了相同的错误。一旦我切换到{ ?= call proc_name(?) },它就可以工作了

票数 1
EN

Stack Overflow用户

发布于 2014-09-10 02:38:58

javadoc表示-默认情况下,每个语句对象只能同时打开一个ResultSet对象。因此,如果一个ResultSet对象的读取与另一个对象的读取交错,则每个对象必须由不同的Statement对象生成。语句接口中的所有执行方法都隐式关闭语句的当前ResultSet对象(如果存在打开的对象)。

因此,每次要查询数据库时,可能都会尝试创建一个新的Statement对象

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25751434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档