2013-07-02 54 views
0

我有一個Access數據庫,我需要檢索除第一個和最後一個之外的所有字段並將其顯示在JTable中。當我創建Object [] []時,一切正常,但當我返回時,我得到一個NullPointerException。我試圖通過打印整個對象來找到數據庫中可能存在空值的位置,但工作正常且沒有值爲空。爲什麼會返回Object [] []給我一個NullPointerException,我該如何解決它?返回一個對象[] []給出空指針異常

堆棧跟蹤是: 異常在線程「AWT-EventQueue的-0」顯示java.lang.NullPointerException

public Object [] [] SetTrainingLogTable() throws SQLException 
    { 

    DatabaseConnection connection = new DatabaseConnection(); 

    //Retrieves all the data from the TrainingLog table 
    ResultSet resultset = connection.SelectStatements("SELECT * FROM TrainingLog"); 

    //Retrieves the number of entries 
    ResultSet numberofworkouts = connection.SelectStatements("SELECT COUNT(*) FROM TrainingLog"); 

    int count = numberofworkouts.getInt(1); 
    number = count; 

    String[][] table = new String [count] [6]; 

    //Number to incriment for while loops 
    int row = 0; 

    String date = ""; 

    while(row<count) 
    { 
     date = resultset.getString(2); 
     table [row][0] = calculate.RefineDate(date); 
     table [row][1] = resultset.getString(3); 
     table [row][2] = resultset.getString(4); 
     table [row][3] = resultset.getString(5); 
     table [row][4] = resultset.getString(6); 
     table [row][5] = resultset.getString(7); 
     resultset.next(); 
     row++; 
    } 

    Object[][] data = table; 

    connection.close(); 

    return data; 
} 

我跑了一個調試器,它只是給出了當返回線運行錯誤。

+0

寫入的return語句不能生成NullPointerException。你能發佈完整的堆棧跟蹤並指出它們對應的行嗎? – davmac

回答

0

最好是發佈堆棧跟蹤,並告訴哪一行發生錯誤。然而,寫這樣的代碼的典型方式是:

Connection con = ...; 
Statement st = ...; 
ResultSet rs = ...; 
while (rs.next()) { 
    // ... 
} 

的結果集開出第一行前指着rs.next()返回是否有下一行,如果存在,則前進到該行。你能用這種風格重寫嗎?

其他建議:

  1. 您可以創建一個實際的對象類型,而不是使用Object[]存儲從各行的數據?叫它Workout
  2. 您可以使用List<Workout>而不是Object[][]嗎?
  3. 日期是否作爲SQL DATE或TIMESTAMP存儲在數據庫中?然後,不要將其轉換爲Java String:使用java.sql.Datejava.util.Date。在工作中,我有一個很大的舊程序,它使用字符串作爲日期,並使用不同的格式在不同的時間轉換值。這是非常悲慘的。
  4. 請勿使用SELECT *。給列的名稱返回。使用語法。
  5. 不需要爲返回的表設置一個變量,並立即爲其設置另一個變量。
  6. 關閉連接或語句應該在finally塊中完成,或通過try-with-resources完成。