首页 > 解决方案 > .@尝试使用 java 和 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 定义下出现了一条波浪线,说它们从未被阅读过,但我就是不知道为什么会这样!它构建良好,可以看到数据库中有行,但它返回:

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

在此处输入图像描述

当我单击对象时,数字和字母字符串会刷新,而且我无法运行“添加 DVD”、“编辑 DVD”和“删除 DVD”功能,因为后两者需要能够选择一个对象,并且“添加 DVD”返回“应用程序错误,未添加 DVD,请联系 IT 管理”我的错误文本只有在满足此 else 条件时才会发生:

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");                        
}

任何人都可以为此提供任何帮助,我们将不胜感激。我希望一旦我解决了第一个实例中发生的事情,那么第二个问题将自行解决或相关,但我会喜欢任何一个方面的建议。

标签: javamysqlsqlnetbeans

解决方案


您用于从数据库中获取 dvd 列表的代码很好,但您需要查看您的 dvd 对象以及它是如何呈现的。

从发布的图像中不清楚 GUI 是什么,但 dvd 的显示方式与 java 的默认toString()方法相对应。

因此,解决此问题的一种方法是覆盖toString()dvd 类上的方法:

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();
}

使用您拥有的任何字段或获取器/设置器。

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

yourList.add(stringForList(dvd))

withyourList声明使得它需要Strings。


推荐阅读