版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、網(wǎng)絡(luò)數(shù)據(jù)庫課程講稿(趙晨)第一部分:網(wǎng)絡(luò)數(shù)據(jù)庫理論第一節(jié):數(shù)據(jù)庫設(shè)計過程數(shù)據(jù)庫技術(shù)是信息資源管理最有效的手段。數(shù)據(jù)庫設(shè)計是指對于一個給定的應(yīng)用環(huán)境,構(gòu)造最優(yōu)的數(shù)據(jù)庫模式,建立數(shù)據(jù)庫及其應(yīng)用系統(tǒng),有效存儲數(shù)據(jù),滿足用戶信息要求和處理要求。數(shù)據(jù)庫設(shè)計過程主要包含一下幾個主要的過程:需求分析階段綜合各個用戶的應(yīng)用需求(現(xiàn)實世界的需求),在概念設(shè)計階段形成獨立于機器特點、獨立于各個DBMS產(chǎn)品的概念模式(信息世界模型),用E-R圖來描述。邏輯設(shè)計階段將E-R圖轉(zhuǎn)換成具體的數(shù)據(jù)庫產(chǎn)品支持的數(shù)據(jù)模型如關(guān)系模型,形成數(shù)據(jù)庫邏輯模式。然后根據(jù)用戶處理的要求,安全性的考慮,在基本表的基礎(chǔ)上再建立必要的視圖(VI
2、EW)形成數(shù)據(jù)的外模式。物理設(shè)計階段根據(jù)DBMS特點和處理的需要,進行物理存儲安排,設(shè)計索引,形成數(shù)據(jù)庫內(nèi)模式。第二節(jié):關(guān)系模型關(guān)系模型是關(guān)系數(shù)據(jù)庫的基礎(chǔ),它利用關(guān)系來描述現(xiàn)實世界。而一個關(guān)系可以用來描述實體及其屬性,也可用來描述實體間的聯(lián)系。以用戶的觀點來看,一個關(guān)系就是一張二維表。概念模型中關(guān)系理論中關(guān)系數(shù)據(jù)庫中某些軟件中實體集(Entity set)關(guān)系(relation)表(Table)表(或數(shù)據(jù)庫文件)實體(Entity)元組(Tuple)行(Row)記錄(Recode)屬性(Attribute)屬性(Attribute)列(Col)字段(Field)主碼(Primary key)主
3、碼(Primary key)關(guān)鍵字(Primary key)關(guān)鍵字(Primary key)關(guān)系的特點:§ 關(guān)系的每一行定義實體集的一個實體,每一列定義實體的一個屬性。§ 每一行必須有一個主碼,主碼是一個屬性組(可以是一個屬性),它能惟一的標識一個實體。§ 每一列表示一個屬性,且列名不能重復(fù)。§ 列的每個值必須與對應(yīng)屬性的類型相同。§ 列有取值范圍,稱為域。§ 列是不可分割的最小數(shù)據(jù)項。§ 行、列的順序?qū)τ脩魺o關(guān)緊要。關(guān)系中的術(shù)語§ 候選碼(Candidate Key) 若關(guān)系中的某一屬性組(或單個屬性)的值能惟一
4、的標識一個元組,則稱該屬性組(或?qū)傩裕楹蜻x碼。一般選擇一個候選碼作為關(guān)系的主碼。§ 主屬性(Prime Attribute)和非主屬性 關(guān)系中包含在任何一個候選碼中的屬性稱為主屬性。不包含在任何一個候選碼中的屬性稱為非主屬性。§ 設(shè)F是基本關(guān)系R的一個或一組屬性,但不是關(guān)系R的主碼(或候選碼)。如果F與基本關(guān)系S的主碼KS相對應(yīng),則稱F是基本關(guān)系R的外碼,并稱基本關(guān)系R為參照關(guān)系,稱基本關(guān)系S為被參照關(guān)系。關(guān)系模型中的三類完整性約束§ 實體完整性規(guī)則:若屬性A是關(guān)系R的主屬性,則A不能取空值。§ 參照完整性規(guī)則: 若屬性(或?qū)傩越M)F是基本關(guān)系R的外碼
5、,它與基本關(guān)系S的主碼KS相對應(yīng),則對于R中的每個元組在F上的值必須滿足:或者取空值(F的每個屬性均為空值),或者等于S中某個元組的主碼值。例如:在授課系統(tǒng)的關(guān)系模型中:課程(課號,課名,學(xué)分) 課號關(guān)系課程的主碼教師(工號,姓名,職稱,課號) 課號是關(guān)系教師的外碼參考書(書號,書名,課號)關(guān)系教師是參照關(guān)系,關(guān)系課程是被參照關(guān)系。在授課系統(tǒng)的關(guān)系模型中,關(guān)系教師中的外碼“課號”只能是下面兩類值: (1) 空值。表示還未給該教師安排課。 (2) 非空值,但此值必須為被參照關(guān)系課程中某一門課程的“課號”§ 用戶定義的完整性規(guī)則:用戶定義的完整性就是針對某一具體要求來定義的約束條件,它反
6、映某一具體應(yīng)用所涉及的數(shù)據(jù)必須滿足的語義要求。例如,某個屬性必須取惟一值;某些屬性之間應(yīng)滿足一定的函數(shù)關(guān)系;某個屬性在一定的取值范圍之間等。關(guān)系模型應(yīng)提供定義和檢驗這類完整性的機制,以便系統(tǒng)用統(tǒng)一的方法處理它們,而不需要由應(yīng)用程序來承擔這一功能。完整性規(guī)則檢查:為了維護數(shù)據(jù)庫中數(shù)據(jù)的完整性,在對關(guān)系數(shù)據(jù)庫執(zhí)行插入、刪除和修改操作時,就要檢查是否滿足以上三類完整性規(guī)則。§ 當執(zhí)行插入操作時:首先檢查實體完整性規(guī)則,插入行的主碼屬性上的值,是否已經(jīng)存在。若不存在,可以執(zhí)行插入操作;否則不可以執(zhí)行插入操作。再檢查參照完整性規(guī)則,如果是向被參照關(guān)系插入,不需要考慮參照完整性規(guī)則;如果是向參照
7、關(guān)系插入,插入行在外碼屬性上的值是否已經(jīng)在相應(yīng)被參照關(guān)系的主碼屬性值中存在。若存在,可以執(zhí)行插入操作;否則不可以執(zhí)行插入操作,或?qū)⒉迦胄性谕獯a屬性上的值改為空值后再執(zhí)行插入操作(假定該外碼允許取空值)。最后檢查用戶定義完整性規(guī)則,檢查被插入的關(guān)系中是否定義了用戶定義完整性規(guī)則,如果定義了,檢查插入行在相應(yīng)屬性上的值是否符合用戶定義完整性規(guī)則。若符合,可以執(zhí)行插入操作;否則不可以執(zhí)行插入操作。§ 當執(zhí)行刪除操作時:一般只需要檢查參照完整性規(guī)則。如果是刪除被參照關(guān)系中的行,則應(yīng)檢查被刪除行在主碼屬性上的值是否正在被相應(yīng)的參照關(guān)系的外碼引用,若沒被引用,可以執(zhí)行刪除操作,若正在被引用,有三
8、種可能的做法:不可以執(zhí)行刪除操作(拒絕刪除),或?qū)⒄贞P(guān)系中相應(yīng)行在外碼屬性上的值改為空值后再執(zhí)行刪除操作(空值刪除),或?qū)⒄贞P(guān)系中相應(yīng)行一起刪除(級聯(lián)刪除)。§ 當執(zhí)行修改操作時:因為修改操作可看成先執(zhí)行刪除操作,再執(zhí)行插入操作,因此是上述兩種情況的綜合。52 / 52文檔可自由編輯打印第二部分:數(shù)據(jù)庫的基本操作第一節(jié):SQL SERVER2000數(shù)據(jù)庫一、數(shù)據(jù)庫的安裝(提供個人版的安裝程序,運行安裝程序,打補丁SP4(SQL2000-KB884525-SP4-x86-CHS.EXE),可能出現(xiàn)的問題:安裝SQL Server2000個人版時出現(xiàn)錯誤提示:說是以前安裝的某個程序使
9、文件掛起,必須重新啟動。解決方法:在注冊表編輯器里依次展開HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession Manager 然后選中Session Manager,在右邊窗格中找到 Pending 鍵值,將其刪除。)超級用戶是sa,設(shè)置口令(12345678),默認端口號:1433。二、數(shù)據(jù)庫的使用1、 啟動SQL SERVER 2000數(shù)據(jù)庫(用SQL Server服務(wù)管理器啟動,或啟動SQL Server進程)2、 打開SQL Server Enterprise Manager一般需要操作的內(nèi)容:1)建立一個你的數(shù)據(jù)庫(如myd
10、b)也可以用SQL 語句,如CREATE DATABASE MyDb;DROP DATABASE MyDb;2)對mydb數(shù)據(jù)建立一個登錄用戶,設(shè)置它的登陸屬性(密碼,權(quán)限,默認語言和數(shù)據(jù)庫等,如登錄用戶zhaoc,口令111111)3)用建立的登錄用戶登錄SQL查詢分析器4)在登錄的SQL查詢分析器,練習(xí)SQL 語句的使用(要學(xué)會使用SQL Server聯(lián)機叢書)² 建表:如創(chuàng)建“學(xué)生表”student,它由學(xué)號id、姓名name、性別sex、班級號class、出生日期birthday等5個屬性組成。其中學(xué)號不能為空,值必須惟一,且姓名也必須惟一和非空。 CREATE TABLE
11、student ( id CHAR(8) NOT NULL PRIMARY KEY, name VARCHAR(20) NOT NULL, sex CHAR(4) DEFAULT '男' NOT NULL, class CHAR(8), birthday SMALLDATETIME)CREATE TABLE class (id CHAR(8) NOT NULL UNIQUE, classname VARCHAR(20) NOT NULL, grade VARCHAR(10)² 建索引:CREATE UNIQUE INDEX stuid_ind ON student(i
12、d ASC)² 刪除表DROP TABLE student² 插入記錄:INSERT INTO student (id, name, sex, class, birthday) VALUES ('','張三', '男', '軟件工程', '1998-01-02 ')INSERT INTO class (id, classname, grade) VALUES ('1', '軟件工程', '1年級 ')² 修改記錄:UPDATE stude
13、nt SET birthday='1988-10-02 ' WHERE id=''² 刪除記錄:DELETE FROM student WHERE id=''DELETE FROM student 注意:刪除所有記錄,是清空表中數(shù)據(jù),因此不加WHERE子句。這類操作的執(zhí)行應(yīng)非常小心。² 數(shù)據(jù)查詢:SELECT語句的含義是,根據(jù)WHERE子句指定的條件,從FROM子句后面的基本表或視圖中找出滿足條件的記錄,再按照SELECT子句指定的目標列表達式,選出這些記錄相應(yīng)的列形成結(jié)果集返回。其中,SELECT子句和FROM子句是必選的,
14、而WHERE子句、GROUP BY子句、HAVING子句以及ORDER BY子句都是可選的。例如:SELECT id,name,birthday FROM student WHERE class='軟件工程'² 創(chuàng)建視圖:視圖不包含任何數(shù)據(jù),只是定義在一個或多個基表上或其他視圖上,并且提供一種訪問基表數(shù)據(jù)的方法。在物理磁盤上存儲的有關(guān)視圖的信息是:視圖的名稱和視圖的定義。視圖的所有數(shù)據(jù)來自基本表。因此,當基本表的數(shù)據(jù)發(fā)生變化時,對應(yīng)視圖中的查詢出的數(shù)據(jù)也會隨之變化。視圖一經(jīng)定義,就可以象基本表一樣執(zhí)行查詢、刪除等操作,也可以在視圖上定義新的視圖,但對視圖的更新操作則有
15、一定限制。例如:CREATE VIEW student_view AS SELECT student.id, , student.sex, student.class, student.birthday, class.grade FROM student, class WHERE student.class = class.classname² 創(chuàng)建存儲過程:存儲過程是保存起來的可以接受和返回用戶提供的參數(shù)的 Transact-SQL 語句的集合??梢詣?chuàng)建一個過程供永久使用,或在一個會話中臨時使用(局部臨時過程),或在所有會話中臨時使用(全局臨時過程)。如:下
16、面的存儲過程au_info從student_view視圖中返回指定的性別作者、年級的所有人員。該存儲過程接受與傳遞的參數(shù)精確匹配的值。USE mydbIF EXISTS (SELECT name FROM sysobjects WHERE name = 'au_info' AND type = 'P') DROP PROCEDURE au_infoGOUSE mydbGOCREATE PROCEDURE au_info first_para varchar(4), second_para varchar(10) AS SELECT * FROM student_
17、view WHERE sex = first_para AND grade = second_paraGO執(zhí)行該存儲過程EXECUTE au_info '男', '1年級'² 創(chuàng)建觸發(fā)器:觸發(fā)器是一種特殊的存儲過程,在用戶試圖對指定的表執(zhí)行指定的數(shù)據(jù)修改語句時自動執(zhí)行。一般允許為任何給定的 INSERT、UPDATE 或 DELETE 語句創(chuàng)建多個觸發(fā)器。如:下面的觸發(fā)器reminder在表student的INSERT, UPDATE, DELETE過程顯示表的所有信息。USE mydbIF EXISTS (SELECT name FROM sysob
18、jects WHERE name = 'reminder' AND type = 'TR') DROP TRIGGER reminderGOCREATE TRIGGER reminderON studentFOR INSERT, UPDATE, DELETE AS SELECT * FROM studentGO5)SQL SERVER2000數(shù)據(jù)庫的備份與恢復(fù):第二節(jié):MY SQL數(shù)據(jù)庫MYSQL是最流行的開放源碼SQL關(guān)系數(shù)據(jù)庫管理系統(tǒng),目前有大量可用的共享MYSQL軟件。2008年被SUN公司收購,可從下載。一、數(shù)據(jù)庫的安裝(SUN,提供MySQL_5_1_
19、28的安裝程序,提供Navicat mysql數(shù)據(jù)庫管理軟件 V8.2.11 簡體中文特別版管理軟件)超級用戶是root,設(shè)置口令(缺省為空,這里設(shè)置為12345678),默認端口號:3306。二MYSQL的使用:系統(tǒng)缺省提供二個工具MySQL Command Line Client、MySQL Server Instance Config Wizard。(1)MySQL Command Line Client:一些常用的命令:C:Mysql5.0bin>mysql -h localhost -u root -p 啟動mysql數(shù)據(jù)庫服務(wù)器Show databases; 顯示數(shù)據(jù)庫Cre
20、ate database name; 創(chuàng)建數(shù)據(jù)庫Use databasename; 選擇數(shù)據(jù)庫Show tables; 顯示表Showevents; 顯示事件describe tablename; 表的詳細描述select version(),current_date; 顯示當前mysql版本和當前日期 Quit; 退出(2)MySQL Server Instance Config Wizard:配置管理MYSQL數(shù)據(jù)庫(注意,一般選擇簡體中文字符集gb2312)三、Navicat 8.2 for MySQL的使用:管理用戶:增加zhaoc用戶,賦予相應(yīng)權(quán)限,口令111111,建立數(shù)據(jù)庫aa。
21、對數(shù)據(jù)庫的操作舉例:CREATE TABLE student ( id CHAR(8) NOT NULL PRIMARY KEY, name VARCHAR(20) NOT NULL, sex CHAR(4) DEFAULT '男' NOT NULL, class CHAR(8), birthday DATETIME) ENGINE=InnoDB DEFAULT CHARSET=GB2312;INSERT INTO student (id, name, sex, class, birthday) VALUES ('','張三', '男
22、39;, '軟件工程', '1998-01-02 ');- - Table structure for user- -DROP TABLE IF EXISTS user;CREATE TABLE user ( id bigint(40) NOT NULL AUTO_INCREMENT, name varchar(40) NOT NULL, pass varchar(40) DEFAULT NULL, email varchar(40) DEFAULT NULL, question varchar(40) DEFAULT NULL, answer varchar(
23、40) DEFAULT NULL, oicq 避過 bigint(40) DEFAULT NULL, icq bigint(40) DEFAULT NULL, msn varchar(40) DEFAULT NULL, url varchar(40) DEFAULT NULL, PRIMARY KEY (id) ENGINE=InnoDB DEFAULT CHARSET= GB2312;DROP TABLE IF EXISTS 儲戶基本信息,儲戶動態(tài)信息,儲蓄所,存取款;DROP VIEW IF EXISTS 存取款視圖;CREATE TABLE 儲戶基本信息 ( 賬號 char (15) N
24、OT NULL ,姓名 char (16) NULL ,電話 char (16) NULL ,地址 char (30) NULL ,開戶行 char (10) NOT NULL ,開戶日期 datetime NOT NULL, PRIMARY KEY(賬號) )ENGINE=InnoDB DEFAULT CHARSET=GB2312; INSERT INTO 儲戶基本信息 (賬號, 姓名,電話,地址,開戶行,開戶日期) VALUES ('123', '王三','27830873','42','1204','
25、2010-07-06 14:40:17');CREATE TABLE 儲戶動態(tài)信息 ( 賬號 char (15) NOT NULL ,密碼 char (6) NULL , 信譽 int NULL ,存款額(元) decimal(12,2) NULL , 狀態(tài) int NULL , PRIMARY KEY(賬號) )ENGINE=InnoDB DEFAULT CHARSET=GB2312; INSERT INTO 儲戶動態(tài)信息 (賬號, 密碼,信譽,存款額(元),狀態(tài)) VALUES ('123', '*','1','3000.50
26、','1');CREATE TABLE 儲蓄所 ( 編號 char (15) NOT NULL ,名稱 char (30) NOT NULL ,電話 char (16) NULL ,地址 char (30) NOT NULL , PRIMARY KEY(編號) )ENGINE=InnoDB DEFAULT CHARSET=GB2312; INSERT INTO 儲蓄所 (編號, 名稱,電話,地址) VALUES ('12001', '杭州文一路分理處','23456664','杭州文一路');CREATE
27、TABLE 存取款 ( 賬號 char (15) NOT NULL , 編號 char (15) NOT NULL ,標志 int NOT NULL ,金額(元) decimal(12,2) NOT NULL ,日期 datetime NOT NULL, PRIMARY KEY(賬號,編號,日期) )ENGINE=InnoDB DEFAULT CHARSET=GB2312; INSERT INTO 存取款 (賬號, 編號,標志,金額(元),日期) VALUES ('12001', '0001','1','3000.51',now(
28、);INSERT INTO 存取款 (賬號, 編號,標志,金額(元),日期) VALUES ('12001', '0002','1','3000.52',now();/*UPDATE 存取款 SET 標志=0 WHERE 賬號='12001'DELETE FROM 存取款 WHERE 編號='0001'*/SELECT * FROM 存取款 WHERE 賬號='12001'CREATE VIEW 存取款視圖 AS SELECT * FROM 存取款 WHERE 賬號='120
29、01'事件管理:MySQL的事件特性是一個相當有用的特性,特別對于MySQL單機和集群的數(shù)據(jù)庫管理員DBA,相信是DBA必定要掌握的知識。也肯定當MySQL的DBA學(xué)習(xí)完了這個特性后,將這個特性用好,可以給自己省下60的工作量。(1)定義事件CREATE EVENTIF NOT EXISTS /* 如果這個對象已經(jīng)存在那么就不管它,如果沒有就創(chuàng)建一個。 */event_name /* 事件名稱,名稱最大長度可以是64個字節(jié),可以通過單引號限定 */ON SCHEDULE schedule /* 計劃任務(wù)有兩種設(shè)定計劃任務(wù)的方式:AT 時戳 /* "單次的計劃任務(wù)"
30、、EVERY 時間(單位)的數(shù)量 時間單位 STARTS 時戳 ENDS時戳"重復(fù)的計劃任務(wù)" */ /* 例如:CREATE EVENT TransientON SCHEDULE AT NOW()DO SET a=a;CREATE EVENT Oneday_EventON SCHEDULE EVERY 1 DAYDO SET a=a;CREATE EVENT RecurringON SCHEDULE EVERY 1 YEAR STARTS NOW() ENDS NOW()DO SET a=a;巧妙的制定時間計劃(Schedules) "every Tuesday
31、 at 3pm starting next Tuesday" /*下周起每個周二下午三點執(zhí)行*/ "on the last day of each month" /*每月最后一天*/ "whenever user JOE is connected" /*當用戶Joe登陸的時候*/*/ON COMPLETION NOT PRESERVE /* 這里COMPLETION的意思是"當這個事件不會再發(fā)生的時候",即當單次計劃任務(wù)執(zhí)行完畢后或當重復(fù)性的計劃任務(wù)執(zhí)行到了ENDS階段。而聲明PRESERVE的作用是使事件在執(zhí)行完畢后不會被
32、Drop掉。提示: 基本不需要試用這個語句。*/ENABLE | DISABLE /* 設(shè)定事件的狀態(tài)*/COMMENT 'comment'/* 注釋會出現(xiàn)在元數(shù)據(jù)中,它存儲在information_schema表的COMMENT列,最大長度為64個字節(jié)。*/DO sql_statement /*每當事件被執(zhí)行的時候,系統(tǒng)就會執(zhí)行這個部分的SQL語句 */ (2)刪除事件DROP EVENT /*刪除事件*/DROP EVENTIF EXISTSevent_name;(3)事件的權(quán)限設(shè)定The EVENT privilege /*Event 的權(quán)限設(shè)定*/GRANT EVENT
33、 ON *.* TO user;orGRANT EVENT ON database_name.* TO user;REVOKE EVENT ON *.* FROM user;orREVOKE EVENT ON database_name.* FROM user;第三部分:鏈接數(shù)據(jù)庫鏈接數(shù)據(jù)庫,一般要加載不同數(shù)據(jù)庫的驅(qū)動程序什么是數(shù)據(jù)庫的驅(qū)動程序:在Web 應(yīng)用程序和數(shù)據(jù)庫之間充當解釋器的軟件。數(shù)據(jù)庫中的數(shù)據(jù)是以專用格式存儲的。數(shù)據(jù)庫驅(qū)動程序使Web 應(yīng)用程序可以讀取和操作本來無法解密的數(shù)據(jù)。最基本的交互模式如下:應(yīng)用程序 <-> 數(shù)據(jù)庫驅(qū)動程序 <-> 數(shù)據(jù)庫服務(wù)。以下
34、是常用的連接訪問數(shù)據(jù)庫的方法:1.通過嵌入式SQL訪問數(shù)據(jù)庫; 2.通過PL/SQL編寫存儲過程訪問數(shù)據(jù)庫; 3.通過ODBC訪問數(shù)據(jù)庫; 4.通過JDBC訪問數(shù)據(jù)庫; 5.通過jdbc-odbc橋連接數(shù)據(jù)庫; 6.通過Tomcat連接池連接數(shù)據(jù)庫; 7.通過webLogic連接池連接數(shù)據(jù)庫; 8.應(yīng)用Hibernate連接數(shù)據(jù)庫;以上6、7、8其實都是用的jdbc,只是這些中間件軟件對其進行了封裝。第一節(jié):通過ODBC訪問數(shù)據(jù)庫ODBC(Open Database Connectivity,開放數(shù)據(jù)庫互連)提
35、供了一種標準的API(應(yīng)用程序編程接口)方法來訪問DBMS(Database Management System)。這些API利用SQL來完成其大部分任務(wù)。ODBC本身也提供了對SQL語言的支持,用戶可以直接將SQL語句送給ODBC。 ODBC的設(shè)計者們努力使它具有最大的獨立性和開放性:與具體的編程語言無關(guān),與具體的數(shù)據(jù)庫系統(tǒng)無關(guān),與具體的操作系統(tǒng)無關(guān)。在微軟的WINDOWS操作系統(tǒng)中,提供ODBC數(shù)據(jù)庫管理器,通過配置不同的DNS來訪問數(shù)據(jù)庫。(用戶DSN:用戶數(shù)據(jù)源存儲了如何與指定數(shù)據(jù)提供者連接得信息,只對當前用戶可見,而且只能用于當前機器上;系統(tǒng)DSN:存儲了如何與指定數(shù)據(jù)提供者連接得信
36、息,對當前機器上得所有用戶可見,包括NT服務(wù))。(1) 練習(xí)通過配置系統(tǒng)DSN來鏈接SQLServer 2000數(shù)據(jù)庫(如配置數(shù)據(jù)源mydb,連接SQLServer 2000的mydb數(shù)據(jù)庫,注意操作系統(tǒng)自帶SQLServer 2000的ODBC驅(qū)動程序。(2) 加載MYSQL5.1驅(qū)動程序(自安裝的驅(qū)動程序mysql-connector-odbc-51.1.5-win32.msi,配置相應(yīng)數(shù)據(jù)源)第二節(jié):通過JDBC訪問數(shù)據(jù)庫Java Database Connectivity,簡稱JDBC,是Java語言中用來規(guī)范客戶端程序如何來訪問數(shù)據(jù)庫的應(yīng)用程序接口。在java程序中(包括JSP,Ja
37、vaBean等,已建立JVM環(huán)境),通過JDBC訪問數(shù)據(jù)庫有如下步驟:前期準備:安裝java JDK以及正確設(shè)置CLASSPATH系統(tǒng)變量到 官方網(wǎng)站,根據(jù)不同的操作系統(tǒng),下載相應(yīng)的J2SE JDK 版本 (提供jdk-1_5_0_11版本和j2eesdk-1_4_03版本安裝程序)。假定我們把JDK安裝到C:Program FilesJavajdk ,安裝NetBeans5.5。2.1 設(shè)置path在我的電腦上右擊,選擇屬性。再選擇高級-環(huán)境變量,在系統(tǒng)變量中添加一個新的變量JAVA_HOME=C:Program FilesJavajdk,然后再編輯path變量,在原來的path前面添加 %
38、JAVA_HOME%BIN; (方框中的文字)。這樣就完成了JAVA的基本設(shè)置。為了幫助理解,hello.java 的小程序來顯示。public class hello public static void main(String args) System.out.println("Hello"); System.out.println("The Classpath are:"); System.out.println(System.getProperty("java.class.path"); 用下面的兩條命令分別編譯和運行。jav
39、ac hello.javajava hello2.2 設(shè)置classpath首先添加一個CLASSPATH的系統(tǒng)變量。rt.jar 和 tools.jar 是基本庫,如果我們要編譯servlet 那么只要servlet-api.jar 和 jsp-api.jar 就可以實現(xiàn)基本的需要了。.;%JAVA_HOME%bin;%JAVA_HOME%lib;%JAVA_HOME%jrelib;%JAVA_HOME%jrelibmysql-connector-java-5.1.6-bin.jar;%JAVA_HOME%librt.jar;%JAVA_HOME%libtools.jar;%JAVA_HOM
40、E%libjconsole.jar;D:javalibmssqlserver.jar;D:javalibmsbase.jar;D:javalibmsutil.jar;D:javalibjtds.jar;D:javalibmysql-connector-java-5.1.6-bin.jar;%CATALINA_BASE%commonlibservlet.jar (可在DOS狀態(tài)下通過SET CLASSPATH查看classpath)在實際應(yīng)用過程中,當需要添加的jar 文件過多時,管理java 類庫變得很麻煩。所以我認為在基礎(chǔ)學(xué)習(xí)時用命令行編譯調(diào)試,有利于JAVA的學(xué)習(xí),但是到開發(fā)時則一定要用到
41、 IDE 工具(現(xiàn)在比較流行的是eclipse 和 netbeans ,還有些人喜歡 jcreator) 。(1) 將數(shù)據(jù)庫的JDBC驅(qū)動加載到classpath中,在基于J2EE的WEB應(yīng)用實際開發(fā)過程中,通常要把目標數(shù)據(jù)庫產(chǎn)品的JDBC驅(qū)動復(fù)制到WEB-INF/lib下,裝載并注冊數(shù)據(jù)庫的JDBC驅(qū)動程序(后續(xù)課程再介紹):加載JDBC驅(qū)動,并將其注冊到DriverManager中,下面是一些主流數(shù)據(jù)庫的JDBC驅(qū)動加裁注冊的代碼: 以下是幾種jdbc驅(qū)動裝載方法:
42、60; 1) 裝載 JDBC-ODBC Driver :Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");/jdk中自帶,默認已經(jīng)注冊,不用再注冊舉例:import java.sql.*;public class myconnpublic static void main(String args)String driver = "sun.jdbc.odbc.JdbcOdbcDriver"/指定jdbc-odbc驅(qū)動程序String connStr = "jdbc:odbc:mydb
43、" /指定URL數(shù)據(jù)源String userName = "zhaoc" /指定登錄用戶String userPwd = "111111"/指定登錄口令Connection con = null;/定義Connection對象Statement stm = null;/定義Statement對象tryClass.forName(driver).newInstance();System.out.println("成功加載的驅(qū)動程序");con = DriverManager.getConnection(connStr, use
44、rName, userPwd);/通過ODBC-JDBC鏈接SQL SERVER 2000的mydb數(shù)據(jù)庫if (!con.isClosed()System.out.println("數(shù)據(jù)庫注冊成功!");stm = con.createStatement();/創(chuàng)建Statement對象String sql1 = "insert into student(id,name,sex,class,birthday) values('','李四','男','軟件工程','1998-01-03'
45、;)"/數(shù)據(jù)庫插入一條記錄stm.executeUpdate(sql1);ResultSet rs=stm.executeQuery("select * from student"); while(rs.next() String title="ID號:"+rs.getString("id")+"姓名"+rs.getString("name")+"性別"+rs.getString("sex")+"專業(yè)"+rs.getStrin
46、g("class")+"出生年月"+rs.getString("birthday"); System.out.println(title); stm.close();con.close();catch(Exception e)System.out.println("數(shù)據(jù)操作失?。?quot;+driver);e.printStackTrace(); 2) 裝載 JDBC Driver :Class.forName("net.sourceforge.jtds.
47、jdbc.Driver");/使用JTDS第三方連接SQLSERVER2000的驅(qū)動程序,驅(qū)動程序包MSSQL-Driver.jar.舉例:import java.sql.*;public class myconnpublic static void main(String args)String driver = "net.sourceforge.jtds.jdbc.Driver "/指定jtds驅(qū)動程序String connStr = "jdbc:jtds:sqlserver:/localhost:1433/mydb " /指定URL數(shù)據(jù)源
48、String userName = "zhaoc" /指定登錄用戶String userPwd = "111111"/指定登錄口令Connection con = null;/定義Connection對象Statement stm = null;/定義Statement對象tryClass.forName(driver).newInstance();System.out.println("成功加載的驅(qū)動程序");con = DriverManager.getConnection(connStr, userName, userPwd);
49、/通過ODBC-JDBC鏈接SQL SERVER 2000的mydb數(shù)據(jù)庫if (!con.isClosed()System.out.println("數(shù)據(jù)庫注冊成功!");.Class.forName("com.mysql.jdbc.Driver");/使用MYSQL的驅(qū)動程序,驅(qū)動程序包mysql-connector-java-5.1.6-bin.jar.舉例:import java.sql.*;public class myconnpublic static void main(String args)String driver = "c
50、om.mysql.jdbc.Driver"/指定jtds驅(qū)動程序String connStr = "jdbc:mysql:/localhost:3306/aa " /指定數(shù)據(jù)庫URLString userName = "zhaoc" /指定登錄用戶String userPwd = "111111"/指定登錄口令Connection con = null;/定義Connection對象Statement stm = null;/定義Statement對象tryClass.forName(driver).newInstance(
51、);System.out.println("成功加載的驅(qū)動程序");con = DriverManager.getConnection(connStr, userName, userPwd);/通過ODBC-JDBC鏈接SQL SERVER 2000的mydb數(shù)據(jù)庫if (!con.isClosed()System.out.println("數(shù)據(jù)庫注冊成功!");.第三節(jié):使用集成工具(如NetBeans IDE5.5)等訪問數(shù)據(jù)庫如在NetBeans IDE 5.5運行環(huán)境,可加載驅(qū)動程序,查看數(shù)據(jù)庫,運行SLQ語句。下面詳細介紹一個例子。(一)數(shù)據(jù)庫
52、驅(qū)動程序加載、注冊、連接:開始在 IDE 中創(chuàng)建桌面 CRUD(創(chuàng)建、讀取、更新、刪除)應(yīng)用程序之前,應(yīng)已將 IDE 連接到應(yīng)用程序要使用的數(shù)據(jù)庫。提前設(shè)置此連接,以便以后可以利用 IDE 中的自動將數(shù)據(jù)庫綁定到應(yīng)用程序這一功能。數(shù)據(jù)庫連接成功后,連接節(jié)點圖標應(yīng)該可以完全顯示 (),這表示連接已成功。第四部分:網(wǎng)絡(luò)(WEB)數(shù)據(jù)庫的架構(gòu)第五部分:ASP的網(wǎng)絡(luò)數(shù)據(jù)庫的應(yīng)用現(xiàn)在開始學(xué)習(xí)利用ASP進行網(wǎng)絡(luò)數(shù)據(jù)庫編程,在這里我們使用可視化的編程工具Dreamweaver MX 2004來實現(xiàn)開發(fā)ASP程序。1、打開電腦,在D盤下建立一文件夾myweb(這個文件夾就是你的站點存放點了),并且在里面建幾個
53、子文件夾(就好似你網(wǎng)站的子目錄) 2、回到myweb的根目錄,右鍵選擇“共享和安全”(其實是快速地建立虛擬目錄) 3、出現(xiàn)屬性對話框后,選擇“Web共享”標簽,點選“共享文件夾”,出現(xiàn)共享別名對話框,選擇默然設(shè)置,確定即可。 4、補充說明。其實設(shè)置Web共享就是設(shè)置IIS的虛擬目錄。你可以查看到IIS中默認網(wǎng)站中已經(jīng)有了myweb(附注:有關(guān)IIS的操作。如: winXP里面打開控制面板管理工具Internet 信息服務(wù)-本地計算機-默認站點) 5、以上步驟完成了建站,設(shè)虛擬目錄,下面就是把Dreamweaver MX 2004打開了。第一步就是“管理站點”了 6、選擇“定義站點”,在彈出的屬
54、性框中選“高級”標簽,從“分類”中先選“本地信息”,右窗口中設(shè)置站點名稱(隨便輸入,但自己要清楚其代表的意思,推薦和你站點的根文件名同),本地根文件夾(這時候就指向到我們在步驟1中建的文件夾了)。 7、然后設(shè)置遠程信息,訪問選擇“本地/網(wǎng)絡(luò)”,遠端文件夾仍選擇我們的站點文件夾e:myweb 8、再接著“測試服務(wù)器”,“服務(wù)器模型”暫為ASP Javascript,“訪問”本地/網(wǎng)絡(luò),“測試服務(wù)器文件夾”仍是我們的站點文件夾e:myweb,“URL前綴”在后面加入myweb,添加的東西就是我們步驟3中設(shè)置的虛擬目錄 9、這時,站點定義基本結(jié)束,點擊確定。出現(xiàn)“編輯站點”對話框,“完成”即可。 1
55、0、此時DW的站點屬性框中就將d:myweb內(nèi)所有內(nèi)容映射過來,在此需要提醒的是:Dreamweaver MX 2004中建好了站點連接,就可直接在DW中對其對應(yīng)的文件、文件夾操作,最好不要回到我的電腦d:myweb里面去操作?!?能在DW中操作的,盡量不要離開DW的編輯環(huán)境 】。1、打開Dreamweaver MX 2004,在站點里面先新建個ASP頁面(index.asp),選擇新建項目中的“ASP Javascript”。打開應(yīng)用程序面板,在“應(yīng)用程序”面板中選中“數(shù)據(jù)庫”標簽。只要我們在前面建立了站點,選擇了文檔類型(即我們選的ASP Javascript的),并且還測試了服務(wù)器()。
56、那現(xiàn)在就點擊“+”號,選擇“自定義連接字符串”。 2、在彈出來的“數(shù)據(jù)源名稱(DNS)”對話框中,選擇以前配置的連接SQLSERVER2000或MYSQL數(shù)據(jù)庫的數(shù)據(jù)源名稱.點擊“測試”,出現(xiàn)成功就可以了。如果連接不成功你可以打開Dreamweaver的幫助查看一下相關(guān)的說明。3、成功連接數(shù)據(jù)庫后,在DW里其實是自動生成了一個連接文件。位置在自動生成的Connections文件夾中,名稱是你剛才在連接名稱asp文件。還可以注意到DW數(shù)據(jù)庫標簽內(nèi)看到對應(yīng)數(shù)據(jù)庫內(nèi)表、視圖、存儲過程等內(nèi)容。為了方便起見,我們使用以前建立的student表和class表。 4、連接數(shù)據(jù)庫的文件是有了,但下面我們具體的
57、單個頁面怎么和數(shù)據(jù)庫連接上呢?選擇“綁定”標簽,添加“記錄集(查詢)”。單看字面意思就知道是來SQL查詢語句了。5、在彈出的“記錄集”窗口中,“名稱”隨便寫個吧,也可不寫,默認的。但"連接"就要從下拉列表中選擇你定義的連接對象了,“表格”繼續(xù)下拉選擇(注:這和設(shè)計數(shù)據(jù)庫的時候有幾張表相關(guān)的)。 6、其它隨便看下,其實最主要的是自動生成了SQL語句,點選“高級.”,可以看到如下圖 7、單擊確定后,你會發(fā)現(xiàn)記錄集已經(jīng)綁定,所有數(shù)據(jù)庫中的字段都顯現(xiàn)出來。 再注意下面有“插入”按鈕,完全可以將某個字段選中,或按按鈕或拖動到index.asp頁面即可。該asp頁面就顯示數(shù)據(jù)庫里面內(nèi)容
58、了。但只能顯示首行的,要想全部顯示。Next8、“插入”菜單->>“應(yīng)用程序?qū)ο蟆?>>“動態(tài)數(shù)據(jù)”->>“動態(tài)表格”。如下圖:9、彈出的動態(tài)表格中選擇已經(jīng)幫定的記錄集,顯示幾條記錄明白說就是分頁程序的生成:數(shù)據(jù)的記錄多,內(nèi)容多,就分好幾頁來顯示,每頁幾條。記錄是用表格自動生成顯示出來的,再設(shè)下表格的屬性。單擊“確定”后效果如下:10、這時我們就可以按F12查看效果,當然您如果對HTML代碼和CSS已經(jīng)熟悉了,那么你可以格式化一下表格(網(wǎng)頁中添加說明,將動態(tài)表名改成中文),使它看起來更加漂亮!最終效果如下:到現(xiàn)在為止你已經(jīng)學(xué)會怎么連數(shù)據(jù)庫,怎么顯示庫表中的記
59、錄了。下面熟悉一個相對完整的網(wǎng)站,學(xué)習(xí)怎么插入新的記錄,怎么修改記錄,刪除記錄等等。1、首先在站點里新建一文件register.asp用來做注冊頁面,選擇新建項目中的“ASP Javascript”。同樣,建立與MYSQL數(shù)據(jù)庫連接的文件mysqlconn.asp。2、接著切換到“綁定”面板,添加記錄集,步驟和上面的一樣在此不再詳細敘述。3、在regist.asp頁面做個很簡單的表單頁,內(nèi)容以及form表單名最好和數(shù)據(jù)表表里的字段對應(yīng)。如下圖:相應(yīng)的表單的代碼:<form name="form1" method="post" action=&quo
60、t;"> <table width="339" border="1" cellspacing="2" cellpadding="2"> <tr> <td width="61">用戶名:</td> <td width="204"><
61、input name="name" type="text" id="name"></td> </tr> <tr> <td>密碼:</td> <td><input name="pass" type="text" id=&quo
62、t;pass"></td> </tr> <tr> <td>電子郵件:</td> <td><input name="email" type="text" id="email"></td> </tr> <tr> <td>密碼提示問題:</td> &
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年高職(會計)成本會計實訓(xùn)階段測試題及答案
- 2025年高職(林業(yè)技術(shù))森林管護技術(shù)試題及答案
- 巴爾蒂斯介紹
- 養(yǎng)老院老人營養(yǎng)膳食制度
- 養(yǎng)老院老人生活娛樂活動組織人員激勵制度
- 養(yǎng)老院老人家庭溝通制度
- 養(yǎng)老院緊急情況處理制度
- 養(yǎng)老院醫(yī)療設(shè)施管理制度
- 公共交通運營安全管理規(guī)范制度
- 工行非稅收入培訓(xùn)課件
- DB32/T+5311-2025+港口與道路工程+固化土施工技術(shù)規(guī)范
- DB31T+1661-2025公共區(qū)域電子屏播控安全管理要求
- 醫(yī)療聯(lián)合體兒童保健服務(wù)模式創(chuàng)新
- 2026年書記員考試題庫附答案
- 中國高尿酸血癥與痛風(fēng)診療指南(2024更新版)課件
- 2025至2030中國專用車行業(yè)發(fā)展分析及投資前景與戰(zhàn)略規(guī)劃報告
- DB13∕T 6066.3-2025 國資數(shù)智化 第3部分:數(shù)據(jù)治理規(guī)范
- 2025年白山輔警招聘考試題庫及答案1套
- 特種設(shè)備外借協(xié)議書
- 三元股份財務(wù)風(fēng)險控制研究
- DBJ-T 13-417-2023 工程泥漿技術(shù)標準
評論
0/150
提交評論