




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第 9 章JDBC 開發(fā)環(huán)境及配置本章將為讀者在展開學習 JDBC 數(shù)據(jù)庫開發(fā)之前做一些知識上鋪墊,主要包含基本的數(shù)據(jù)庫知識和常見數(shù)據(jù)庫的配置,以及 Java 開發(fā)環(huán)境 Web 服務(wù)器配置等。如果讀者對以上知識已經(jīng)很熟悉,可以跳過本章的學習,直接進入下一章節(jié)的學。為便于理解,在這些介紹中,大部分都是以實例的方式進行。本章目標:能夠使用 JDBC 連接數(shù)據(jù)庫能夠配置 Web 應(yīng)用服務(wù)器了解 Java 開發(fā)環(huán)境Eclipse熟悉常用的 JDBC 開發(fā)調(diào)試技巧9.1使用 JDBC 連接數(shù)據(jù)庫使用 JDBC 連接并操作數(shù)據(jù)庫的過程,其實就是調(diào)用 JDBC 接口。通過對數(shù)據(jù)庫的操作,將數(shù)據(jù)庫結(jié)果封裝后返
2、回給 Java 程序,然后交給 Java 程序來處理,這個過程除了調(diào)用 JDBC接口,最重要的是數(shù)據(jù)庫操作的基本知識。9.1.1用 SQL 和 Java 建立應(yīng)用程序的基本知識通常大家說到的數(shù)據(jù)庫,其實是由數(shù)據(jù)庫及其管理組成的系統(tǒng)。數(shù)據(jù)庫系統(tǒng)是為適應(yīng)數(shù)據(jù)處理的需要而發(fā)展起來的一種較為理想的數(shù)據(jù)處理的機構(gòu)。計算機的高速處理能力和大容量器提供了實現(xiàn)數(shù)據(jù)管理自動化的條件。數(shù)據(jù)庫系組成:般由 4 個部分數(shù)據(jù)庫,即在磁帶、磁盤、光盤或其他外存介質(zhì)上,按一定結(jié)構(gòu)組織在一起的相關(guān)數(shù)據(jù)的集合。數(shù)據(jù)庫管理系統(tǒng)(DBMS),一組能完成描述、管理、數(shù)據(jù)庫的程序系統(tǒng)。它按照一種公用的和可控制的方法完成安全穩(wěn)定。數(shù)據(jù)庫
3、管理員(DBA)用戶和應(yīng)用程序新數(shù)據(jù)、修改和檢索原有數(shù)據(jù)的操作,確保數(shù)據(jù)庫的根據(jù)上面的理論,可以看出真正同 Java 程序打交道的是數(shù)據(jù)庫管理系統(tǒng)(DBMS),它提供完善的接口,讓 Java 程序可以操作一個隱藏在的數(shù)據(jù)庫,并確保該文件及其操作安全。目前常見的大型數(shù)據(jù)庫包括數(shù)據(jù)庫開發(fā)著較好的結(jié)合。SQL、 Server Oracle、 IBM DB2 等,它們均和 Java而同各類數(shù)據(jù)庫交流溝通的語句是 SQL(Structured Query Language),它是國際通用的數(shù)據(jù)庫操作語言。SQL 語言由命令、子句、運算和集合函數(shù)等。它包含三種:數(shù)據(jù)定義語言 DDL(用來建立及定義數(shù)據(jù)表、
4、字段以及索引等數(shù)據(jù)庫結(jié)構(gòu))包含令有 CREATE、DROP、ALTER。數(shù)據(jù)語言 DML(用來提供數(shù)據(jù)的查詢、排序以及篩選數(shù)據(jù)等功能)包含令有SELECT、INSERT、UPDATE、DELETE。數(shù)據(jù)控制語言 DCL 語句包含 GRANT、REVOKE。下面對以上三種語言分別舉例說明。1數(shù)據(jù)定義語言(Data Definition Language,DDL)CREATEALTERDROP(1)CREATE 語句是一個數(shù)據(jù)庫的起點。在 SQL 規(guī)定中,完整的 CREATE 語法如下:為了方便讀者理解,在實際操作中,只需要記住下面的精簡格式即可。231create table 列級完整性約束條件
5、 ,列級完整性約束條件, ;CREATE TABLE | DBF TableName1 NAME LongTableName FREE (FieldName1 FieldType (nFieldWidth , nPreci) NULL | NOT NULLCHECK lExpres1 ERROR cMessageText1 DEFAULT eExpres1PRIMARY KEY | UNIQUEREFERENTableName2 TAG TagName1 NOCPTRANS, FieldName2 ., PRIMARY KEY eExpres2 TAG TagName2|, UNIQUE eE
6、xpres3 TAG TagName3, FOREIGN KEY eExpres4 TAG TagName4 NODUPREFERENTableName3 TAG TagName5, CHECK lExpres2 ERROR cMessageText2)| FROM ARRAY ArrayName在上面的語句中是所要定義的基本表的名字,它可以由一個或多個屬性(列或域)組成。建表的同時還可以定義與該表有關(guān)的約束性條件,即表中某些屬性在數(shù)據(jù)時應(yīng)滿足的條件,如該屬性是否唯一,是否為空等。這些約束性條件自動在系統(tǒng)的數(shù)據(jù)字典里,由系統(tǒng)對數(shù)據(jù)庫數(shù)據(jù)的進行檢查。例如,通過 Create 語句創(chuàng)建一張員工表
7、Employee,它由工號 EnoEname,Esex,的屬Eage,所在部門 Edept 等 5 個屬性組成。其中工號不能為空并且是唯一標識一條性,SQL 代碼如下:其中,char(N)是字段的數(shù)據(jù)類型,而 not null 和 unique 等是對該列的數(shù)據(jù)約束,上面的語句在數(shù)據(jù)庫中執(zhí)行完成后,將生成一張名為 Employee 的表。除了建表以外,Create 語句還可以用來建立索引。通常出于性能的考慮,會為表建立索引,建立索引的語法如下:語法中的字段說明如下:索引:要創(chuàng)建的索引名稱。表:將包含該索引的現(xiàn)存表的名稱。字段:要被索引的字段名稱。如果創(chuàng)建單一字段索引,在表名稱后面的括號中列出字
8、段名;如果創(chuàng)建多重字段索引,列出包括在索引中的每一個字段的名稱。若索引為遞減排序,使用 DESC 保留字;否則,索引總是遞增排序。其中,在可選的 WITH 子句中,可以強制數(shù)據(jù)有效性規(guī)則:通過使用 DISALLOW NULL 選項來在新的索引字段中使用 Null 項。通過使用 IGNORE NULL 選項,避免在索引中包含索引字段為 Null 值的。通過使用 PRIMARY 保留字指定帶索引的字段為主鍵。表明此鍵是唯一的,所以可以省略 UNIQUE 保留字。通常,建立索引常用的格式如下:Create uniqueclusterindex232CREATE UNIQUE INDEX 索引ON 表
9、(字段 ASC|DESC, 字段 ASC|DESC, .) WITH PRIMARY | DISALLOW NULL | IGNORE NULLCreate table Employee(Eno char(5) not nulique, Ename char(20) unique,Esex char(1), Eage,Edept char(15) );說 明表級約束針對的是一整,列級約束則針對特定的列。索引可以是 unique 或者 cluster。unique 表明此索引的每個索引值只對應(yīng)唯一的一個。cluster 表示要建立的索引是聚簇索引,即按某一列建好索引后,硬盤上的數(shù)據(jù)順序也調(diào)整為按
10、這個列的順序。索引的順序和順序是一致的。(2)ALTER 語句,完整 ALTER 的語法格式如下:為方便,常用格式如下:ALTER 有三種行為,分別是:ADD:用于向表中增加新列及新列相關(guān)的完整性約束條件,需要注意的是,新的列增加成功后不帶任何數(shù)據(jù)。DROP:用來刪除指定的完整性約束條件。MODIFY:用來修改原來的列定義,包括修改列名和數(shù)據(jù)類型。修改后可能會丟失原有的數(shù)據(jù)。下面來看看如何在實際操作中使用 ALTER。針對上面創(chuàng)建的 Employee 表,做以下修改:增加員工入職時間列 EDate,其類型為日期型;刪除員工的列約束,使之可以重名;修改數(shù)據(jù)類型為 SMALL;代碼如下:233AL
11、TER TABLE Employee ADD EDate DATE; ALTER TABLE Employee MODIFY Eage SMALL;說 明是要修改的基本表的名稱。ALTER TABLEADD完整性約束 DROPMODIFY;ALTER TABLE TableName1ADD | ALTER COLUMN FieldName1FieldType (nFieldWidth , nPreci) NULL | NOT NULLCHECK lExpres1 ERROR cMessageText1 DEFAULT eExpres1PRIMARY KEY | UNIQUEREFERENTab
12、leName2 TAG TagName1 NOCPTRANS說 明上述語句中是要建立索引的表,按列名的次序排序。例如按第一列的值升序或降序排序后,再按第二列的值升序或降序排列。每個列默認的排序方式是升序(ASC),也可以指定降序(DESC)。on ,(3)DROP 語句在 SQL 中使用 DROP 語句來刪除表、索引等。刪除表的語法比較簡單,格式如下:若本表一旦被刪除,表中的數(shù)據(jù)以及在此基本表上建立的視圖和索引等都將被刪除掉,有的系統(tǒng)雖然保留了這些信息但存在不安全的。所以在刪除表的時候一定要。索引的刪除,用 Drop index 實現(xiàn),其具體格式如下:2數(shù)據(jù)語言(Data Manipulati
13、on Language,DML)(1)Select 查詢語句Select 是最常用到的 SQL 語句,它的完整語法如下:語法中的參數(shù)意釋如下: ALL 和 DISTINCT:ALL 表示全部顯示,而 DISTINCT 表示顯示時不包括重復(fù)行。 目標列表達式:對字段可使用 AVG、COUNT、SUM、M 條件表達式比較復(fù)雜一點,它包括各類型的運算符:用于比較的運算符:=、=、=、!=、AX、運算符等。用于確定范圍的運算符:BETN AND、NOT BETN AND用于確定集合的運算符:IN、NOT IN用于字符匹配的運算符:LIKE(“%”匹配任何長度,“_”匹配一個字符)、NOT LIKE用于
14、空值的運算符:IS NULL、IS NOT NULL用于子查詢的運算符:ANY、ALL、EXISTS用于集合查詢的運算符:UNION(并)、ERSECT(交)、MINUS(差)用于多重條件的運算符:AND、OR、NOT GROUP BY :按列對查詢結(jié)果分組. HAVING :分組篩選條件。 ORDER BY 列名 ASC | DESC:用于對查詢結(jié)果排序,其中 ASC 表示升序,DESC表示降序。下面用實例來說明如何使用 Select 語句。例如,查詢?nèi)绾我獜漠a(chǎn)品表(Product)里面,把字段 PRICE 大于 10 的所有找出來,查詢語句如下:以上是最簡單的查詢。下面定義 3,給出相對復(fù)
15、雜的查詢。學生表(student)字段:sno、sname、ssex、sage、sdept234SELECT * FROM Product WHERE PRICE 10;SELECT ALL|DISTINCT AS 列名, AS 列名 . FROM , WHERE AND|OR .GROUP BY 列名 HAVING ORDER BY 列名 ASC | DESCDROP index ;DROP TABLE 路徑名.表名ALTER TABLE Employee DROP UNIQUE Ename ;說 明各列的含義分別是學號、系別,其中 sno 為主鍵課程表(course)字段:、 ame、cp
16、no、ccredit說 明各項含義是課程號、課程名、選修課號、學分,其中 cno 為主鍵學生成績表(sc)字段為:、 o、score說 明各項的含義是學號、課程號、成績,主鍵為 sno 和 cno建好上面的 3 張基本表后,下面開始查詢。查詢學號中包含 5257 的學生的各科成績,代碼如下:查詢學號中為 200236007 的學生的和各科成績,代碼如下:查詢與 Leo 一個系別的所有學生信息,代碼如下:選擇學生表中所有學生的和,并將每個同學的后加上“同學”二字,并將每個人的增加 1 歲,代碼如下。(2)INSERT語句學會了 Select 語句,再來看看如何往數(shù)據(jù)庫中添加數(shù)據(jù),數(shù)據(jù)需要使用 S
17、QL 中的INSERT語句,它有兩種語法,格式如下:語法 1:語法 2:例如,向?qū)W生表中一行學生,代碼如下:往成績表中系別為 Infomation的學生和,代碼如下:235INSERTO sc (sno,sname)SELECT Sno, Sname FROM student WHERE sdept = InfomationINSERTO student(sno, sname, ssex, sage, sdept) VALUES (200236007, Leo Zhang, M, 25, Infomation)INSERTO ( , .)子查詢INSERTO ( , .) VALUES ( ,
18、 .)select sname + 同學, age+1, from studentselect * from student where class in(select class from student where name=Leo)select student.sno as 學號, as,ame as 課程名, score as 成績from sc, student, coursewhere student.sno=sc.sno ando and sc.sno = 200236007select * from sc where sno like 5257(3)UPDATE 更新語句數(shù)據(jù)后
19、,如果遇到信息變化,需要修改,這時就需要用到 Update 語句。Update 語句的語法如下:例如,如果想把電子商務(wù)課程的學分提高到 5 分,可以使用以下語句:(4)DELETE 刪除語句當某些數(shù)據(jù)不再需要時,就需要調(diào)用 DELETE 語句來刪除行。DELETE 的語法如下:例如,刪除為 200236001 的學生,代碼如下:3數(shù)據(jù)控制語言(Dontrol Language,DCL)數(shù)據(jù)控制語言(DCL)是用來設(shè)置或者更改數(shù)據(jù)庫用戶或角色權(quán)限的語句,這些語句包括GRANT、DENY、REVOKE 等語句。通常只有 sysadmin、dbcreator、db_owner 或 db_securi
20、tyadmin等角色的成員才利執(zhí)行該語言,在 Java 程序中,極少涉及到這些語句,這里只給出基本概念,讀者了解便可。(1)GRANT 語句GRANT 語句是語句,它可以把語句權(quán)限或者對象權(quán)限授予給其他用戶和角色。授予語句權(quán)限的語法格式如下:(2)DENY 語句DENY 語句用于給當前數(shù)據(jù)庫內(nèi)的用戶或者角色授予權(quán)限,并防止用戶或角色通過其組或角色成員繼承權(quán)限。否定語句權(quán)限的語法格式如下:(3)REVOKE 語句REVOKE 語句是與 GRANT 語句相反的語句,它能夠?qū)⒁郧霸诋斍皵?shù)據(jù)庫內(nèi)的用戶或者角色上授予或的權(quán)限刪除,但是該語句并不影響用戶或者角色從其他角色中作為成員繼承過來的權(quán)限。收回語句
21、權(quán)限的語法格式如下:到此,講解了數(shù)據(jù)庫的基本操作和 SQL 語句的常用方式,這部分知識是最基礎(chǔ)的數(shù)據(jù)庫操作,只有掌握這些才能利用 JDBC 操作數(shù)據(jù)庫。9.1.2SQL 和 Java 的特性首先需要解釋的一點是,這里的 SQL 是結(jié)合在數(shù)據(jù)庫編程環(huán)境的中的 SQL,例如 Oracle 的 PL/SQL。PL/SQL 是一種高級數(shù)據(jù)庫程序設(shè)計語言,PL/SQL 語言將 SQL 語言的靈活性及功能與第三代語言的可配置能力相結(jié)合方面是獨一無二的。該語言集合了面向過程語言的過程結(jié)構(gòu)和強大的數(shù)據(jù)庫操作,為設(shè)計復(fù)雜的數(shù)據(jù)庫應(yīng)用提供了功能強大、健壯安全的程序設(shè)計語言。236REVOKE ALL | seme
22、nt ,.n FROM security_account ,.n DENY ALL | sement ,.n TO security_account ,.n GRANT ALL | sement,.n TO security_account ,.n Delete from student where sno=200236001Delete from表名WHERE AND|OR .update course set ccredit = 5 where cname =電子商務(wù)UPDATE 表名SET 列名 1 = 常量表達式 1,列名 2 = 常量表達式 2 . WHERE AND|OR .PL/
23、SQL 是對結(jié)構(gòu)化查詢語言(SQL)的過程語言擴展。PL/SQL 的目的是聯(lián)合數(shù)據(jù)庫語言和過程語言。PL/SQL 的基本叫做一個區(qū)段,由 3 個部分組成:即與構(gòu)建。,可運行,和排除因為 PL/SQL 允許混合 SQL和過程結(jié)構(gòu),因此可以在將發(fā)送到 Oracle 系統(tǒng)去執(zhí)行之前使用 PL/SQL 區(qū)段和副程序來組合 SQL,沒有 PL/SQL,Oracle 就需要每次處理 SQL,在網(wǎng)絡(luò)環(huán)境中,這將影響交通流量,而且增加響應(yīng)時間。PL/SQL 區(qū)段只被編譯一次并且以可運行的形式,以降低響應(yīng)時間。有關(guān) PL/SQL 的知識,讀者可以參考相關(guān)書籍。這里不做詳細介紹。讀者理解了 PL/SQL對數(shù)據(jù)庫的
24、操作,一定會產(chǎn)生疑問,既然 PL/SQL 有足夠強壯和穩(wěn)定的能力操作數(shù)據(jù)庫,為什么還需要 Java 和 JDBC 來完成數(shù)據(jù)庫操作呢?針對以上問題,這里將 PL/SQL 和 Java 做比較,從它們各自的特點,讀者可按照不同情況,選擇合適的技術(shù)使用。PL/SQL 和數(shù)據(jù)庫緊密結(jié)合,處理 SQL 的速度遠遠大于 Java,更適用于 SQL 密集型的需求。由于 PL/SQL 對 SQL 具備自動可見性。在 PL/SQL 中,毋需任何條件,任何進程和函數(shù)在 SQL面前都是可見的。而在 Java 中,首先必須編寫對應(yīng)的調(diào)用規(guī)范,通過 JDBC 的接口才能有效地SQL。在 SQL 密集型應(yīng)用中(即需要頻
25、繁地讀寫數(shù)據(jù)表),PL/SQL 的表現(xiàn)比 Java過程好。這是由于 PL/SQL 本身源于數(shù)據(jù)庫,支持和 SQL 相同的固有數(shù)據(jù)類型。Oracle 并未在數(shù)據(jù)庫內(nèi)部直接提供對固有 Java 類型的支持。只有 SQL 類型和和對象相關(guān)的類型才能保存在數(shù)據(jù)庫內(nèi)。因此,假如需要從一個 Java過程中數(shù)據(jù)庫,Oracle 必須將 Java 類型轉(zhuǎn)換成 SQL數(shù)據(jù)類型(反之亦然)。顯然,這會造成對執(zhí)行效率的影響。而且在某些情況下,這樣的轉(zhuǎn)換還會造成速度的下降。由于 PL/SQL 類型僅適用 Oracle,這些代碼將喪失移植類型。而 Java 作為一門強壯的面象語言,具有以下優(yōu)勢:移植能力:Java過程可
26、在多家廠商的數(shù)據(jù)庫間移植。另一方面,PL/SQL 僅適用于 Oracle。從理論上說,Oracle 環(huán)境??蓪碜粤硪粋€數(shù)據(jù)庫廠商的 Java 程序方便地移植到真正的面象支持:Java 在設(shè)計之初,就被定義成一種真正的“面象”程式設(shè)計語言。PL/SQL 則不同,它最開始的時候僅僅是一種程式化的編程語言,同數(shù)據(jù)庫緊密集成,現(xiàn)在還增加了部分面提供了較多的函數(shù)庫和第象的語言特性以及豐富的庫和工具支持,Java 比 PL/SQL的研發(fā)工具支持。一種萬能語言,支持任何層面的研發(fā):Java 是一種“萬能型”語言??蛇m用于任何層面的研發(fā)例如:客戶前端的應(yīng)用程式和小程式(Applet)、服務(wù)器后端的服務(wù)器小程
27、式(Servlet)和數(shù)據(jù)庫過程等等。因此,采用 Java 編程,可有效降低培訓和開發(fā)成本。本地編譯好的庫,在那些計算密集型的應(yīng)用程式中,連同那些包含了少量數(shù)據(jù)庫讀寫操作的應(yīng)用程式中,Java代碼的運行速度都要快于對等的 PL/SQL 代碼。這是由于 Java.lang 封裝是在本地編譯好的,也就是說是“固有”的。Java過程在調(diào)用本地編譯代碼時,速度比 PL/SQL 的解釋型執(zhí)行方式快得多。所以,針對 SQL 密集型的大量數(shù)據(jù)庫操作運算,PL/SQL 是不錯的選擇。而針對大量運算237以及網(wǎng)絡(luò)分布形式程序,Java 將是更好的選擇。除此之外,Java 也正在成為過程研發(fā)最好的選擇。從 Ora
28、cle 8i 以后, Java 和 PL/SQL以前在 PL/SQL 代碼上的投資。過程相互間可以交互操作。因此,不會浪費9.1.3SQL 和 Java 的實際開發(fā)應(yīng)用實例在實際開發(fā)中,SQL 和 Java 的相用非常常見,特別是 Oracle 數(shù)據(jù)庫與 Java 語言的無縫結(jié)合作為過程的開發(fā)語言。下面舉例說明兩者如何相用。1Java 調(diào)用 SQL在 Java 語言中,為了提高程序執(zhí)行效率,不但可以選擇使用 SQL 的 CREATE、UPDATE、SELECT 和 DELETE。還可以使用 Java 的 CallableSement 接口,調(diào)用編譯好的過程。達到靈活性和高性能的結(jié)合。例如,下面
29、展示如何使用 Java 調(diào)用 PL/SQL.先編寫一段 PL/SQL。調(diào)用上面過程的 Java 代碼如下:238public sic void setDeage(Poet dyingBard,age) throws SQLException /初始化變量 Connection con=null;CallableSement proc=null; try /獲取連接con=connectionPool.getConnection(); proc=con.prepareCall( call set_death_age(?, ?) );/設(shè)置參數(shù)值proc.setString(1, dyingBar
30、d.getName(); proc.set(2, age);/執(zhí)行語句proc.execute(); finally /資源try proc.close(); catch (SQLException e) try / 創(chuàng)建名為set_death_age 的過程create procedure set_death_age (poet VARCHAR2, poet_age NUMBER)/定義變量 poet_id NUMBER;/開始執(zhí)行begin SELECT idO poet_id FROM poets WHERE name = poet;/開始INSERTO deaths (mort_id,
31、 age) VALUES (poet_id, poet_age); end set_death_age;執(zhí)行該類,在 Java 中完成了 PL/SQL 的操作。這樣就實現(xiàn)了 Java 調(diào)用 SQL。2PL/SQL 中調(diào)用 JavaOracle8i 數(shù)據(jù)庫的一個重要特點是在數(shù)據(jù)庫引擎中包含了 Java 虛擬機(JVM)。該功能使得用戶可以在數(shù)據(jù)庫中以與 PL/SQL 代碼的地位運行 Java 代碼。Java 的簡單性和可移植性不僅使 Oracle 可以很好的工作在ernet 上,而且也大大擴展了 PL/SQL 語言的能力。本實例將展示如何在 PL/SQL 中調(diào)用 Java。由于在Oracle P
32、L/SQL 的標準內(nèi)置包中沒有提做到這一點。生隨機數(shù)的函數(shù)或過程。這里借助于 Java首先,創(chuàng)建一個 Java 源對象,其中包含一個產(chǎn)生隨機數(shù)的方法,代碼如下:把 Java 代碼裝入數(shù)據(jù)庫后,還不能馬上執(zhí)行這些代碼。在 PL/SQL 中執(zhí)行一個 Java 成員方法之前,還必須用 CREATE FUNCTION 語句發(fā)布該成員方法的程序代碼(編譯源程序為字節(jié)碼),代碼如下:現(xiàn)在,就可以在 PL/SQL 中調(diào)用這個隨機函數(shù)了:這樣,就實現(xiàn)了在 PL/SQL 中調(diào)用 Java 程序。9.1.4Java 連接各類數(shù)據(jù)庫的程序代碼雖然了解了這么多 Java 和數(shù)據(jù)庫之間操作的相關(guān)理論,但還需要動手操作一
33、下連接到數(shù)據(jù)庫。下面將演示如何通過實際 Java 代碼來連接數(shù)據(jù)庫,返回需要信息,并對其進行處理。本例使用版本,建議數(shù)據(jù)庫,一直以為輕便迅速聞名,讀者可以去免安裝版本,直接解壓便可使用。具體的操作超出本書239run begindbms_output.put_line(rand);End;CREATE OR REPLACE function rand return number aslanguage Java NameclsRand.Rand() return double;create or replace JAVA SOURCE Named Js_Rand Aspublic class c
34、lsRandpublic sic double Rand() return java.lang.Math.random();con.close(); catch (SQLException e) 范圍。如果讀者有的話可以的操作手冊學習,這里只簡述操作步驟來演示如何使用 Java 連接數(shù)據(jù)庫。(1)當正確安裝后,進入所在文件下的bin 目錄,Windows 下雙擊d.exe啟動數(shù)據(jù)庫。當數(shù)據(jù)庫正常運行后,在系統(tǒng)菜單中的【運行】中輸入 cmd 命令,進入cmd 運行界面。(2)用 cd 命令進入5.1.23-rc-win32bin。安裝文件的的bin 目錄,本例中具體的路徑為:N:JDBCDE-(
35、3)使用-h localhost -u root 命令進入管理界面。說明:默認的本機登錄用戶名為 root為空。(4)使用 SHOW DATABASES ; 命名顯示當前的數(shù)據(jù)庫。(5)使用 use 命令選擇名為 test 的數(shù)據(jù)庫。(6)使用以下語句創(chuàng)建一,名為 Employee。- Edept char(15) );(7)使用 show tables 命令顯示當前數(shù)據(jù)庫的所有表。240show tables;+Query OK, 0 rows affected (0.08 sec)Create table Employee(- Eno char(10) not nulique,- Enam
36、e char(20) unique,- Esex char(1),- Eage,use test Database changedshow tables- ;Empty set (0.02 sec)SHOW DATABASES;+| Database|+| information_schema | test|+3 rows in set (0.03 sec)N:JDBCDE-5.1.23-rc-win32bysql -h localhost -u root e to themonitor.ds end with ; or g.Yourconnection id is 2Server ver:m
37、unityCommunity Server (GPType help; or h for help. Type c to clear the buffer.(8)使用 INSERT 語句一條。這樣就建立了一個可以使用的數(shù)據(jù)庫。通過以上步驟,讀者可以在實際操作中熟悉 SQL 語句的使用。下面使用 Java 連接該數(shù)據(jù)庫,獲取值。(1)編寫類 Connect,首先定義好類名和文件屬性,代碼如下:(2)編寫構(gòu)造函數(shù),加載驅(qū)動程序。241/* 數(shù)據(jù)庫驅(qū)動程序*/ public Connect() try Class.forName(dbDriver);public class Connect/* 設(shè)置
38、數(shù)據(jù)庫連接用戶名 */private String userName=root;/* 設(shè)置數(shù)據(jù)庫連接*/ private String pwd=;/* 設(shè)置數(shù)據(jù)庫 */private String database=test;/* 設(shè)置JDBC 驅(qū)動程序 */private String dbDriver=com.jdbc.Driver;/* 設(shè)置數(shù)據(jù)庫URL */private String dbConnect=jdbc:/localhost:3306/ + database; private Connection conn=null;private Sement stmt=null; Re
39、sultSet rs=null;.INSERTO employee(eno,ename,esex,eage,edept)- VALUES (200236007, Leo Zhang, M, 25, Greater China);Query OK, 1 row affected, 1 warning (0.03 sec)select * from employee;+| Eno| Ename| Esex | Eage | Edept|+| 200236007 | Leo Zhang | M| 25 | Greater China |+1 row in set (0.00 sec)注 意在中不區(qū)分
40、大小寫。| Tables_in_test |+| employee|+1 row in set (0.00 sec)(3)編寫數(shù)據(jù)的基本操作方法。(4)考慮到性能問題,JDBC 程序需要不用的資源,所以要編寫關(guān)閉方法,資源。242/* 關(guān)閉陳述語句 */public void closeStmt() try stmt.close(); catch (SQLException e) System.err.prln(closeStmt Error!);/* 關(guān)閉連接 */public void closeConn() try conn.close(); catch (SQLException e)
41、 /* 建立數(shù)據(jù)庫連接及定義數(shù)據(jù)查詢 */public ResultSet executeQuery(String sql) throws SQLException rs=null;try conn=DriverManager.getConnection(dbConnect, userName, pwd); stmt=conn.createSement();rs=stmt.executeQuery(sql); catch (SQLException ex) throw new SQLException(ex.getMessage();return rs;/* 建立數(shù)據(jù)庫連接及定義數(shù)據(jù)操作 */
42、public void executeUpdate(String sql) throws SQLException stmt=null;try conn=DriverManager.getConnection(dbConnect, userName, pwd); stmt=conn.createSement();stmt.executeUpdate(sql); catch (SQLException ex) throw new SQLException(ex.getMessage(); finally stmt.close();conn.close(); catch (java.lang.Cl
43、aotFoundException e) System.err.prln(jdbcDriver Error!);(5)編寫主函數(shù),運行程序。(6)將文件保存到某個目錄下,為了操作方便,本例放在根目錄 C 盤下面。在 cmd 中編譯該類。(7)調(diào)用下面 java 命令運行該類,獲取數(shù)據(jù)庫中的結(jié)果。結(jié)果如圖 9-1 所示:關(guān)于 Java 環(huán)境的安裝,請參考 9.2 節(jié)。圖 9-1運行結(jié)果243說 明-classpath .;N:JDBCDEDrives-connector-java-5.1.6-bin.jar用于指定 java 運行時的classpath,其中 N:JDBCDEDrives-con
44、nector-java-5.1.6-bin.jar 為驅(qū)動所在 jar 的路徑。C:java -classpath .;N:JDBCDEDrives-connector-java-5.1.6-bin.jar ConnectLeo ZhangC:javac Connect.java/* 運行程序測試代碼 */public sic void main(String args) Connectcon=new Connect();String sql=select ename from employee where eno=200236007; try ResultSet rs=con.execute
45、Query(sql); if(rs.next()System.out.prln(rs.getString(1); catch (SQLException e) / TODO Auto-generated catch block e.prStackTrace();finally con.closeStmt();con.closeConn();System.err.prln(closeConn Error!);以上程序成功實現(xiàn)了 Java 程序連接數(shù)據(jù)庫并調(diào)用其中的數(shù)據(jù)。以上代碼只需更改驅(qū)動,便可以適用于各類數(shù)據(jù)庫。這也正是 JDBC 的優(yōu)勢所在。下面給出實際的數(shù)據(jù)庫連接操作中,常用到的幾種數(shù)據(jù)庫
46、連接:1驅(qū)動程序:地址:ht-connector-java-5.1.6-bin.jar2tgreSQL驅(qū)動程序:pgjdbc2.jar地址:.tgresql.3Oracle驅(qū)動程序:classes9.zip地址:htt4Sybase驅(qū)動程序:jconn2.jar地址:5JTDS.JDBC.Driver地址:net6SQL Server地址:http:/244Class.forName( com.jdbc.sqlserver.SQLServerDriver );Class.forName( net.sourcefe.jtds.jdbc.Driver ); Connection cn=Driver
47、Manager.getConnection( jdbc:jtds:sputerNameOrIP:1433/master, sUsr, sPwd );Class.forName( com.sybase.jdbc2.jdbc.SybDriver ); Connection cn=DriverManager.getConnection(jdbc:puterNameOrIP:2638,sUsr, sPwd );Class.forName( oracle.jdbc.driver.OracleDriver ); Connection cn=DriverManager.getConnection( jdbc
48、:orputerNameOrIP:1521:ORCL, sUsr, sPwd );Class.forName( .tgresql.Driver ); Connection cn=DriverManager.getConnection( jdbc:poputerNameOrIP/myDatabaseName, sUsr, sPwd );Class.forName( com.jdbc.Driver ); Connection cn=DriverManager.getConnection( jdputerNameOrIP:3306/myDatabaseName, sUsr, sPwd );7ODBC
49、8DB29.2Web 應(yīng)用服務(wù)器Java 語言之所以如此風靡,與其穩(wěn)定、強大、方便的網(wǎng)絡(luò)應(yīng)用密不可分。這一節(jié),探討一下如何安裝主流的 Java Web 服務(wù)器。來9.2.1Tomcat 的安裝及配置一提到 Java Web 應(yīng)用服務(wù)器,Tomcat 以其免費且優(yōu)質(zhì)的服務(wù)和 Apache 的名氣成為 Java 愛好者的首選,可從 Apache Jakarta Project 站點(site/binindex.cgi)上,本書使用的 Tomcat 版本是 5.5.26,它需要安裝 J2SE 5.0(JDK 1.5)以上的版本才能運行。對于 Windows 操作系統(tǒng), Tomcat 5.5.26 提
50、供了兩 種安裝文 件,一種 是apache-tomcat-5.5.26.exe ,一種是 apache-tomcat-5.5.26.zip ( 對于 Linux 操作系統(tǒng), 請apache-tomcat-5.5.26.tar.gz)。關(guān)于 Tomcat 的使用方法參考Java 應(yīng)用服務(wù)器一書。9.2.2Js 的安裝和配置Js 的安裝和 Tomcat 比較類似,直接即可以。并且 Js 默認的 web server 就是Tomcat,所以 Js 關(guān)于 Web 的配置也和 Tomcat 類似。不同的是,Js 不單單是一個 Web 服務(wù)器,而是一個可以集成 EJB、Workflow 等重量級應(yīng)用程序的
51、一個可伸縮的。所謂可伸縮性,指的是在小型系臺服務(wù)器情況下,系統(tǒng)也可以運轉(zhuǎn);多臺服務(wù)器擴展后,系統(tǒng)只需通過增加硬件就可以實現(xiàn)性能擴展,且無需修改太多。比如,當你的 EJB 程序編制完成后,如果增加量,只要通過增加服務(wù)器硬件就可以實現(xiàn)多臺服務(wù)器同時運算,擴大了負載容量,這個性能容量的大小在理論上是沒有限制的。這是 Js 不同于 Tomcat 等的最大優(yōu)點,EJB 3.0 也將出現(xiàn)輕量化解決方案。但是隨著技術(shù)的發(fā)展,已經(jīng)模糊了輕量/重量的區(qū)別,Js 所運用的領(lǐng)域也越來越大,其伸縮性也得到了充分的體現(xiàn)。下面來講解如何安裝使用 Js。1安裝 J首先,Jss 的地址:。目前的版本為:4.2.2. GA24
52、5Class.forName(.DB2Driver);String url=jdbc:db2:/puterNameOrIP:6789/ databaseName Connection cn=DriverManager.getConnection( url, sUsr, sPwd );Class.forName( sun.jdbc.odbc.JdbcOdbcDriver );Connection cn=DriverManager.getConnection( jdbc:odbc: + sDsn, sUsr, sPwd );Connection cn=DriverManager.getConnec
53、tion( jdbc:sqlserver: /MyDb ComputerNameOrIP:1433;databaseName=master, sUsr, sPwd );完成后將其解壓縮后即可安裝。解壓縮后將其放置到一個不帶空格的目錄。例如:N:JDBCDEjs-4.2.2.GA。安裝完成后,Js 的目錄結(jié)構(gòu)如下表 9-1 所示。表 9-1Js 的目錄結(jié)構(gòu)說明2啟動 Js運行 Js 安裝目錄binrun.bat,如果窗口中沒有出現(xiàn)異常,將出現(xiàn)以下代碼:246=Js BootstrnvironmentJS_HOME: N:JDBCDEjs-4.2.2.GAJAVA: C:Program Files
54、Javajdk1.6.0binjavaJAVA_OPTS: -D=run.bat -server -Xms128m -Xmx512m -Dsun.rmi. dgc.clent.gcerval=3600000 -Dsun.rmi.dgc.server.gcerval=3600000CLASSPATH: C:Program FilesJavajdk1.6.0libtools.jar;N:JDBCDEjs-4.2.2目 錄描述bin啟動和關(guān)閉 Js 的( run.bat 為 windows 系統(tǒng)下的啟動, shutdown.bat 為 windows 系統(tǒng)下的關(guān)閉)c nt客戶端與 Js 通信所需的
55、 Java 庫( Jars )docs配置的樣本文件(數(shù)據(jù)庫配置等)docs/dtd在 Js 中使用的各種 XML 文件的 DTDlib一些 JAR , Js 啟動時加載,且被所有 Js 配置共享。(你的庫放在這里)server各種 Js 配置。每個配置必須放在不同的子目錄。子目錄的名字表示配置的名字。s 包含 3 個默認的配置:minimal,default 和 all,在安裝時可以進行選擇server/allJs 的完全配置,啟動所有服務(wù),包括集群和 IIOPserver/defaultJs 的默認配置。在沒有在 Js 命令行中指定配置名稱時使用server/default/confJs
56、的配置文件server/defauataJs 的數(shù)據(jù)庫文件。比如,嵌入的數(shù)據(jù)庫或者 JsMQserver/default /deployJs 的熱部署目錄。放到這里的任何文件或目錄會被 Js 自動部署。EJB、WAR、EAR,甚至服務(wù)server/default /lib對于一些 JAR ,Js 在啟動特定配置時需要加載。(default 和 minimial 配置也包含這個和下面兩個目錄)server/default/logJs 的日志文件server/default/tmpJs 的臨時文件注 意若目錄帶有空格,例如:C:Program Files,以后可能會產(chǎn)生一些莫名的錯誤。此時,表示安
57、裝成功,如圖 9-2 所示??梢酝ㄟ^:進入 Js 的歡迎界面,單擊【J此界面可以對 Js Management】下的【JMX Console】可進入 Js 控制臺進行配置。s 的控制臺。如圖 9-3 所示,圖 9-2Js 歡迎界面圖 9-3Js 控制臺s 服務(wù)器。運行 Js 安裝目錄binshutdown.bat 即可以關(guān)閉 J3Jboos 配置由于 J說明。s 的配置涉及到各類的插件及應(yīng)用服務(wù),這里只針對其中一些常用的配置給出1日志文件設(shè)置若需要修改 Js 默認的 log4j 設(shè)置,可修改 Js 安裝目錄serverdefaultconf 下的js-log4j.xml 文件,在該文件中可以看
58、到,log4j 的日志輸出在 Js 安裝目錄serverdefaultlog下的 server.log 文件中。對于 log4j 的設(shè)置,讀者可以在網(wǎng)上搜索更加詳細的信息。2Web 服務(wù)端的修改修改 J容如下:s 安裝目錄下的serverdefaueployjs-web.deployer 下的 server.xml 文件,內(nèi)247GAbinrun.jar=14:25:09,015 INFO Server Starting Js (MX MicroKernel).14:25:09,015 INFO Server Release ID: Js Trinity 4.2.2.GA (build: SV
59、NTag Js_4_2_2_GA date=200710221139)14:25:09,015 INFO Server Home Dir: N:JDBCDEjs-4.2.2.GA14:25:09,015 INFO Server Home URL: file:/N:/JDBCDE/js-4.2.2.GA/.14:25:40,000 INFO AjpProtocol Starting Coyote AJP/1.3 on ajp-8009 14:25:40,046 INFO Server Js (MX MicroKernel) 4.2.2.GA (build:SVNTag=Js_4_2_2_GA d
60、ate=200710221139) Started in 31s:15ms將上面的 8080 端口修改為你想要的端口即可。重新啟動 Js 后::新設(shè)置的端口,可進入 Js 的歡迎界面。3配置數(shù)據(jù)庫連接池這里以要在 J為例,講解如何在 Js 環(huán)境中配置一個數(shù)據(jù)庫連接池。s4 中使用,首先要把的 JDBC 驅(qū)動-ds.xml 到/server/defau到/server/default/lib 目錄eploy 目錄。拷貝完成下,再從/docs/exles/jca 目錄下,拷貝后,修改默認設(shè)置。修改步驟如下:(1)修改- ds.xml 文件,設(shè)置為(2)把設(shè)置為jdbc:/說 明其中是數(shù)據(jù)庫主機名,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 遼寧省沈陽市皇姑區(qū)重點達標名校2025屆中考一模生物試題含解析
- 江西省贛州市贛州七中學2025屆中考生物押題試卷含解析
- 廣西柳州市柳江區(qū)重點名校2025屆中考四?;瘜W試題含解析
- 安徽省明光市2025屆十校聯(lián)考最后生物試題含解析
- 甘肅省天水市秦安縣2025屆中考生物模擬試卷含解析
- 新土建質(zhì)量員個人工作計劃
- 產(chǎn)品質(zhì)量管理與生產(chǎn)流程優(yōu)化
- 酒店領(lǐng)導工作計劃
- 擔保公司出納工作計劃
- 《我國中小企業(yè)薪酬激勵機制研究-以定西市定西扶正藥業(yè)公司為例9700字》
- GB/T 8813-2020硬質(zhì)泡沫塑料壓縮性能的測定
- GB/T 15057.2-1994化工用石灰石中氧化鈣和氧化鎂含量的測定
- 文房四寶之紙文化課件
- 事故應(yīng)急預(yù)案演練流程圖
- 潔凈廠房監(jiān)理實施細則
- 三輥卷板機設(shè)計方案
- 完整版漢語語法知識課件
- 2022年山東交通職業(yè)學院單招綜合素質(zhì)考試筆試試題及答案解析
- 導游業(yè)務(wù)說課匯報課件
- 中醫(yī)美容-課件
- 中國地圖PPT素材 (2)講稿
評論
0/150
提交評論