java数据库编程——元数据(metadata)+web 与企业应用中的连接管理
【0】README
1) 本文部分文字描述轉自 core java volume 2 , 測試源代碼均為原創, 旨在理解 java數據庫編程——元數據(metadata)+web 與企業應用中的連接管理 的基礎知識 ;
2)for database connection config, please visit : https://github.com/pacosonTang/core-java-volume/blob/master/coreJavaAdvanced/chapter4/database.properties
【1】元數據(metadata)
1)元數據定義:關于數據庫及其表的結構的詳細信息; (干貨——元數據定義)
2)三類元數據:數據庫的元數據, 結果集的元數據, 預備語句參數的元數據; (干貨——元數據類型)
3)如果要了解更多信息,從數據庫連接中獲取一個 DatabaseMetadata對象:
DatabaseMetaData data = conn.getMetadata();
- 3.1)現在就可以獲得某些元數據了, 如
ResultSet rs = meta.getTables(null, null, null, new String[]{TABLE”});
將返回一個包含所有數據庫表信息的結果集;
4)數據庫元數據還有第二個重要應用:
4.1)數據庫是非常復雜的, sql 標準為數據庫的多樣性提供了很大的空間。 DatabaseMatadata 接口中有上百個方法可以用于查詢數據庫中的相關信息,包括一些奇特的名字進行調用的方法, 如:
meta.supportsCatalogInPrivilegeDefinitions() 和 meta.nullPlusNonNullIsNull();
4.2)DatabaseMetaData 接口用于提供有關數據庫的數據, 第二個元數據接口 ResultSetMetaData則用于提供結果集的相關信息。 每當通過查詢得到一個結果集時,我們都可以獲得該結果集的列數以及每一列的名字, 類型, 和字段寬度。 下面是一個典型循環:
ResultSet mrs = stat.executeQuery(“select * from table”);
ResultSetMetaData meta = mrs.getMetaData();
// index starts from 1 not 0.
for(int i=1; i<=meta.getColumnCount(); i++)
{
String columnName = meta.getColumnLabel(i);
int columnWidth = meta.getColumnDisplaySize(i);
}
5)看個荔枝(查看列名和列寬度)
- 5.1)for souce code, please visit : https://github.com/pacosonTang/core-java-volume/blob/master/coreJavaAdvanced/chapter4/DBMetadataTest.java
- 5.2)key source code at a glance:
- 5.3)relative printing results as follows:
【2】web 與企業應用中的連接管理
1)problem+solution:
- 1.1)problem: 使用 database.properties 文件可以對數據庫連接進行簡單的設置,但不適用于規模較大的應用, 僅適用于 小型測試程序;
- 1.2)solution: 在 web 或企業中部署JDBC應用時, 數據庫連接管理與 java 名字和目錄接口(JNDI)是集成在一起的。 遍布企業的數據源的屬性可以存儲在一個目錄中,采用這種方式使得我們可以集中管理用戶名, 密碼, 數據庫名和 JDBC URL;
(干貨——引入JNDI==Java Name and Directory Interface,java 名字和目錄接口)
Attention)
- A1)我們不再使用 DriverManager, 而是使用 JNDI 訪問來定位數據源; (干貨——不再使用 DriverManager, 而是使用 JNDI 訪問來定位數據)
- A2)數據源就是一個能夠提供簡單的 JDBC 連接和更多高級服務的接口, 比如執行涉及多個數據庫的分布式事務;
- A3) javax.sql 標準擴展包定義了 DataSource 接口;
A4)在 java EE 容器中, 甚至不必編程進行 JNDI 查找, 只需在 DataSource 域上使用 Resource 注解, 但加載應用時, 這個數據源引用將被設置;如,
@Resource(name=”jdbc/corejava”)
private DataSource source;- A4.1)當然了, 我們必須配置數據源。如果你編寫的數據庫程序將在 servlet 容器中運行, 如 tomcat, 或應用服務器中運行, 如GlassFish, 那么必須將 數據庫配置信息(包括JNDI名字, JDBC URL, 用戶名和密碼) 放置在配置文件中, 或在管理員 GUI 中進行設置;
2)problem+solution (干貨——這個problem+solution引入了 數據庫連接池 的概念 )
2.1) problem:涉及建立數據庫連接所需的開銷問題: 我們的數據庫程序給出了兩種策略來獲取數據庫連接: 1,在程序開頭建立到數據庫的單個連接; 2,在每次需要時都打開一個新連接;
- 2.1.1)但這兩種方式都不令人滿意: 因為數據庫資源是有限的資源, 如果用戶要離開應用一段時間, 那么它占用的連接就不應該保持開放狀態; 另一方面, 每次查詢都獲取連接并在隨后關閉它的代價也是相當高的;
2.2)solution: 建立數據庫連接池。
- 2.2.1)這意味著數據庫連接在物理上并未被關閉, 而是保留在一個隊列中并被反復重用;
3)連接池是一種非常重要的服務:
- 3.1) JDBC規范為實現者提供了用以實現連接池服務的手段;
- 3.2)不過, JDK本身并未實現這項服務,
- 3.3)數據庫供應商提供的JDBC驅動程序也沒有提供這項服務;
- 3.4)相反, web 容器和應用server 的開發商通常會提供連接池服務的實現; (干貨—— web 容器和應用server 的開發商提供連接池服務)
4)連接池的使用對程序員來說是完全透明的:
- 4.1)getConnection方法: 可以通過獲取數據源并調用 getConnencion 方法來得到連接池中的連接;
- 4.2)close方法:使用完連接后, 需要調用 close 方法, 該方法并不在物理上關閉連接,而只是告訴連接池已經使用完該連接了。
總結
以上是生活随笔為你收集整理的java数据库编程——元数据(metadata)+web 与企业应用中的连接管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑颗粒在哪看内存(电脑颗粒在哪看内存占
- 下一篇: 旋风少女手游电脑版(旋风少女游戏官方手游