簡體   English   中英

jdbc connection with java, singleton connection object or spring jdbc connection?

[英]jdbc connection with java, singleton connection object or spring jdbc connection?

我正在使用 java 操作 postgresql 數據庫。 請幫我選擇一個開發實踐。

我必須嗎:

  • 創建一個 jdbc singleton object?
  • 為每個請求創建一個新連接?
  • 或者將 jdbc api 用於 spring 框架?

哪個是最佳實踐?

模糊問題的模糊答案:

而是管理您的 JDBC 連接。 如果您打開了太多連接,則必須維護它們並確保它們已關閉以供其他連接訪問數據庫(您可能會出現“打開的文件過多”的異常)。 連接池維護您的連接。 每個請求有 1 個連接,完成后,將其返回到池中。

我會這樣做:

  • 連接池中維護我的 JDBC 連接(感謝Jigar Joshi )。
  • 從連接池請求連接並在我的DAO中使用它(DAO 是我的 object 到 DB 的 CRUD)。
  • 連接完成后,將連接返回到連接池。

如果您使用 Spring,請使用Spring JDBC 模板

我在哪里可以找到關於如何將 JDBC 連接到客戶端上的 Postgres 數據庫的良好說明或教程?

http://www.mchange.com/projects/c3p0/index.html

c3p0 被設計為易於使用。 只需將 jar 文件 [lib/c3p0-0.9.0.jar] 放入應用程序的有效 CLASSPATH 中,然后制作如下所示的 DataSource:

import com.mchange.v2.c3p0.*;

...

ComboPooledDataSource cpds = new ComboPooledDataSource();
cpds.setDriverClass( "org.postgresql.Driver" ); //loads the jdbc driver            
cpds.setJdbcUrl( "jdbc:postgresql://localhost/testdb" );
cpds.setUser("dbuser");                                  
cpds.setPassword("dbpassword");    

[可選] 如果要開啟PreparedStatement池,還必須設置maxStatements和/或maxStatementsPerConnection (均默認為 0):

cpds.setMaxStatements( 180 ); 

用你的數據源做任何你想做的事,這將由一個使用默認參數設置的連接池支持。 您可以將 DataSource 綁定到 JNDI 名稱服務,或者根據您的喜好直接使用它。 完成后,您可以像這樣清理已創建的 DataSource:

DataSources.destroy( cpds );

而已。 rest 是細節。

保持單個連接甚至更好地使用連接池

暫無
暫無

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

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