?? jdbc-spec.frame6.html
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
<meta HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=gb2312">
<title></title>
</head>
<body bgcolor="#ffffff">
<table width="600">
<tr>
<td><font size="-1"><a href="jdbc-spec.frame.html">目錄</a> | <a
href="jdbc-spec.frame5.html">上一頁</a> | <a href="jdbc-spec.frame7.html">下一頁</a>
</font></td>
<td align="right"><i>JDBC<sup><font size="-2">TM</font></sup> 指南:入門</i></td>
</tr>
</table>
<hr>
<p><br>
<a name="20470"></a> </p>
<h2>6 數據庫連接</h2>
<p>有關完整的接口描述,參見第 <a href="jdbc-spec.frame13.html#4165">13</a>
章的 Java 接口。 </p>
<p><a name="4698"></a> </p>
<h3>6.1 打開連接</h3>
<p>當需要訪問數據庫時,可從 JDBC 管理層的
java.sql.DriverManager.getConnection 方法獲得 java.sql.Connection 對象。 </p>
<p><a name="16343"></a>DriverManager.getConnection 方法將 URL 字符串用作參數。JDBC
管理層將嘗試定位驅動程序,以便連接到 URL
所代表的數據庫。如果可連接到給定的 URL,則 JDBC
管理器將通過依次詢問每個驅動程序來實現定位(參見下文第 <a
href="jdbc-spec.frame6.html#16326">6.2</a> 節)。<a href="#25398"><sup>1</sup></a>驅動程序應檢查
URL 是否指定其支持的子協議(參見下文第 <a
href="jdbc-spec.frame6.html#16290">6.3</a>
節)。如果是,這些驅動程序應嘗試連接到指定的數據庫。如果成功地建立連接,則這些驅動程序應返回相應的
java.sql.Connection 對象。 </p>
<p>從 java.sql.Connection 對象有可能獲得 java.sql.Statement、java.sql.PreparedStatement
及用于執行 SQL 語句的 java.sql.CallableStatement 對象。 </p>
<p><a name="8410"></a>在連接打開期間,我們也允許應用程序繞過 JDBC
管理層,同時允許顯式地選用驅動程序。 </p>
<p><a name="16326"></a> </p>
<h3>6.2 選擇驅動程序</h3>
<p>有時,多個 JDBC 驅動程序可連接到一個給定的 URL
上。例如,當連接到給定遠程數據庫時,既可使用 JDBC-ODBC
橋驅動程序、通用網絡協議驅動程序的 JDBC,也可使用由數據庫廠商提供的驅動程序。
</p>
<p><a name="16331"></a>JDBC 允許用戶通過設置 Java 屬性 jdbc.drivers
來指定驅動程序列表。如果屬性被定義,應是以冒號分隔的驅動程序類名,例如“acme.wonder.Driver
:foobaz.openNet.Driver:vendor.OurDriver”。 </p>
<p>搜索驅動程序時,JDBC 將使用找到的第一個可成功連接到給定 URL
的驅動程序。它將首先嘗試按給定順序使用 sql.drivers
列表中指定的驅動程序,然后將盡量按照加載驅動程序的順序繼續使用每個加載了的驅動程序。它將忽略所有不可信任代碼的驅動程序,除非它們是從與試圖打開連接的代碼相同的源加載的(參見第
<a href="jdbc-spec.frame5.html#4985">5</a> 節中的安全性討論)。 </p>
<p><a name="16290"></a> </p>
<h3>6.3 URL</h3>
<h4>6.3.1 JDBC 數據庫命名的目標</h4>
<p>我們需要提供命名數據庫的方法,以便應用程序編寫人員可指定所要連接的數據庫。
</p>
<p><a name="16427"></a>該 JDBC 命名機制應具有如下屬性:
<ul>
<li><a name="16428"></a>不同驅動程序可使用不同的數據庫命名機制。例如,JDBC-ODBC
橋驅動程序可支持簡單 ODBC
風格的數據源名稱,而網絡協議驅動程序需了解附加信息以便查找所要連接的主機名和端口。</li>
<li><a name="16441"></a>如果用戶下載的 applet
想和給定的數據庫通訊,則我們希望用戶不需做任何系統管理便可打開數據庫連接。例如,在客戶機上,我們希望能避免使用類似于人為管理的
ODBC 數據源表。這表明在 JDBC
名稱中可以對任何所需的連接信息進行編碼。</li>
<li>我們允許 JDBC
名稱中使用間接層,以便能通過某些網絡命名系統解析初始名來定位數據庫。這可以使系統管理員避免將特定主機指定為
JDBC 名稱的一部分。但是,由于存在許多不同的網絡命名服務(如 NIS、DCE
等),所以我們不想強制指定某種網絡名字服務器。 <a name="16429"></a>
</li>
</ul>
<h4>6.3.2 URL 語法</h4>
<p>幸運的是,萬維網已在支持所有這些屬性的命名系統上實現標準化,這就是統一資源定位符
(URL) 機制。因此,我們計劃將 URL 用于 JDBC
命名,而且打算只推薦某些構造 JDBC URL 的規則。 </p>
<p><a name="16555"></a>我們推薦如下方法來構造 JDBC URL: </p>
<p><a name="16556"></a> jdbc:<子協議>:<子名稱> </p>
<p>其中,子協議將命名可被一個或多個驅動程序支持的數據庫連接機制。子名稱的內容和語法依賴于子協議。
</p>
<p><a name="16562"></a>如果將網絡地址指定為子名稱的一部分,則為子名稱推薦“//hostname:port/subsubname”形式的標準
URL 命名規則。子名稱的子名稱可具有任意的內部語法。 </p>
<p><a name="16551"></a> </p>
<h4>6.3.3 URL 示例</h4>
<p>例如,為通過 JDBC-ODBC 橋訪問數據庫,可使用如下 URL: </p>
<p><a name="16507"></a> jdbc:odbc:fred </p>
<p>該示例中,子協議是“odbc”,子名稱是本地 ODBC 數據源名稱“fred”。JDBC-ODBC
驅動程序可檢查具有“odbc”子協議的 URL,然后在 ODBC SQLConnect
內使用該子名稱。 </p>
<p>如果是使用某種通用數據庫連接協議“dbnet”與數據庫接收器進行交流,則可使用如下
URL: </p>
<p><a name="16529"></a> jdbc:dbnet://wombat:356/fred </p>
<p><a name="30804"></a>示例中,URL 指定應在主機 wombat 上使用“dbnet”協議來連接到端口
356,然后將子名稱的子名稱“fred”提交到該端口,以便定位最終的數據庫。
</p>
<p>如果希望數據庫名稱中用某些網絡名字服務器提供間接層,最好將命名服務的名稱用作子協議。例如,可使用如下
URL: </p>
<p><a name="16531"></a> jdbc:dcenaming:accounts-payable </p>
<p><a name="16583"></a>該示例中,URL 指定應使用本地 DCE
命名服務將數據庫名“accounts-payable”解析為更確定的名稱,以便連接到真實的數據庫。某些情況下,可以提供通過名字服務器執行名字查找的偽驅動程序,然后使用其結果定位真實服務器并打開真實連接。
</p>
<p><a name="16584"></a> </p>
<h4>6.3.4 驅動程序可選擇語法并忽略其它 URL。</h4>
<p>總的來說,JDBC URL
機制負責提供框架,以便不同的驅動程序可使用適合各自需求的命名系統。每個驅動程序只需知道一個
URL 命名語法,而且可拒絕任何其它 URL。 </p>
<p><a name="11833"></a> </p>
<h4>6.3.5 注冊子協議名稱</h4>
<p>JavaSoft 將充當 JDBC
子協議名稱的非正式注冊服務程序。要預留子協議名稱,請發送郵件到
jdbc@wombat.eng.sun.com。 </p>
<p><a name="25343"></a> </p>
<h4>6.3.6 “odbc”子協議</h4>
<p>我們已為指定 ODBC 風格“Data Source Names”的 URL 預留了 odbc
子協議。對于該子協議,我們指定的 URL
語法允許在數據源名稱之后指定任意屬性值。 </p>
<p><a name="25356"></a>完整的 odbc 子協議 URL 語法是: </p>
<pre><code>jdbc:odbc:<<em>數據-源-名稱</em>>[;<<em>屬性-名稱</em>>=<<em>屬性-值</em>>]*
</code></pre>
<p>因此,有效的 jdbc:odbc 名稱包括: </p>
<pre><code>jdbc:odbc:qeor7
</code></pre>
<pre><code>jdbc:odbc:wombat
</code></pre>
<pre><code>jdbc:odbc:wombat;CacheSize=20;ExtensionCase=LOWER
</code></pre>
<pre><code>jdbc:odbc:qeora;UID=kgh;PWD=fooey
</code></pre>
<pre><code>
</code></pre>
<h3>6.4 連接參數</h3>
<p>打開連接時,可以將 java.util.Properties
對象傳入。該對象是保存標記字符串與值字符串之間映射的屬性集。兩種常規屬性是“user”和“password”。某些驅動程序可指定并使用其它屬性。
</p>
<p><a name="16935"></a>為使 applet
能通過常規方法訪問數據庫,最好將盡可能多的連接信息編碼為 URL
的組成部分,而驅動程序編寫人員最好將屬性的用途設置為最少。 </p>
<p><a name="16922"></a> </p>
<h3>6.5 多重連接</h3>
<p>使用一個或多個驅動程序,一個應用程序可建立到一個或多個數據庫的多重連接。
</p>
<p><a name="4731"></a> </p>
<h3>6.6 注冊驅動程序</h3>
<p>JDBC
管理層需要知道可用的數據庫驅動程序。為此,我們提供兩種方法。
</p>
<p><a name="4736"></a>第一種,當 JDBC java.sql.DriverManager
類初始化時,在系統屬性中查找“sql drivers”屬性。如果該屬性存在,則它應包括一列以冒號分隔的驅動程序類名。每個被命名的類都應實現
java.sql.Driver 接口。DriverManager 類將嘗試加載每一命名的 Driver 類。 </p>
<p>第二種,通過采用標準 Class.forName
方法,程序員可顯式地加載驅動程序類。例如,要加載 acme.db.Driver
類,可以執行: </p>
<pre><code>Class.forName("acme.db.Driver");
</code></pre>
<p>兩種情況下,每個新加載的 Driver 類自己負責用
DriverManager.registerDriver 方法向 DriverManager 進行注冊。這將允許
DriverManager 在試圖進行數據庫連接時使用驅動程序。 </p>
<p><a name="4751"></a>為安全起見,JDBC
管理層將記錄下哪個類加載器提供了哪個驅動程序。在打開連接時,它將只使用來自本地文件系統或與發布
getConnection 請求的代碼來自同一類加載器的驅動程序。 </p>
<p><br>
</p>
<hr>
<font size="-1"><a href="jdbc-spec.frame.html">
<p>目錄</a> | <a href="jdbc-spec.frame5.html">上一頁</a> | <a
href="jdbc-spec.frame7.html">下一頁</a> </font></p>
<hr>
<sup>
<p>1</sup><a name="25398"></a>表面上這似乎會降低效率,但請注意:由于同時加載多個驅動程序的可能性不大,所以每次連接將只需要幾個過程調用和字符串比較。
</p>
<address>
<a href="mailto:jdbc@wombat.eng.sun.com">jdbc@wombat.eng.sun.com</a> 或 <a
href="mailto:jdbc-odbc@wombat.eng.sun.com">jdbc-odbc@wombat.eng.sun.com</a>
</address>
<a href="../../../relnotes/SMICopyright.html"><font size="-1"><i>
<p>版權所有 © 1996, 1997 Sun Microsystems, Inc. 保留所有權利。</i></font> </a><!-- HTML generated by Suzette Pelouch on April 10, 1998 -->
</p>
</body>
</html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -