getColumnCount在值为null时不计算列?

时间:2011-08-08 15:06:04

标签: java sql json null

我有这段代码:

// Get the results
while(rs.next())
{
    resultList = new JSONObject();
    for(int i = 1; i <= rsmd.getColumnCount(); i++)
    {
        resultList.put(rsmd.getColumnName(i) , rs.getString(i));
    }
}

似乎rsmd.getColumnCount()不计算相应值为null的列。有没有解决方法呢?

根据一天中的时间,相同的SQL返回值和/或空值,我希望每次都能获得相同的列数。

干杯, 添


这当然是JAVA - 我使用了“Null”标记因为getColumnCount标记被拒绝了,因为我在这个网站上缺少“声望点”。

我认为getColumnCount不计算空条目,因为我的数据库中有2个条目,一个条目有一些空条目,另一条条目没有空条目。

getColumnCount仅返回具有实际值的条目的计数。

3 个答案:

答案 0 :(得分:2)

问题解决了:问题不是getColumnCount(),而是

   resultList.put(rsmd.getColumnName(i) , rs.getString(i));

rs.getString(i)返回null时,Put方法未添加任何内容。 导致我误入歧途的是这些值的打印确实显示null

答案 1 :(得分:1)

您是否尝试在查询中添加一些标记?如果它为null然后放一些东西,你可以在你的代码中捕获这些。

答案 2 :(得分:0)

我有类似的问题,但它与null无关,我只是从getColumnCount()得到一个完全错误的答案。我的解决方法使用单独的ResultSet,因此:

// Get the results
DatabaseMetaData metadata = null;
ResultSet rs = null;

int columnCount = 0;
try {
     metadata = connection.getMetaData();
     rs = metadata.getColumns(null, "YOURSCHEMA", "YOURTABLE", null);
     while (column.next()) {
          columnCount++;
     }
} catch (Exception e) {
     e.printStackTrace();
}

/* note here you must re-fill your rs or create a new one since it cannot be reset
 with a call to rs.first() as it is a forward-only collection, with something like */

// rs = statement.executeQuery("SELECT * FROM yourschema.yourtable");

while(rs.next())
{
    resultList = new JSONObject();
    for(int i = 1; i <= rsmd.getColumnCount(); i++)
    {
        resultList.put(rsmd.getColumnName(i) , rs.getString(i));
    }
}