java - .@尝试使用 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");
}
任何人都可以为此提供任何帮助,我们将不胜感激。我希望一旦我解决了第一个实例中发生的事情,那么第二个问题将自行解决或相关,但我会喜欢任何一个方面的建议。
解决方案
您用于从数据库中获取 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
声明使得它需要String
s。
推荐阅读
- algorithm - 青蛙和蟾蜍
- python - FFT频谱中的0是白色的?,为什么?- OpenCV
- vb.net - 将数据 varchar(分数)转换为十进制
- spring-boot - Spring-Boot 2 AspectJ 加载时间编织
- c++ - 在 C++ 中实现一个通用的构建器模式
- python - 如何避免数据库中的记录重复?
- r - R Studio 折叠不保存
- python - m4 皮质处理速度与桌面处理器的粗略估计
- putty - MSP430,无法使用 UART no Output with Putty
- elasticsearch - CQRS 为什么不只为读写提供弹性搜索?