Java 使用DAO和singleton,代码问题

Java 使用DAO和singleton,代码问题,java,mysql,database,singleton,dao,Java,Mysql,Database,Singleton,Dao,也许有人能帮我。我正在处理数据访问对象。 我有一个数据库: 表Receiverz num name 1 Walmart 2 Target 3 McDonalds 我已为此表创建了一个类 public class Receiverz { private int num; private String name; public void setNum(int num) { this.num = num; } public void setName(Strin

也许有人能帮我。我正在处理数据访问对象。 我有一个数据库: 表Receiverz

num   name
 1    Walmart
 2    Target
 3    McDonalds
我已为此表创建了一个类

public class Receiverz {
private int num;
private String name;

public void setNum(int num) {
    this.num = num;
}

public void setName(String name) {
    this.name = name;
}
}

然后我创建了Dao接口并向其传递了一个方法:

public interface Dao {

Receiverz getReceiverz(int num);}
然后,我创建了一个实现Dao的类ExpensesDao,并在其中创建了一个单例(我还设置了与数据库的连接,但我将跳过该部分),并通过使其能够使用数据库来覆盖getReceivers(int num)方法:

public class ExpensesDao implements Dao {

private static Dao thisdao;
public static synchronized Dao getDao() {
    if (thisdao==null) {
        thisdao = new ExpensesDao();
    }
    return thisdao;
    }

@Override
public Receiverz getReceiverz(int num) {
    Receiverz receiver = new Receiverz();
    try {
        Statement stmt = myConnection.createStatement();
        ResultSet result = stmt.executeQuery("SELECT * FROM receiverz");
        while(result.next()){

            receiver.setNum(num);
            receiver.setName(result.getString(2));

            }

    }
        catch (SQLException e){
             System.out.println(e.getMessage());
         }
    return receiver;

}
当我尝试在主类中运行它时:

public class TryDatabase {

public static void main(String[] args) {
    Dao ex = ExpensesDao.getDao(); 
    System.out.println(ex.getReceiverz(2));
我得到的只是:

listexpenses.Receiverz@193499fd
但是我必须去

2 Target
(因为我在参数中传递了2,并且它引用了我数据库中的目标。
有人知道我的代码出了什么问题以及我应该修改什么吗。另外,我希望我已经说得够清楚了。

在Receiverz中添加一个getName,并更改为这个ex.getReceiverz(2.getName()

ex.getReceiverz(2)
返回一个
Receiverz
对象。因此
系统.out.println(ex.getReceiverz(2));
正在使用继承自
java.lang.Object
toString()
方法。在
Receiverz
类中创建一个
toString()
方法,以您想要的方式输出它。

有点离题,但我建议使用该代码以避免初始化过程中的所有并发问题


注:ex.getReceiverz(2).getName()中断,最好避免它。

如果我理解正确,您真正需要做的是更改SQL查询。
“从receiverz选择*
将从表中检索所有记录,因此while循环将遍历每一条记录,表中的最后一条记录是设置的记录。只需将查询更改为
“SELECT*from receiverz WHERE num=?”
然后使用a执行查询。然后将只有一个结果是正确的。