2014-03-25 153 views
0

按鈕的DTO和DAO實現

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt){           

    String login, password; 

    login = jTextField1.getText().trim(); 
    password = jTextField2.getText().trim(); 

    System.out.println("hello"); 
    RegisterDAO r = new RegisterDAO(); 
    r.insert(login, password); 


} 

代碼爲DAO類的Click事件代碼

public class RegisterDAO { 

private String login, password; 

public void insert(String login ,String password) 
{ 
    this.login= login; 
    this.password = password; 

    RegisterDTO r = new RegisterDTO(); 
    r.setLogin(login); 
    r.setPass(password); 

java.sql.Connection con = new DBConnection().getConnection(); 
    if (con!=null){ 
    System.out.println("the connection object is active "); 

    PreparedStatement pst; 
    String Q; 
    int x=1; 

    Q="insert into x(a,b) values(?,?)"; 
    try { 
    pst=con.prepareStatement(Q); 
    pst.setString(x++, login); 
    pst.setString(x++,password); 

    int a=pst.executeUpdate(); 
    System.out.println(a); 

    } 
    catch (Exception ex) 
    { 
     ex.printStackTrace(); 
    } 
//JOptionPane.showMessageDialog(null, s, s, x, null); 
}     

我的DTO類

public class RegisterDTO { 
private String a; 
private String b; 
public void setLogin(String a) 
{ 
    this.a = a ; 
    System.out.println(a); 
} 
public String getLogin() 
{ 
    return a; 
} 
public void setPass(String b) 
{ 
    this.b = b; 
    System.out.println(b); 

} 
public String getPass() 
{ 
    return b; 
}  

1)我的問題是,我無法保留setter和getter方法存儲在dto類中的值。使用dto獲取價值的方法有哪些? 我也想訪問其他頁面上的值,但我無法獲得該值dto類中的打印語句顯示該值存儲在變量 我創建的應用程序基於swing並且我不知道那是擺動支持會議管理,如果它支持會議而不是幫助我實現這一點。

2)我想知道,我在DAO的情況下,我下面和DTO是正確的還是不計算策略

3)我想知道,訪問DTO到每一個網頁我是否需要創建dto的對象來訪問它,如果是這種情況,是否會導致多對象創建時的不明確性

4)我可以直接訪問存儲在dto通過getter方法(沒有數據庫訪問)。我已經創建了RET()方法檢索在我的DAO類從數據庫中的數據

public void ret(String login ) 
{ 
    login= this.login ; 

     java.sql.Connection con = new DBConnection().getConnection(); 
    if (con!=null){ 
    System.out.println("the connection object is active "); 

    PreparedStatement pst; 
    String Q; 
    int x=1; 

    Q="select * form x where a=?"; 
    try { 
    pst=con.prepareStatement(Q); 
     pst.setString(x++, login); 


     ResultSet rs= null;  
     rs = pst.executeUpdate(); 


} 

上述代碼結果中的誤差,該結果集是不能夠處理出的executeUpdate的整數( ) 方法 。我是否需要爲此目的進行投射,因爲我無法弄清楚整數值如何投射到結果集中。我也想知道如何訪問單個字段作爲結果集顯示整個元組。結果集是如何能夠將值存儲到的getter方法的各個領域

+0

*「上述代碼導致錯誤,結果集無法處理executeUpdate()方法中的整數」*這是因爲[executeUpdate()](http://docs.oracle.com /javase/7/docs/api/java/sql/Statement.html#executeUpdate%28java.lang.String%29)不會返回ResultSet,而是返回一個整數(請參閱API)。我認爲你的意思是[executeQuery()](http://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html#executeQuery%28java.lang.String%29),它返回一個結果集按預期。 – dic19

回答

2

1)我的問題是,我沒能留住這是 由二傳手存儲在DTO類的價值觀和getter方法。 是使用dto獲取值的方法。我也想訪問其他頁面上的 值,但我無法獲得該值dto類中的打印語句顯示值存儲在 變量中,我創建的應用程序基於swing而且我不知道是否支持會話管理,如果它支持會話比幫我執行那個。

DTO類不是持久性的,它與DTO之間似乎沒有鏈接。由於它不會持久化任何內容,因此除非通過DAO類來存儲/檢索值,否則無法將其重新加載到DTO類中。

2)我想知道,我在 的情況下我跟隨計算策略的DAO和DTO是正確的還是不

我不這麼認爲。 DAO是一個數據訪問對象,在您的示例中這是正確的,因爲它產生了執行基本CRUD操作的功能。另一方面,我很確定你的DTO的實現是不正確的。 DTO(就內存服務而言)代表數據傳輸對象。簡而言之,它應該表示特定對象在數據庫中具有的字段的子集,以便您可以使用更輕量級的對象來表示數據庫實體。例如,User對象在數據庫中可以有字段,如PKUIDDateCreatedDateModifiedNamePassword_Hash等你UserDTO將有更少的領域,如UIDName。 DAO層通常會產生DTO對象。

3)我想知道,訪問DTO到每一個網頁做 我需要創建DTO的對象訪問,如果是這樣的 情況下,它會導致歧義作爲創建的多個對象

是的,你將不得不。另一種方法是使用Singleton數據模式在所有類中共享和重用相同的DAO實例。

4)我可以能夠直接訪問由吸氣劑的方法存儲在DTO (沒有數據的基礎上訪問的值)。我已經創建了 RET()方法檢索從數據庫中的數據在我的DAO類

在這種情況下DTO類是多餘或誤導。我建議你刪除它。

至於你的最後一個問題,我建議你看看this Oracle教程,以獲得更多關於如何使用JDBC的信息。