2012-04-19 40 views
0

的問題也許有人可以幫助我。我正在使用數據訪問對象。 我有一個數據庫: 表Receiverz與DAO和單身人士一起工作,代碼

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是impleme NTS道,並在它創建了一個單身(我ASLO建立與數據庫的連接,但我會跳過這一部分),並使它能夠用數據庫的工作推翻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)); 

我得到的是:

[email protected] 

,但我得

2 Target 

(因爲我在參數中傳遞了2,它指向我的數據庫中的Target。 沒有人知道什麼是錯的,我應該改變我的代碼。附:我希望我說得很清楚。

回答

2

ex.getReceiverz(2)返回一個Receiverz對象。因此,System.out.println(ex.getReceiverz(2));正在使用從java.lang.Object繼承的toString()方法。在Receiverz類中創建一個toString()方法,該方法將以您想要的方式輸出它。

+0

如果我的理解正確,你真正需要做的是改變你的SQL查詢。 ''SELECT * FROM receiverz''將檢索表中的所有記錄,所以while循環將通過每條記錄,並且表中最後一個是被設置的。只要改變查詢'「SELECT * FROM receiverz其中num =?」'然後用[PreparedStatement的(http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html)執行查詢。那麼只有一個結果是正確的。 – dnc253 2012-04-19 22:18:48

0

一個的getName添加到您的recieverz並改變這個ex.getReceiverz(2).getName()