我有这段代码:
// 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仅返回具有实际值的条目的计数。
答案 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));
}
}