2015-02-11 192 views
1

我想显示我的数据库到Java中的文本区域。下面的代码工作,但它显示“[email protected]”而不是数据。任何想法为什么?以及如何我可以纠正这种这是为什么返回“[email protected]”

我的代码

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

这就是为什么:output += res;

资源是org.apache.derby.client.net.NetResultSet和类没有重载toString()

+0

您好,谢谢您的帮助。现在它可以工作,但显示的数据完全不正确?它没有任何意义。 – 2015-02-11 15:40:27

0

res.toString()将返回[email protected]

你必须改变:

output += res; 

output = res.getString(0); 

看到的第一个值,并添加所有其他在同一风格。

3

ResultSet没有实现toString方法,所以你看到的是在Object#toString中定义的默认实现。

你应该,而是使用ResultSet#getXyz方法获得来自ResultSet数据:

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>而不是一个巨大的String。
+0

或者你可以使用res.getString(1)作为第一列等等,或许用for循环 – 2015-02-11 15:25:12

+0

@ JackTools.Net阅读这些建议。最好使用“columnName”而不是索引,这是由于查询中的变化,特别是当有人在其中间添加一列时。 – 2015-02-11 15:26:07

+0

取决于你想要做什么。 – 2015-02-11 15:30:08

相关问题