ResultSetMetaData是否为null?

时间:2013-12-12 07:10:07

标签: java sql-server-2005 nullpointerexception metadata resultset

我有以下方法.i使用SQL server 2005。

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 个答案:

答案 0 :(得分:1)

在这种情况下,NullPointerException只能由JDBC驱动程序中的错误引起。根据{{​​3}},SQLException的调用只能引发getMetaData()。如果您将调用的输出发布到e.printStackTrace()会很有帮助,因为在没有调用此类论坛的情况下调试NPE几乎是不可能的。如果您包含有关您正在使用的驱动程序的信息,也会有所帮助。