簡體   English   中英

數據庫訪問類最佳實踐

[英]Database access class best practices

我使用JDBC驅動程序為我的postgre數據庫創建了一個簡單的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)嗎?

您是否考慮過在服務器配置文件(如果是Web應用程序)中定義連接屬性,並且在整個應用程序生命周期中都打開了會話?

在實現DBHelper之前,您應該檢查一些Java庫是否可以滿足您的需求。 如果你看看這個有列出了一些庫,似乎適合您的問題。

如果您決定繼續使用自己的自定義實現,建議將DBHelper設置為普通類,而沒有用於管理連接的靜態方法。 主要原因是使用靜態方法無法同時管理多個(即與不同數據庫的連接)數據庫連接。 如果您在onw庫中使用Java 7實現,則還可以實現AutoClosable ,以便更好地管理庫所管理的資源。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM