为什么这会返回“org.apache.derby.client.net.NetResultSet42@1b5f7aa”

时间:2015-02-11 15:16:06

标签: java derby

我正在尝试将我的数据库显示在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;
}

3 个答案:

答案 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);

查看第一个值并以相同的样式添加所有其他值。