2015-02-11 191 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

相關問題