<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
秒。
我在 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
秒。