国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
JDBC與JNDI這兩種連接方式有什么區(qū)別?

jdbc是數(shù)據(jù)庫中間代理商為了是java連接數(shù)據(jù)庫而定的一個協(xié)議 或者說是方法,通過jdbc-odbc的方法進(jìn)行數(shù)據(jù)庫連接,是連接一次創(chuàng)建一次的做法 1,由數(shù)據(jù)庫驅(qū)動和協(xié)議組成連接數(shù)據(jù)的方法,調(diào)用中間商提供的類包,進(jìn)行創(chuàng)建連接 2.再由連接去調(diào)用3種狀態(tài). 3.由狀態(tài)來提供對數(shù)據(jù)庫的操作 jndi是一種命名樹的方式,把需要的類都列成目錄的樣式,需要哪個只要根據(jù)命名直接去 調(diào)用,是一種比較快潔的思想和行為. 當(dāng)你要操作數(shù)據(jù)庫的用jdbc 操作命名服務(wù)用jndi Java Database Connectivity (JDBC)是一個標(biāo)準(zhǔn)的Java API,它由一組類和接口組成,Java應(yīng)用程序開發(fā)人員使用它來訪問數(shù)據(jù)庫和執(zhí)行SQL語句 JNDI(Java Name Directory Interface),可不僅僅是進(jìn)行數(shù)據(jù)庫定位的, 它是給當(dāng)前應(yīng)用服務(wù)器所管理的所有資源一個唯一的標(biāo)識,包括數(shù)據(jù)庫,網(wǎng)頁,文件, 連接池等等。


配置 JNDI綁定
此處綁定的數(shù)據(jù)源是以 DBCP 為實(shí)現(xiàn)。首先必須將數(shù)據(jù)庫驅(qū)動(這里用了MYSQL數(shù)據(jù)庫)和DBCP所需要的 Jar 包復(fù)制到 Jetty 根目錄的 lib 目錄下。DBCP主要需要以下3個文件:
Commons-dbcp.jar
Commons-pool.jar
Commons-collections.jar
jdbc和jndi區(qū)別

Connection conn = null;try{Class.forName("com.mysql.jdbc.Driver",true,Thread.currentThread().getContextClassLoader());conn = DriverManager.getConnection("jdbc:mysql://MyDBServer?user=***&password=****");.....conn.close();}catch(...){...}finally{if(conn!=null){try{   conn.close();}catch(...){...}}}

存在的問題?
1、數(shù)據(jù)庫服務(wù)器名稱MyDBServer 用戶名和口令可能需要修改,由此引發(fā)JDBC URL修要修改;
2、數(shù)據(jù)庫可能該用別的產(chǎn)品;
3、隨著實(shí)際終端的增加,原配置的連接池參數(shù)可能需要調(diào)整;
解決辦法
程序員不必關(guān)心數(shù)據(jù)庫級別的事情,只需要知道如何引用即可
JNDI出現(xiàn)了。
定義數(shù)據(jù)源,也就是JDBC引用參數(shù),給這個數(shù)據(jù)源設(shè)置一個名稱;
在程序中通過數(shù)據(jù)源名稱引用數(shù)據(jù)源,從而訪問數(shù)據(jù)庫;

//jndi連接     Context initCtx = new InitialContext();     Context envCtx = (Context)initCtx.lookup("java:comp/env");     DataSource ds = (DataSource)envCtx.lookup("jdbc/webtest");     conn = ds.getConnection();      //jdbc連接      Class.forName("com.mysql.jdbc.Driver",true,Thread.currentThread().getContextClassLoader());      conn = DriverManager.getConnection("jdbc:mysql://localhost/mismain?user=root&autoReconnect=true");

程序員開發(fā)時,知道要開發(fā)訪問MySQL數(shù)據(jù)庫的應(yīng)用,于是將一個對 MySQL JDBC 驅(qū)動程序類的引用進(jìn)行了編碼,并通過使用適當(dāng)?shù)?JDBC URL 連接到數(shù)據(jù)庫。
    就像以下代碼這樣:

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) ...{}}}

