1

我有以下方法.I使用SQL服務器2005ResultSetMetaData是否爲空?

private TableObject getTableObject(ResultSet rs, boolean raw) throws TableObjectException 
    { 
     TableObject to = new TableObject();//In this class all variable is ArrayList type 
     if (rs == null) 
      return to; 
     try 
     { 
      ResultSetMetaData rsm = rs.getMetaData(); 
      int colCount = rsm.getColumnCount(); 
      for (int i = 1; i <= colCount; i++) 
      { 
       to.setColLabel(rsm.getColumnLabel(i)); 
       to.setColType(rsm.getColumnClassName(i)); 
      } 
      while (rs.next()) 
      { 
       for (int i = 0; i < colCount; i++) 
       { 
        if (raw) 
        { 
         switch (rsm.getColumnType(i + 1)) 
         { 
          case java.sql.Types.DATE: 
           to.addColumn(rs.getDate(i + 1)); 
           break; 
          case java.sql.Types.VARCHAR: 
           to.addColumn(rs.getString(i + 1)); 
           break; 
          case java.sql.Types.INTEGER: 
           to.addColumn(rs.getInt(i + 1)); 
           break; 
          case java.sql.Types.TIMESTAMP: 
           to.addColumn(rs.getTimestamp(i + 1)); 
           break; 
          case java.sql.Types.TIME: 
           to.addColumn(rs.getTime(i + 1)); 
           break; 
          default: 
           to.addColumn(rs.getString(i + 1)); 
           break; 
         } 
        } 
        else 
        { 
         to.addColumn(rs.getString(i + 1)); 
        } 
       } 
       to.addRow(); 
      } 
     } 
     catch (Exception e) 
     { 
// LINE NO : 289 
     throw new TableObjectException("Exception generated while creating TableObject from Resultset :" + e.getMessage()); 
     } 
     return to; 
    } 

} 

從以上的方法,其中(e.getMessage())錯誤消息是NULL我有以下錯誤。

com.os.exceptions.TableObjectException: Exception generated whicle creating TableObject from Resultset :null 
at com.os.db.DbManager.getTableObject(DbManager.java:289) 

現在按我所知,這錯誤是由於NPE和所有說'Resultset (rs) and ResultSetMetaData (rsm) never null'比後,我已經檢查(rs == null)條件。

所以在這裏我已經嘗試了許多的時間來重現此相同的錯誤,但沒有。

所以,球員有什麼情況下產生這樣的錯誤?它是否應該從null ResultSetMetaData rsm中生成?

回答

1

在這種情況下的NullPointerException只能通過JDBC驅動程序中的錯誤引起的。根據documentation,撥打getMetaData()時只能撥打SQLException。如果你發佈一個調用的輸出e.printStackTrace(),因爲它是調試的一個論壇的NPE像這樣沒有一個幾乎不可能這將是有益的。如果您包含有關您正在使用的驅動程序的信息,這也會很有幫助。

+0

謝謝反應,我使用sqljdbc,現在無法再次重現此錯誤。之前我們還沒有使用'e.printStackTrace()'這是它的方式很難追蹤原因產生這種錯誤。 – HybrisFreelance

+0

我猜想獲取微軟驅動程序的源代碼可能不是一個選項,所以如果你再次獲得堆棧跟蹤,唯一的選擇就是聯繫微軟支持。在異常處理方面,因爲您還捕獲了'RuntimeException'子類,所以'catch(Exception)'通常是個壞主意,在這種情況下,它會導致您丟失重要信息。另外,你的'TableObjectException'類有望支持鏈接,但是你在示例代碼中也沒有使用這個特性。鏈接是另一個重要的工具,可以防止丟失堆棧跟蹤。 – ngreen