Java数据访问类

时间:2014-03-15 15:05:35

标签: java oop jdbc

我对java很新,在我生命中的这一点上,在编程方面是一个最蠢的,所以这个问题可能有点傻但是这里有:我试图决定是否一个java我创建的应用程序应该紧密集成到数据库teir或更多的失去耦合。

比如说,我有一个我想要连接的数据库并从中获取一些数据我希望"做一些事情"使用该数据,例如在应用程序中显示它或将其用于其他目的。我应该做我的数据库连接并查询我的" main"我写的类的方法,或者我应该创建一个类来获取返回结果集的数据,然后我将使用它?

我假设后者,但它似乎也会产生一些复杂性,这对于使用起来会有点痛苦(或者至少考虑到我知道它会带来的痛苦)。例如,在下面的示例中,如果我在获取结果时遇到问题,我依靠DataAccessor类来记录问题。这就是woudl通常是如何完成的,或者我应该通过某种方式将错误消息人为地传递给返回值,或者我应该将错误消息传回给返回值,或者我应该使用&#34抛出"或者我应该使用完全不同的东西?最后,我想我认为我有一个数据访问层,可以选择"选择"和#34;插入"并且"更新"以便主类与断开连接的数据集协同工作,DataAccessor类处理连接,查询和更新数据库的详细信息。这是最好的方法吗?

感谢, ShermanTheCat

 Class TheMainClass{
     main {
         DataAccessor myDA = new DataAccessor("bob", "bobspassord", "127.0.0.1"...);
         Resultset myResults = myDA.getResultSet("select something from somethign");

         //do something here with myresults looping through the resultset
     }
  }


  Class DataAccessor{
     String dbUser;
     String dbPwd;
     String dbServer;
     ...

     public DataAccessor(int dbType, String dbUser, String dbPwd, String dbServer....){
        dbUser=dbUser;
        dbPwd=dbPwd;
        dbServer=dbServer;
        ...
     }

     public ResultSet getResultSet(String queryString){
        ResultSet queryResults = null;
        try{
           logWriter.logMessage("INFO", "SelectString: " + selectString);

           if (dbType==1){
            Class.forName("oracle.jdbc.OracleDriver");  
           } else if (dbType==2) {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
           }

           //create connection
           Connection dbConn = DriverManager.getConnection(dbUrl, dbUserName, dbPassword);

           // execute the query to get a result set
           Statement dbQuery = dbConn.createStatement();


           //populate the result set
           queryResults = dbQuery.executeQuery(selectString);

        } catch (Exception e) {
             logWriter.logMessage("DEBUG", "Error creating connection or populating 
                               result set:"     + e);
     }
     return queryResults;
     }
}

3 个答案:

答案 0 :(得分:0)

如果你是一个业余爱好者和编码学习,或者正在将一个小工具放在一起以快速解决问题,这种方法很好。如果您正在专业地这样做或者正在尝试解决像构建Web服务这样的更大问题,那么您应该:

  • 添加一个业务逻辑层,其中包含您要解决的特定问题的所有详细信息。例如。计算素数,卖房子,提供股票报价等。这将使您更容易地测试您的业务逻辑,这是您正在构建的最重要的部分。
  • 添加数据访问层以查询数据存储,并从业务逻辑层隐藏数据存储的细节。该层将数据库查询映射到对象,并将对象映射到数据库更新。这样做可以让您以后更轻松地更改数据存储,并从业务逻辑层中消除数据存储逻辑的复杂性。

答案 1 :(得分:0)

您想要记录捕获的错误,这都是主观的。尽管如此,我个人的方法是在我的签名方法SQLException中声明Exception(而不是getResultSet),以便我可以自由地操纵异常和日志消息

答案 2 :(得分:0)

我认为典型的方法是抛出一个异常并让#34; TheMainClass"处理它。

如果您不希望数据库相关的例外情况发生,那么"已知"通过" TheMainClass"你抓住了数据库异常,又引发了另外一个与业务相关的事情。

您还应该添加一个finally语句来关闭连接。