簡體   English   中英

在Java EE中共享數據庫連接

[英]Sharing database connection in Java EE

我正在使用JSP和Servlet(IDE:Eclipse,Database:Oracle10)開發Web應用程序。

我開發了java類,它返回一個static connection ,該連接將由我的整個Web應用程序使用。

public class DBConnection 
{
    private static Connection con = null;

    static Connection getConnection(String str)
    {
        try
        {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            con = DriverManager.getConnection("MyValuesHere");
            System.out.println("New instance of Connection is created for: "+str);
        }
        catch(ClassNotFoundException cnfe)
        {
            System.out.println("Error loading class!");
            cnfe.printStackTrace();
        }
        catch(SQLException sqle)
        {
            System.out.println("Error connecting to the database!");
            sqle.printStackTrace();
        }
        return con;
    }//getConnection()
}//class

上課工作正常。 然后我有另外4個java類

  1. 插入
  2. 更新
  3. 刪除
  4. 選擇

using the above connection從數據庫using the above connection數據。 所以在這4個類中,我得到了在我的DBConnection類中創建的連接,這四個類也正常工作。 這四個類在我的所有Servlet中使用。

要在這4個類中獲取Connection,我正在編寫以下行:

private static Connection con = DBConnection.getConnection("UpdateQuery.java");

但問題是我想在所有四個類中共享相同的連接,但是在這4個類中分別創建連接。 那么我應該如何在這四個類中共享相同的連接呢? 有更好的方法嗎? 如果我使用這種方法,由於共享整個應用程序的連接,Web應用程序中是否會出現任何問題?

你(隱含地)試圖解決一個非平凡的任務。

這些東西通常由容器完成 - 從池中取出連接,然后將它們返回,重新連接等......

如果您使用功能齊全的應用程序服務器,則最好配置和使用數據源。

如果您的服務器不支持數據源,請不要將連接保存到私有字段。 例如,當您的連接丟失時會發生什么? 您的私有變量將具有不可用的連接。 你有任何恢復機制嗎?

如果您在業務操作開始時獲得它然后關閉它,您的代碼將更加健壯。

或者嘗試找一個專業編寫的支持連接池的庫 - 它在處理連接池時與經典容器幾乎完全相同。

或者自己寫,但這將是一個單獨的任務,有很多問題。

看起來你想把Connection變成一個單身,但是忘了檢查它是否已經被實例化了。 getConnection您可以在第一個位置檢查con是否為null,並立即返回該實例。 僅當con仍為null時,繼續初始化。

您應該將創建的連接實例保存到DBConnection的私有靜態字段中,並且在調用getConnection時,檢查該字段是否為null,然后創建連接,然后返回它: if (connection == null) { connection = createConnection(); } return connection; if (connection == null) { connection = createConnection(); } return connection;

其中connection是DBConnection類的private static Connection connection字段。

但是我強烈建議不要使用這種方法,因為在並發線程之間共享連接會導致嚴重的問題。 我建議使用連接池

暫無
暫無

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

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