?? jdbc 入門.txt
字號(hào):
作者:zergman
email: zergman@chinaasp.com
日期:6/12/2001 1:21:07 PM
JDBC 入門 -- 建立聯(lián)接
教程:JDBC 入門 作者:Maydene Fisher 翻譯:comer
你需要做的第一事情是你與想要使用的 DBMS 建立一個(gè)連接。這包含 2 個(gè)步驟:裝載驅(qū)動(dòng)程序并建立連接。
裝載驅(qū)動(dòng)程序
裝載驅(qū)動(dòng)程序只需要非常簡單的一行代碼。例如,你想要使用 JDBC-ODBC 橋驅(qū)動(dòng)程序, 可以用下列代碼裝載它:
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
你的驅(qū)動(dòng)程序文檔將告訴你應(yīng)該使用的類名。例如, 如果類名是 jdbc.DriverXYZ ,你將用代碼以下的代碼裝載驅(qū)動(dòng)程序:
Class.forName("jdbc.DriverXYZ");
你不需要?jiǎng)?chuàng)建一個(gè)驅(qū)動(dòng)程序類的實(shí)例并且用 DriverManager 登記它,因?yàn)檎{(diào)用 Class.forName 將自動(dòng)將加載驅(qū)動(dòng)程序類。如果你曾自己創(chuàng)建實(shí)例,你將創(chuàng)建一個(gè)不必要的副本,但它不會(huì)帶來什么壞處。
加載 Driver 類后,它們即可用來與數(shù)據(jù)庫建立連接。
建立連接
第二步就是用適當(dāng)?shù)尿?qū)動(dòng)程序類與 DBMS 建立一個(gè)連接。下列代碼是一般的做法:
Connection con = DriverManager.getConnection(url, "myLogin", "myPassword");
這個(gè)步驟也非常簡單,最難的是怎么提供 url。如果你正在使用 JDBC-ODBC 橋, JDBC URL 將以 jdbc:odbc 開始:余下 URL 通常是你的數(shù)據(jù)源名字或數(shù)據(jù)庫系統(tǒng)。因此,假設(shè)你正在使用 ODBC 存取一個(gè)叫 "Fred" 的 ODBC 數(shù)據(jù)源,你的 JDBC URL 是 jdbc:odbc:Fred 。把 "myLogin" 及 "myPassword" 替換為你登陸 DBMS 的用戶名及口令。如果你登陸數(shù)據(jù)庫系統(tǒng)的用戶名為 "Fernanda" 口令為 "J8",只需下面的 2 行代碼就可以建立一個(gè)連接:
String url = "jdbc:odbc:Fred";
Connection con = DriverManager.getConnection(url,"Fernanda", "J8");
如果你使用的是第三方開發(fā)了的 JDBC驅(qū)動(dòng)程序,文檔將告訴你該使用什么 subprotocol, 就是在 JDBC URL 中放在 jdbc 后面的部分。例如, 如果驅(qū)動(dòng)程序開發(fā)者注冊了 acme 作為 subprotocol, JDBC URL 的第一和第二部分將是 jdbc:acme。驅(qū)動(dòng)程序文檔也會(huì)告訴你余下 JDBC URL 的格式。JDBC URL 最后一部分提供了定位數(shù)據(jù)庫的信息。
如果你裝載的驅(qū)動(dòng)程序識(shí)別了提供給 DriverManager.getConnection 的 JDBC URL ,那個(gè)驅(qū)動(dòng)程序?qū)⒏鶕?jù) JDBC URL 建立一個(gè)到指定 DBMS 的連接。正如名稱所示,DriverManager 類在幕后為你管理建立連接的所有細(xì)節(jié)。除非你是正在寫驅(qū)動(dòng)程序,你可能無需使用此類的其它任何方法,一般程序員需要在此類中直接使用的唯一方法是 DriverManager.getConnection。
DriverManager.getConnection 方法返回一個(gè)打開的連接,你可以使用此連接創(chuàng)建 JDBC statements 并發(fā)送 SQL 語句到數(shù)據(jù)庫。在前面的例子里,con 對象是一個(gè)打開的連接,并且我們要在以后的例子里使用它。
JDBC 入門 -- 設(shè)置表
創(chuàng)建表
首先,我們在我們的示例數(shù)據(jù)庫創(chuàng)建其中一張表 COFFEES,包含在咖啡店所賣咖啡的必要的信息,包括咖啡名字,他們的價(jià)格,本星期賣了多少磅及迄今為止賣的數(shù)目。關(guān)于 COFFEES 表我們以后會(huì)詳細(xì)描述,如下:
COF_NAME SUP_ID PRICE SALES TOTAL
Colombian 101 7.99 0 0
French_Roast 49 8.99 0 0
Espresso 150 9.99 0 0
Colombian_Decaf 101 8.99 0 0
French_Roast_Decaf 49 9.99 0 0
存儲(chǔ)咖啡名的列是 COF_NAME,它的 SQL 數(shù)據(jù)類型是 VARCHAR,最大的長度為 32 個(gè)字符。因?yàn)槲覀兯u的每種類型咖啡都使用不同的名字,名字可用于作為唯一識(shí)別咖啡的標(biāo)識(shí),因此可用于作主鍵。第二個(gè)列叫 SUP_ID,用于保存咖啡供應(yīng)商標(biāo)識(shí);其 SQL 數(shù)據(jù)類型為 INTEGER。第 3 列叫 PRICE,因?yàn)樗枰4鎺?shù)的十進(jìn)制數(shù),因此它的 SQL 類型為 FLOAT。(注意,通常錢的 SQL 類型為 DECIMAL 或 NUMERIC,但在不同 DBMSs 間存在差異,為了避免于老版本的 JDBC 的不兼容性在本教程我們采用更標(biāo)準(zhǔn)的 FLOAT 類型)SALES 列的 SQL 類型為 INTEGER,其值為本星期所賣咖啡的磅數(shù)。最后一列,TOTAL 的 SQL 類型為 INTEGER,保存了迄今為止所賣咖啡的總磅數(shù)。
數(shù)據(jù)庫里的第二個(gè)表 SUPPLIERS,保存了每個(gè)供應(yīng)商的信息:
SUP_ID SUP_NAME STREET CITY STATE ZIP
101 Acme, Inc. 99 Market Street Groundsville CA 95199
49 Superior Coffee 1 Party Place Mendocino CA 95460
150 The High Ground 100 Coffee Lane Meadows CA 93966
COFFEES 跟 SUPPLIERS 都包含列 SUP_ID,它意味著可以用 SELECT 語句從這兩張表中取得有關(guān)信息。列 SUP_ID 是 SUPPLIERS 表的主鍵,用于唯一識(shí)別每個(gè)咖啡供應(yīng)商。在 COFFEES 表中,SUP_ID 列被稱外鍵。注意每個(gè) SUP_ID 值在 SUPPLIERS 表里只出現(xiàn)一次;這對主鍵是必須的。在 COFFEES 表里,它作為外鍵,顯然它可以有重復(fù)的 SUP_ID 值,因?yàn)橥还?yīng)商可以提供很多種的咖啡。在本節(jié)的最后,你將看見如何在 SELECT 語句中使用主鍵及外鍵的一個(gè)例子。
下面的 SQL 語句用于創(chuàng)建 COFFEES 表。列由列名跟空格跟 SQL 類型組成。列(包括列名及其 SQL 類型)跟下一個(gè)之間用逗號(hào)分隔。VARCHAR 類型創(chuàng)建定義了最大長度, 因此它需要有一個(gè)參數(shù)來表示最大長度。參數(shù)必須在類型后面的括號(hào)內(nèi)。SQL 語句如下,列 COF_NAME 的長度 被限定為不得超過 32 個(gè)字符:
CREATE TABLE COFFEES
(COF_NAME VARCHAR(32),
SUP_ID INTEGER,
PRICE FLOAT,
SALES INTEGER,
TOTAL INTEGER)
這些代碼不帶 DBMS 語句結(jié)束符, 因?yàn)槊總€(gè) DBMS 都可能不同。例如, Oracle 使用一個(gè)分號(hào) (;) 作為語句的結(jié)束,而 Sybase 使用 go。你所使用的驅(qū)動(dòng)程序會(huì)自動(dòng)提供合適的語句結(jié)束符,因此你無須把它包括在你的 JDBC 代碼中。
另外,我們應(yīng)該指出的的是 SQL 語句的格式。在 CREATE TABLE 語句中,關(guān)鍵字采用大寫字符,并且每個(gè)項(xiàng)目都另起一行。SQL 并沒有此要求;僅僅是為了更容易閱讀。SQL 標(biāo)準(zhǔn)是不區(qū)分關(guān)鍵詞的大小寫的, 因此,如下例中的 SELECT 語句可以有多種寫法。因此下面兩個(gè)不同寫法的語句對 SQL 來說是一樣的。
SELECT First_Name, Last_Name
FROM Employees
WHERE Last_Name LIKE "Washington"
select First_Name, Last_Name from Employees where
Last_Name like "Washington"
然而,引號(hào)里的內(nèi)容是區(qū)分大小寫的:在名字"Washington" 里 "W" 必須被大寫,并且余下的字符必須是小寫的。
對于標(biāo)識(shí),不同的 DBMS 有不同的要求,例如, 某些 DBMSs 要求那些列名及表名必須跟創(chuàng)建時(shí)的一樣,有些則沒有此要求。為安全起見,我們?nèi)渴褂么髮憳?biāo)識(shí)如 COFFEES、SUPPLIERS,因?yàn)槲覀兪悄菢佣x他們的。
到止我們寫了創(chuàng)建 COFFEES 表的 SQL 語句。現(xiàn)在我們在它外面加上引號(hào)(使它成為字符串),并且字符串賦值給變量 createTableCoffees,在以后的 JDBC 代碼中我們可以使用此變量。正如看到的,DBMS 并不在意分行,但對 Java 語言來,String 對象分行是通不過編譯的。因而,我們可以用加號(hào) (+) 把每一行的串連接。
String createTableCoffees = "CREATE TABLE COFFEES " +
"(COF_NAME VARCHAR(32), SUP_ID INTEGER, PRICE FLOAT, " +
"SALES INTEGER, TOTAL INTEGER)";
我們在 CREATE TABLE 語句中使用的數(shù)據(jù)類型是通用的 SQL 類型(也稱 JDBC 類型)它們在類 java.sql.Types 中定義。DBMSs 通常使用這些標(biāo)準(zhǔn)的類型,因此,當(dāng)你要嘗試一些 JDBC 應(yīng)用程序時(shí),你可以直接使用 CreateCoffees.java 應(yīng)用程序,它使用了 CREATE TABLE 語句。如果你的 DBMS 使用了它的自己的本地的類型名字,我們?yōu)槟愎?yīng)其它的應(yīng)用程序,我們將在后面詳細(xì)解釋。
在運(yùn)用任何應(yīng)用程序前,當(dāng)然,我們將讓你了解 JDBC 的基礎(chǔ)。
創(chuàng)建 JDBC Statements 對象
Statement 對象用于把 SQL 語句發(fā)送到 DBMS 。你只須簡單地創(chuàng)建一個(gè) Statement 對象并且然后執(zhí)行它,使用適當(dāng)?shù)姆椒▓?zhí)行你發(fā)送的 SQL 語句。對 SELECT 語句來說,可以使用 executeQuery。要?jiǎng)?chuàng)建或修改表的語句,使用的方法是 executeUpdate。
需要一個(gè)活躍的連接的來創(chuàng)建 Statement 對象的實(shí)例。在下面的例子中,我們使用我們的 Connection 對象 con 創(chuàng)建 Statement 對象 stmt:
Statement stmt = con.createStatement();
到此 stmt 已經(jīng)存在了,但它還沒有把 SQL 語句傳遞到 DBMS。我們需要提供 SQL 語句作為參數(shù)提供給我們使用的 Statement 的方法。例如,在下面的代碼段里,我們使用上面例子中的 SQL 語句作為 executeUpdate 的參數(shù):
stmt.executeUpdate("CREATE TABLE COFFEES " +
"(COF_NAME VARCHAR(32), SUP_ID INTEGER, PRICE FLOAT, " +
"SALES INTEGER, TOTAL INTEGER)");
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -