2013-01-31 44 views
0

我正在爲Informix使用JDBC驅動程序。我連接到我的主機很好,但是當執行查詢時,我的select中指定的字段之一返回空值。而不是僅僅檢索該值,並拋出SQLException:在遇到NULL值時使用JDBC驅動程序進行Informix + SQLException

查詢中的任何表中找不到列(colname)(或SLV未定義)。

我使用的驅動程序是這樣的:

try{ 
    PreparedStatement pstmtDist = conn.prepareStatement(query2); 

    ResultSet rsDist = pstmtDist.executeQuery(); 

    while(rsDist.next()){ 
      int distCaseId = 0; 
      String distCaseIdStr = new String(); 

      int distCaseDefNum = 0; 
      String distCaseDefNumStr = new String(); 

      distCaseIdStr = rsDist.getObject("colname").toString(); 
      distCaseId = Integer.parseInt(distCaseIdStr.trim()); 

      distCaseDefNumStr = rsDist.getObject("colname2").toString(); 
      distCaseDefNum = Integer.parseInt(distCaseDefNumStr.trim()); 

      //System.out.println(String.format("distCaseId == %d distCaseDefNum == %d\n",distCaseId,distCaseDefNum)); 

    }// end while district cases 

    rsDist.close(); 
    pstmtDist.close(); 
    connDist.close(); 

    } 
    catch (SQLException e){ 
      System.out.println("EXCEPTION: "+e.getMessage()); 


    } 

任何提示的歡迎!

-TU

+2

你的問題是無法回答的。您尚未顯示錶架構,或者您正在嘗試準備和執行的查詢。您引用的錯誤消息與空值無關;它說查詢引用了一個不存在的列。這意味着查詢存在問題;在語法上,它是有效的,但在語義上,它不是。要解決這個問題,你必須顯示SQL和表格模式。 –

+0

@JonathanLeffler:你的觀察是正確的,錯誤信息並不指向空值的問題。這是令人困惑的部分。但是,如果遇到空值,則會拋出異常。我希望以前有人遇到過這種情況。 我是公務員,我不認爲我應該發佈詳細的數據庫信息。我的查詢中的列是在架構中創建的。我可以使用dbaccess對數據庫運行查詢,並檢索行,但是一列的值爲空 - colname2。當我從查詢中刪除它並重新運行程序時,不會引發異常。 -TU –

+0

您可以使用像CREATE TABLE x(y INTEGER,z INTEGER)這樣的兩列表來複制它嗎? INSERT INTO x(y,z)VALUES(0,0); INSERT INTO x(y,z)VALUES(1,NULL);'並顯示生成異常的Java? –

回答

0

我認爲問題出在線路:

distCaseDefNumStr = rsDist.getObject("colname2").toString(); 

,並用類似的思路,其中getObject()可以返回null

如果您colname2null值,那麼getObject()回報null和那麼Java試圖在null對象運行toString()方法。

是的,關於未在結果中找到的列的消息很奇怪,但我認爲您真的可以觀察到空指針異常。使用getString()getInt()方法ResultSet