2014-03-25 229 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的信息。