程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> JDBC與JNDI的區別

JDBC與JNDI的區別

編輯:關於JAVA

程序員開發時,知道要開發訪問MySQL數據庫的應用,於是將一個對 MySQL JDBC 驅動程序類的引用進行了編碼,並通過使用適當的 JDBC URL 連接到數據庫。

就像以下代碼這樣:

Connection conn=null;

try ...{

Class.forName("com.MySQL.jdbc.Driver", true, Thread.currentThread().getContextClassLoader());

conn=DriverManager.getConnection("jdbc:MySQL://MyDBServer?user=qingfeng&passWord=mingyue");

......

conn.close();

} catch(Exception e) ...{

e.printStackTrace();

} finally ...{

if(conn!=null) ...{

try ...{

conn.close();

} catch(SQLException e) ...{}

}

}

這是傳統的做法,也是以前非Java程序員(如Delphi、VB等)常見的做法。這種做法一般在小規模的開發過程中不會產生問題,只要程序員熟悉Java語言、了解JDBC技術和MySQL,可以很快開發出相應的應用程序。

沒有JNDI的做法存在的問題:1、數據庫服務器名稱MyDBServer 、用戶名和口令都可能需要改變,由此引發JDBC URL需要修改;2、數據庫可能改用別的產品,如改用DB2或者Oracle,引發JDBC驅動程序包和類名需要修改;3、隨著實際使用終端的增加,原配置的連接池參數可能需要調整;4、……

解決辦法:程序員應該不需要關心“具體的數據庫後台是什麼?JDBC驅動程序是什麼?JDBC URL格式是什麼?訪問數據庫的用戶名和口令是什麼?”等等這些問題,程序員編寫的程序應該沒有對 JDBC 驅動程序的引用,沒有服務器名稱,沒有用戶名稱或口令 ―― 甚至沒有數據庫池或連接管理。而是把這些問題交給J2EE容器來配置和管理,程序員只需要對這些配置和管理進行引用即可。

由此,就有了JNDI.

用了JNDI之後的做法:首先,在在J2EE容器中配置JNDI參數,定義一個數據源,也就是JDBC引用參數,給這個數據源設置一個名稱;然後,在程序中,通過數據源名稱引用數據源從而訪問後台數據庫。

具體操作如下(以JBoss為例):

1、配置數據源

在JBoss 的 D:\jboss420GA\docs\examples\jca 文件夾下面,有很多不同數據庫引用的數據源定義模板。將其中的 MySQL-ds.XML 文件Copy到你使用的服務器下,如 D:\jboss420GA\server\default\deploy。

修改 MySQL-ds.XML 文件的內容,使之能通過JDBC正確訪問你的MySQL數據庫,

如下:

Connection conn=null;

try ...{

Class.forName("com.MySQL.jdbc.Driver", true, Thread.currentThread().getContextClassLoader());

conn=DriverManager.getConnection("jdbc:MySQL://MyDBServer?user=qingfeng&passWord=mingyue");

......

conn.close();

} catch(Exception e) ...{

e.printStackTrace();

} finally ...{

if(conn!=null) ...{

try ...{

conn.close();

} catch(SQLException e) ...{}

}

}

MySQLDS

jdbc:MySQL://localhost:3306/lw

com.MySQL.jdbc.Driver

root

rootpassWord

org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter

MySQL

這裡,定義了一個名為MySQLDS的數據源,其參數包括JDBC的URL,驅動類名,用戶名及密碼等。

2、在程序中引用數據源:

Connection conn=null;try ...{

Context ctx=new InitialContext();

Object datasourceRef=ctx.lookup("Java:MySQLDS"); //引用數據源 DataSource ds=(Datasource)datasourceRef; conn=ds.getConnection();

......

c.close();

} catch(Exception e) ...{

e.printStackTrace();

} finally ...{

if(conn!=null) ...{

try ...{

conn.close();

} catch(SQLException e) ...{ }

}

}

直接使用JDBC或者通過JNDI引用數據源的編程代碼量相差無幾,但是現在的程序可以不用關心具體JDBC參數了。

在系統部署後,如果數據庫的相關參數變更,只需要重新配置 MySQL-ds.XML 修改其中的JDBC參數,只要保證數據源的名稱不變,那麼程序源代碼就無需修改。

由此可見,JNDI避免了程序與數據庫之間的緊耦合,使應用更加易於配置、易於部署。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved