0

多分誰かが私を助けることができます。データアクセスオブジェクトを使用しています。私はデータベースを持っています:テーブル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を渡し、データベースのTargetを参照しているため、コードで何が問題になっているのか、何を変更する必要があるのか​​を誰かが知っていますか。PS十分に明確にしたことを願っています。

4

3 に答える 3

2

ex.getReceiverz(2)オブジェクトを返していReceiverzます。したがって、はから継承されSystem.out.println(ex.getReceiverz(2));たメソッドを使用しています。希望どおりに出力するメソッドをクラスに作成します。toString()java.lang.ObjecttoString()Receiverz

于 2012-04-19T20:55:21.943 に答える
0

getNameをrecieverzに追加し、このex.getReceiverz(2).getName()に変更します

于 2012-04-19T20:52:23.553 に答える
0

少しオフトピックですが、初期化におけるすべての同時実行の問題を回避するために、ダブルチェックロックシングルトンコードをお勧めします。

追伸:ex.getReceiverz(2).getName()はデメテルの法則に違反しますが、回避する方がよい場合があります。

于 2012-04-19T21:16:26.720 に答える