我正在尝试将我的数据库显示在java中的文本区域中。下面的代码可以显示" org.apache.derby.client.net.NetResultSet42@1b5f7aa"而不是数据。任何想法为什么?以及我如何纠正这个
我的代码
public static String listAll() {
String output = listHeader();
try {
ResultSet res = stmt.executeQuery("SELECT * from STUDENT.MESSAGES");
while (res.next()) { // there is a result
//output += formatListEntry(res);
output += res;
output +=System.lineSeparator();
}
} catch (Exception e) {
System.out.println(e);
return null;
}
return output;
}
答案 0 :(得分:3)
ResultSet
没有实现toString
方法,因此您所看到的是Object#toString
中定义的默认实现。
您应该使用ResultSet
方法从ResultSet#getXyz
获取数据:
ResultSet res = stmt.executeQuery("SELECT * from STUDENT.MESSAGES");
while (res.next()) { // there is a result
//output += formatListEntry(res);
output += res.getString("column1");
output += " ";
output += res.getString("column2");
output +=System.lineSeparator();
}
一些建议:
"*"
。将其用于仅用于测试目的。ResultSet
读取数据时,最好使用列的名称而不是预期的索引。这是为了防止其他人改变表并在其中间添加一列,并且它还有助于代码的可读性和可调试性。List<YourObject>
而不是巨型字符串。答案 1 :(得分:0)
这就是原因:output += res;
res是org.apache.derby.client.net.NetResultSet
,该类不会覆盖toString()
。
答案 2 :(得分:0)
res.toString()
将返回org.apache.derby.client.net.NetResultSet42@1b5f7aa
你必须改变:
output += res;
到
output = res.getString(0);
查看第一个值并以相同的样式添加所有其他值。