netbeans < packagename>尝试< class>使用java和MySQL从数组返回时返回. @〈randomnumbers&amp;letters>[重复]

cidc1ykv  于 2022-11-10  发布在  Java
关注(0)|答案(1)|浏览(101)

此问题在此处已有答案

How do I print my Java object without getting "SomeType@2f92e0f4"?(13个答案)
12个月前关闭。
我有一个用Java编写的多类项目,它与MySQL连接,我可以与这个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”的图形用户界面图像:

当我单击对象时,数字和字母字符串刷新,而且,我无法运行“添加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");                        
}

我希望一旦我解决了第一个问题,那么第二个问题就会自行解决,或者与之相关,但是我希望在这两个问题上都有建议。

ojsjcaue

ojsjcaue1#

用于从数据库中获取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对象而不是dvd,那么你可以有一个类似于以下的方法:

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

使用您拥有的任何字段或getter/setter。
然后,在填充列表时,不要添加DVD对象,而是将其换行:

yourList.add(stringForList(dvd))

其中yourList被声明为使得它占用String s。

相关问题