java ResultSetMetaData是否为空?
我正在使用SQLServer2005
这是密码
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)和ResultSetMetaData(rsm)从不为null。所以我是从哪里得到这个错误的。为了安全起见,我们已经有了checkrs == null
check
我无法重现同样的错误。但仍然对根本原因感兴趣。是因为空ResultSetMetaData吗
# 1 楼答案
本例中的
NullPointerException
只能由JDBC驱动程序中的错误引起。根据documentation,对getMetaData()
的调用只应抛出一个SQLException
。如果您将调用的输出发布到e.printStackTrace()
,这将非常有帮助,因为在这样的论坛上调试NPE
几乎不可能,如果没有它的话。如果您提供了有关正在使用的驱动程序的信息,也会很有帮助