[英]<packagename>.<class>@<randomnumbers&letters> returned when trying to return from array using java and MySQL
我有一個與 MySQL 連接的 Java 多類項目,我可以建立與這個 SQL 數據庫的連接,但是當我嘗試將它讀入一個數組時,它出現了無意義的信息而不是請求的信息。 我究竟做錯了什么?
public DVDCollection getDVDs(int sortOrder)
{
DVDCollection dvdcollection = new DVDCollection();
Connection conn = getConnection();
if (conn != null)
{
String sql;
if (sortOrder==1)
{
sql = "SELECT * FROM dvds ORDER BY title";
}
if (sortOrder==2)
{
sql = "SELECT * FROM dvds ORDER BY dvds.id";
}
else
{
sql = "SELECT * FROM dvds ORDER BY dvds.year";
}
try
{
//PreparedStatement ps1 = conn.prepareStatement(sql);
ResultSet rs1 = conn.prepareStatement(sql).executeQuery();
while (rs1.next()) //get each row from the resultset
{ //create an DVD object to add to ArrayList
dvdcollection.addDVD(new DVD(rs1.getInt("id"), rs1.getString("title"), rs1.getInt("year"), rs1.getBoolean("favourite")));
}
rs1.close();
//ps1.close();
closeConnection(conn);
return dvdcollection;
}
catch (SQLException ex)
{
System.out.println(ex);
return dvdcollection;
}
finally
{
closeConnection(conn);
}
}
else
{
return dvdcollection;
}
}
它在 sql 定義下出現了一條波浪線,表示它們從未被讀取過,但我無法弄清楚為什么會這樣! 它構建良好,可以看到數據庫中有行,但它返回:
GUI 顯示“java2assignment3.DVD@5e0010bc”和“java2assignment3.DVD@1168d798”的圖像:
當我點擊對象時,一串數字和字母會刷新,而且我無法運行我的“添加 DVD”、“編輯 DVD”和“刪除 DVD”功能,因為后兩者需要能夠選擇一個對象,並且“添加 DVD”返回“應用程序錯誤,未添加 DVD,請聯系 IT 管理部門”我的錯誤文本,只有在滿足其他條件時才會發生:
DVD dvd = service.addDVD(newDVD);
if (dvd != null)
{
txtResults.setText(txtTitle.getText() + " sucessfully added");
parent.loadData();
}
else
{
txtResults.setText("Application error, DVD not added, please contact IT Administration");
}
感謝任何人可以提供的任何幫助。 我希望一旦我解決了第一個實例中發生的問題,那么第二個問題將自行解決或相關聯,但我會喜歡任何一個方面的建議。
您用來從數據庫中獲取 dvd 列表的代碼很好,但您需要查看您的 dvd 對象以及它是如何呈現的。
從帶有 GUI 是什么問題的圖片中不清楚,但 dvd 的顯示方式與 java 的默認toString()
方法相對應。
因此,解決此問題的一種方法是覆蓋 dvd 類上的toString()
方法:
class DVD {
// the usual stuff, getters, setters, member variables
@Override
public String toString() {
return id + " " + title;
}
}
另一種是編寫一個方法將其呈現在列表中。 例如,如果您的 GUI 列表可以直接使用String
對象而不是 dvds,則您可以在某處使用類似的方法:
static stringForList(DVD dvd) {
return dvd.getId() + " " + dvd.getTitle();
}
使用您擁有的任何字段或 getter/setter。
然后,當您填充列表時,不要添加 DVD 對象,而是將它們包裝起來:
yourList.add(stringForList(dvd))
用yourList
聲明它需要String
s。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.