<packagename>.<class>@<randomnumbers&letters> return 在尝试使用 java 和 MySQL 从数组 return 时编辑

<packagename>.<class>@<randomnumbers&letters> returned when trying to return from array using java and MySQL

我在 Java 中有一个与 MySQL 连接的多 class 项目,我可以与这个 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 定义下出现了一条波浪线,表示它们从未被阅读过,但我就是不明白为什么会这样!它构建良好并且可以看到数据库中有行但是它 returns this:

显示“java2assignment3.DVD@5e0010bc”和“java2assignment3.DVD@1168d798”的 GUI 图像:

当我点击对象时,数字和字母串会刷新,而且我无法 运行 我的“添加 DVD”、“编辑 DVD”和“删除 DVD”功能因为后两者需要能够 select 一个对象,而“添加 DVD” returns “应用程序错误,未添加 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 class:

上的 toString() 方法
class DVD {
    // the usual stuff, getters, setters, member variables
    @Override
    public String toString() {
        return id + " " + title;
    }
}

另一种是写一个方法在列表中渲染它。例如,如果您的 GUI 列表可以直接获取 String 个对象而不是 dvd,您可以在某处使用如下方法:

static stringForList(DVD dvd) {
    return dvd.getId() + " " + dvd.getTitle();
}

使用您拥有的任何字段或 getter/setter。

然后当您填充列表时,不要添加 DVD 对象,而是包装它们:

yourList.add(stringForList(dvd))

yourList 声明需要 String 秒。