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中生成?
謝謝反應,我使用sqljdbc,現在無法再次重現此錯誤。之前我們還沒有使用'e.printStackTrace()'這是它的方式很難追蹤原因產生這種錯誤。 – HybrisFreelance
我猜想獲取微軟驅動程序的源代碼可能不是一個選項,所以如果你再次獲得堆棧跟蹤,唯一的選擇就是聯繫微軟支持。在異常處理方面,因爲您還捕獲了'RuntimeException'子類,所以'catch(Exception)'通常是個壞主意,在這種情況下,它會導致您丟失重要信息。另外,你的'TableObjectException'類有望支持鏈接,但是你在示例代碼中也沒有使用這個特性。鏈接是另一個重要的工具,可以防止丟失堆棧跟蹤。 – ngreen