簡體   English   中英

<packagename> .<class> @<randomnumbers&letters> 嘗試使用 java 和 MySQL 從數組返回時返回

[英]<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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM