簡體   English   中英

數據庫連接池和數據庫連接?

[英]Database connection pool and database connection?

我創建了一個桌面應用程序,並通過數據庫連接(bean / class)將其連接到MySQL數據庫,並且可以CRUD。 我在NetBeans站點上看到他們在Web應用程序上創建了一個連接池。

連接池與桌面應用程序上的類/ bean是否相同?

這是否意味着我創建了一個與桌面應用程序連接到數據庫模型(MVC)的bean /類,還是必須做其他事情?

在Glassfish服務器上,使用向導創建連接池。 在Apache上您不需要。 我必須為Apache創建數據庫連接bean嗎?

將數據庫連接到Web應用程序有哪些實踐(bean,還有其他方法)?

我還閱讀了有關Hibernate的信息,但我不了解它的用法。 冬眠在哪里可以提供幫助? 我的意思是,它是ORM,但是Hibernate可以為我做什么,以便使我的代碼更容易? 我想我錯過了ORM的要點

Hibernate將幫助您進行事務管理。 這將使您能夠打開到數據庫的多個不同連接,並在使用不可用的對象(例如從不同線程拉入的bean)時向您發出警告。

當查詢數據庫時,Hibernate的ORM將使您的代碼更容易使用的一個具體示例。 您可以使用Criteria -queries,而不是將標准SQL查詢編寫為字符串。

在Java中,數據庫連接始終使用JDBC驅動程序。 據我所知,沒有一個數據庫允許在一個連接上同時運行多個SQL命令,因此,如果您的應用程序可以同時運行多個SQL命令,則每個連接都會成為瓶頸(Web服務器通常會出現數百個這種情況)的用戶可以同時與數據庫進行交互)。

UPDATE :我的意思是:您可以通過單個連接輕松地菊花鏈式命令(例如UPDATE ... ; COMMIT ),但不能同時發送兩個UPDATE命令-您總是必須等待在發送下一個命令之前,請先完成第一個命令。 一些數據庫允許在單個查詢中發送多個命令,但是它們一個接一個地執行而不是同時執行 想一想:如果您可以在單個連接上同時運行多個命令,您怎么知道它們以什么順序執行?

最重要的是,對於大多數數據庫而言,創建數據庫連接非常昂貴。 因此,它們是在應用程序啟動期間預先創建的,並保存在一個池中。 一旦使用池化的JDBC驅動程序“連接”到數據庫,它就會從池中選擇一個未使用的連接並返回它。 那(幾乎)不需要時間。 當您“關閉”連接時,它將返回到池中。

另一個好處是,池可以使連接保持活動狀態。 因此,當您需要新的連接時(只要數據庫正在運行),您就不必擔心連接錯誤。

從應用程序方面看,這是透明的(大多數JDBC驅動程序現在在內部進行池化,或者具有池化API)。 如果您的JDBC驅動程序沒有,則可以始終使用DBCP之類的池。 池處理所有令人討厭的細節,您針對池API編寫應用程序,而不是直接使用JDBC。 該文檔將告訴您如何操作。

冬眠如何與眾不同。 Hibernate是JDBC之上的一層,可以將POJO轉換為SQL,然后轉換回SQL。

因此,您無需說INSERT INTO data(ID, VALUE) values (?, ?)

class Pojo { long id; String value; }
Pojo demo = new Pojo();
demo.value = "Test";

session.persist(demo);

然后Hibernate將為您創建SQL並將其發送到數據庫。 在現階段,這並不能使您的生活更輕松。 更改Pojos時,Hibernate開始發光:

class Pojo { long id; String value; 
    String name; // Oops ... forget the name
}
Pojo demo = new Pojo();
demo.name = "John";
demo.value = "Test";

session.persist(demo);

Hibernate將相應地更改數據庫定義,並更新它加載和保存對象所需的所有SQL命令。

暫無
暫無

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

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