這是傳統(tǒng)的做法,也是以前非Java程序員(如Delphi、VB等)常見的做法。這種做法一般在小規(guī)模的開發(fā)過程中不會產(chǎn)生問題,只要程序員熟悉Java語言、了解JDBC技術(shù)和MySQL,可以很快開發(fā)出相應(yīng)的應(yīng)用程序。
    沒有JNDI的做法存在的問題:1、數(shù)據(jù)庫服務(wù)器名稱MyDBServer 、用戶名和口令都可能需要改變,由此引發(fā)JDBC URL需要修改;2、數(shù)據(jù)庫可能改用別的產(chǎn)品,如改用DB2或者Oracle,引發(fā)JDBC驅(qū)動程序包和類名需要修改;3、隨著實(shí)際使用終端的增加,原配 置的連接池參數(shù)可能需要調(diào)整;4、……
    解決辦法:程序員應(yīng)該不需要關(guān)心“具體的數(shù)據(jù)庫后臺是什么?JDBC驅(qū)動程序是什么?JDBC URL格式是什么?訪問數(shù)據(jù)庫的用戶名和口令是什么?”等等這些問題,程序員編寫的程序應(yīng)該沒有對 JDBC 驅(qū)動程序的引用,沒有服務(wù)器名稱,沒有用戶名稱或口令 —— 甚至沒有數(shù)據(jù)庫池或連接管理。而是把這些問題交給J2EE容器來配置和管理,程序員只需要對這些配置和管理進(jìn)行引用即可。
    由此,就有了JNDI.
    用了JNDI之后的做法:首先,在在J2EE容器中配置JNDI參數(shù),定義一個數(shù)據(jù)源,也就是JDBC引用參數(shù),給這個數(shù)據(jù)源設(shè)置一個名稱;然后,在程序中,通過數(shù)據(jù)源名稱引用數(shù)據(jù)源從而訪問后臺數(shù)據(jù)庫。
    具體操作如下(以JBoss為例):
    1、配置數(shù)據(jù)源

在JBoss 的 D:\jboss420GA\docs\examples\jca 文件夾下面,有很多不同數(shù)據(jù)庫引用的數(shù)據(jù)源定義模板。將其中的 mysql-ds.xml 文件Copy到你使用的服務(wù)器下,如 D:\jboss420GA\server\default\deploy。
修改 mysql-ds.xml 文件的內(nèi)容,使之能通過JDBC正確訪問你的MySQL數(shù)據(jù)庫,
如下:

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) ...{}}}
<?xml version="1.0" encoding="UTF-8"?><datasources><local-tx-datasource>    <jndi-name>MySqlDS</jndi-name>    <connection-url>jdbc:mysql://localhost:3306/lw</connection-url>    <driver-class>com.mysql.jdbc.Driver</driver-class>    <user-name>root</user-name>    <password>rootpassword</password><exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>    <metadata>       <type-mapping>mySQL</type-mapping>    </metadata></local-tx-datasource></datasources>

1、這里,定義了一個名為MySqlDS的數(shù)據(jù)源,其參數(shù)包括JDBC的URL,驅(qū)動類名,用戶名及密碼等。
2、在程序中引用數(shù)據(jù)源:
 

Connection conn=null;try ...{Context ctx=new InitialContext();Object datasourceRef=ctx.lookup("java:MySqlDS"); //引用數(shù)據(jù)源 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引用數(shù)據(jù)源的編程代碼量相差無幾,但是現(xiàn)在的程序可以不用關(guān)心具體JDBC參數(shù)了。
    在系統(tǒng)部署后,如果數(shù)據(jù)庫的相關(guān)參數(shù)變更,只需要重新配置 mysql-ds.xml 修改其中的JDBC參數(shù),只要保證數(shù)據(jù)源的名稱不變,那么程序源代碼就無需修改。
    由此可見,JNDI避免了程序與數(shù)據(jù)庫之間的緊耦合,使應(yīng)用更加易于配置、易于部署。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
JDBC常見面試題(修訂版)
JDBC數(shù)據(jù)源連接池的配置和使用示例
JNDI與JDBC比較以及連接池的技術(shù) - Do-websoftware - 博客園
配置JNDI
JDBC+tomcat6.0+mysql5.1配置數(shù)據(jù)源
J2EE容器,EJB、JNDI概念掃盲
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服