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);}
然后我创建了一个ExpensesDao类,它实现了Dao并在其中创建了一个单例(我也设置了与数据库的连接,但我将跳过该部分)并通过使得可以使用数据库来覆盖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,它在我的数据库中引用了Target。 有谁知道我的代码中出了什么问题以及我应该改变什么。附:我希望我说得够清楚。
答案 0 :(得分:2)
ex.getReceiverz(2)
正在返回Receiverz
个对象。因此,System.out.println(ex.getReceiverz(2));
正在使用从toString()
继承的java.lang.Object
方法。在toString()
类中创建一个Receiverz
方法,该方法将按您希望的方式输出它。
答案 1 :(得分:0)
将getName添加到recieverz并更改为此ex.getReceiverz(2).getName()
答案 2 :(得分:0)
有点offtopic,但我建议使用double checked locking singleton代码来避免初始化中的所有并发问题。
Ps.:ex.getReceiverz(2).getName()中断Law of Demeter,最好避免它。