此问题在此处已有答案:
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");
}
我希望一旦我解决了第一个问题,那么第二个问题就会自行解决,或者与之相关,但是我希望在这两个问题上都有建议。
1条答案
按热度按时间ojsjcaue1#
用于从数据库中获取dvd列表的代码是正确的,但是需要查看dvd对象以及它是如何呈现的。
从贴出的问题GUI是什么的图片中还不清楚,但是dvd的显示方式与java的默认
toString()
方法相对应。因此,解决此问题的一种方法是覆盖dvd类上的
toString()
方法:另一种方法是写一个方法来呈现列表中的对象。例如,如果你的GUI列表可以直接接受
String
对象而不是dvd,那么你可以有一个类似于以下的方法:使用您拥有的任何字段或getter/setter。
然后,在填充列表时,不要添加DVD对象,而是将其换行:
其中
yourList
被声明为使得它占用String
s。