簡體   English   中英

JDBC Oracle結果集空指針異常

[英]JDBC Oracle Result set Null Pointer Exception

我有一個連接到oracle數據庫的多線程程序。

第一個線程執行“大”查詢,並將對象加載到LinkedBlockingQueue中。 大約有200,000個對象。

第二個線程輪詢此列表,並針對每個對象運行其他14個查詢,從而更新對象參數。 然后,我最后一次連接到另一個數據庫,獲取該當前對象的對應對象,創建一個包含這兩個對象的混合對象,並將其發送到第三個線程。

我對這14個查詢中的每一個使用單個語句和多個結果集。

    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);

一段時間后,我得到了空指針異常。

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)

仔細檢查您的sql查詢字符串,看來您是將查詢連接起來但缺少一些空間。

例如;

String sql="select"+MYCOULUM+" form MYTABLE"

將產生以下字符串

selectMYCOULUM form MYTABLE

和執行這樣的查詢將導致此錯誤的Oracle jdbc驅動程序

javadoc說-默認情況下,每個Statement對象只能同時打開一個ResultSet對象。 因此,如果一個ResultSet對象的讀取與另一個對象的讀取是交錯的,則每個都必須由不同的Statement對象生成。 如果存在打開的語句,Statement接口中的所有執行方法都會隱式關閉該語句的當前ResultSet對象。

因此,可能需要在每次要查詢數據庫時嘗試創建一個新的Statement對象

就我而言,我使用大寫CALL而不是小寫call來調用存儲的proc。

例如, { ?= CALL proc_name(?) }給出了相同的錯誤。 一旦我更改為{ ?= call proc_name(?) }它就可以工作了

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM