【问题标题】:Database access class best practices数据库访问类最佳实践
【发布时间】:2015-09-10 15:19:55
【问题描述】:

我正在使用 JDBC 驱动程序为我的 postgre DB 创建一个简单的 DBHelper。

我想知道最佳做法是什么?

例如,initConnection() closeConnection() 之类的方法或其他任何方法都应该是静态方法吗?喜欢:

void foo{
    DBHelper.initConnection();
    // do some logic, maybe:
    // Data someData = DBHelper.getSomeData();
    DBHelper.closeConnection();
}

或者如果我将创建一个 DBHelper 对象并为对象调用方法可能会更好。喜欢:

void foo2{
    DBHelper dbhelper = new DBHelper();
    dbhelper.initConnection();
    // do some logic, maybe:
    // Data someData = dbhelper.getSomeData();
    dbhelper.closeConnection();
}

这有关系吗?

在尝试检索一些数据之前,我是否需要始终检查连接是否打开?如果近了怎么办?并且总是尝试在finally 块中关闭它?

编辑: 回复@Kayaman 评论:

所以我的 foo 方法是这样的?

 void foo3{
    Connection conn = DBHelper.getConnection();
    // do some logic, maybe:
    // Statement statement = conn.createStatement();
    // some stmt work
    conn.close() //do i need check if stmt is closed before? 
}

这将使我的 DBHelper 类仅对获得连接有用。里面会没有逻辑? (比如GetInterestingRecords()GetRecordsWithId(30)

【问题讨论】:

  • 嗯,这是一个宽泛的问题,但我建议使用 getConnection() 方法,它每次都返回一个新的 Connection,而您只需在使用连接的代码中调用 con.close();完成后。
  • @Kayaman 如果你可以检查我编辑的问题。无论如何,Ty 的回应! :)
  • 创建getRecordsWithId(int) 没有多大意义。使用 getUserById(int), getUserByLastName(String) 等方法创建 DAO 类更有意义。业务逻辑不应转到辅助类。
  • @Kayaman 好的,这对我来说已经足够清楚了。静态/非静态问题怎么样?我上面写的代码正确吗?或者我应该创建一个对象?或者也许没关系?
  • 这取决于您是否打算在其中保留状态,但使用静态方法可能会很好。

标签: java database


【解决方案1】:

您是否考虑过在服务器配置文件中定义连接属性(如果是 Web 应用程序)并在整个应用程序生命周期中打开会话?

【讨论】:

  • 是的,我已经在我的其他项目中做过这样的事情,但这不是一个网络应用程序
  • 但这个想法与@Keyaman 完全不同,他建议在每次与 DB 交互之前打开连接并在之后关闭
  • 是的,背后的想法是客户端在应用程序生命周期内连接到数据库,而不是按需连接。
【解决方案2】:

在实现 DBHelper 之前,您应该检查一些 java 库是否可以满足您的需求。如果您查看this,其中列出了一些似乎适合您的问题的库。

如果您决定继续使用自己的自定义实现,我建议将 DBHelper 设为一个普通类,没有用于管理连接的静态方法;主要原因是使用静态方法不能同时管理多个(即到不同数据库的连接)数据库连接。如果您在 onw 库中使用 java 7 实现,您还可以实现 AutoClosable 接口,以便更好地管理您的库管理的资源。

【讨论】:

  • 静态/非静态的任何其他优点或缺点?
  • 一些基本的 jdbc 实用程序,例如 close(connection)、close(resultSet) 可能是静态的,但其他封装 Object 并包装它的工具(如 DBHelper withc 数据源)最好设计为非静态跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-21
  • 2012-05-12
  • 1970-01-01
  • 1970-01-01
  • 2012-09-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多