第6章 JDBC數(shù)據(jù)庫訪問_第1頁
第6章 JDBC數(shù)據(jù)庫訪問_第2頁
第6章 JDBC數(shù)據(jù)庫訪問_第3頁
第6章 JDBC數(shù)據(jù)庫訪問_第4頁
第6章 JDBC數(shù)據(jù)庫訪問_第5頁
已閱讀5頁,還剩118頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第6章JDBC數(shù)據(jù)庫開發(fā)6.1創(chuàng)建數(shù)據(jù)庫連接6.2查詢記錄

(P163_03.jsp)

分頁顯示記錄集(P169_04.jsp)

創(chuàng)建搜索頁(P174_06.jsp)

創(chuàng)建主/詳細(xì)頁(P177_08ab.jsp)6.3添加記錄(P184-_10.jsp)6.4更新記錄(P192-_12ab.jsp)6.5刪除記錄(P202-_14.jsp)JavaDatabaseConnectivity,Java數(shù)據(jù)庫連接數(shù)據(jù)庫是以一定的方式組織并存儲在計算機(jī)存儲設(shè)備上、能夠為不同用戶所共享的、與應(yīng)用程序彼此獨立的相互關(guān)聯(lián)的數(shù)據(jù)的集合?;镜臄?shù)據(jù)模型有三種:層次模型系統(tǒng)、網(wǎng)絡(luò)模型系統(tǒng)和關(guān)系模型系統(tǒng)。關(guān)系模型系統(tǒng)具有數(shù)據(jù)結(jié)構(gòu)簡單靈活、易學(xué)易懂且數(shù)學(xué)基礎(chǔ)雄厚等特點,發(fā)展到現(xiàn)在已成為數(shù)據(jù)庫的標(biāo)準(zhǔn)。常見的中小型數(shù)據(jù)庫系統(tǒng)有Access和MySQL,大型數(shù)據(jù)庫系統(tǒng)有SQLServer和Oracle。

數(shù)據(jù)庫介紹

關(guān)系數(shù)據(jù)庫的標(biāo)準(zhǔn)語言SQLSQL(structuredQueryLanguage)結(jié)構(gòu)化查詢語言是關(guān)系數(shù)據(jù)庫的標(biāo)準(zhǔn)語言。1974年由Boyce和Chamberlin提出,1979年IBM公司首次在其關(guān)系數(shù)據(jù)庫系統(tǒng)SystemR上實現(xiàn)了SQL。1986年由ANSI批準(zhǔn)成為美國國家標(biāo)準(zhǔn)。隨即由ISO批準(zhǔn)成為國際標(biāo)準(zhǔn)。歷經(jīng)兩次修改(SQL-89,SQL-92)目前,幾乎所有的關(guān)系數(shù)據(jù)庫管理系統(tǒng)都支持SQL。SQL的特點功能一體化集DDL,DML,DCL于一身高度的非過程特性用戶只需告訴DBMS干什么,而不必告訴它應(yīng)該怎么干。操作的對象和結(jié)果均為集合兩種使用方式,統(tǒng)一的語法結(jié)構(gòu)。交互式,嵌入式易學(xué)易用語法簡單,接近英語口語,完成核心功能的動詞只有8個。create,drop;select,insert,update,delete;grant(授權(quán)),revoke(撤銷授權(quán))SQL的數(shù)據(jù)定義語句SQL的數(shù)據(jù)定義包括三個部分:定義基本表,定義視圖,定義索引。定義基本表的相關(guān)語句:createtable,droptable,altertable定義視圖的相關(guān)語句:createview,dropview定義索引的相關(guān)語句:createindex,dropindexSQL根據(jù)其功能,可以歸納成為以下3種:DataDefinitionLanguage(DDL):這一類的SQL語法,用以進(jìn)行數(shù)據(jù)庫結(jié)構(gòu)的維護(hù)操作,例如建立數(shù)據(jù)表、調(diào)整字段名稱、刪除現(xiàn)存數(shù)據(jù)表等等。DataManipulationLanguae(DML):提供數(shù)據(jù)庫內(nèi)容、數(shù)據(jù)的搜尋操作,甚至修改數(shù)據(jù)內(nèi)容等等。DataControlLanguage(DCL):提供數(shù)據(jù)庫安全的相關(guān)SQL語句,例如設(shè)定用戶權(quán)限,特定數(shù)據(jù)內(nèi)容操作的安全規(guī)范等等。Sqlserver2000Sqlserver2000:是一個軟件,微軟公司于2000年8月推出的新一代的關(guān)系型網(wǎng)絡(luò)數(shù)據(jù)庫管理系統(tǒng),一個由微軟開發(fā)的數(shù)據(jù)庫管理系統(tǒng),時下用的非常普遍。四個版本:

professional專業(yè)/標(biāo)準(zhǔn)版(適合用作小型工作組和部門數(shù)據(jù)庫服務(wù)器)

enterprise企業(yè)版---適合作為整個企業(yè)的數(shù)據(jù)庫服務(wù)器常用【不能安裝在專業(yè)版系統(tǒng)上】personal個人版(用于在客戶機(jī)上儲存少量數(shù)據(jù))

develop開發(fā)版使用結(jié)構(gòu)示意圖網(wǎng)頁姓名密碼Email提交網(wǎng)頁服務(wù)器數(shù)據(jù)庫12表:人員姓名密碼EmailAccessSqlserver2000姓名密碼Email張三12321123@12.c姓名密碼234@12.dl設(shè)計視圖內(nèi)容視圖Access與Sqlserver2000的比較數(shù)據(jù)庫某表1表2表3Access數(shù)據(jù)庫數(shù)據(jù)庫某1表1表2表3數(shù)據(jù)庫某2表1表2表3數(shù)據(jù)庫服務(wù)器某Sqlserver2000數(shù)據(jù)庫服務(wù)器Access:小型網(wǎng)站,同時訪問人數(shù)不能超過1000。訪問速度慢Sqlserver2000:大型網(wǎng)站,企業(yè)級的數(shù)據(jù)存取應(yīng)用。訪問速度快。Sqlserver2000的企業(yè)管理器數(shù)據(jù)庫服務(wù)器數(shù)據(jù)庫數(shù)據(jù)表

數(shù)據(jù)庫主要由數(shù)量不等的數(shù)據(jù)表所組成,數(shù)據(jù)表本身用來儲存特定內(nèi)容的數(shù)據(jù)并建立彼此間的關(guān)聯(lián)。

數(shù)據(jù)庫ODBC

利用程序連接數(shù)據(jù)庫之前,首先必須在Windows控制臺里的ODBC數(shù)據(jù)來源選項中,依所使用的數(shù)據(jù)庫種類來選擇其專屬的ODBC驅(qū)動程序,并指定ODBC數(shù)據(jù)庫的來源。JDBC驅(qū)動程序

JDBC(JavaDataBaseConnectivity)是使用Java所編寫的數(shù)據(jù)庫驅(qū)動程序,因此具有跨平臺的特性,Java程序或者JSP程序都必須通過此類的驅(qū)動程序來連接數(shù)據(jù)庫。下列網(wǎng)址提供特定特定數(shù)據(jù)庫系統(tǒng)的專署JDBC驅(qū)動程序。/products/jdbc/drivers

Msaccess新建數(shù)據(jù)庫(1)

Msaccess新建數(shù)據(jù)庫

(2)Msaccess新建數(shù)據(jù)庫

(3)MSACCESS數(shù)據(jù)表結(jié)構(gòu)示例(1)字段說明字段說明ID作者編號eMail作者電子郵件Name作者姓名Phone作者連絡(luò)電話Sex作者性別Address作者連絡(luò)地址MSACCESS數(shù)據(jù)表結(jié)構(gòu)示例(2)字段本身包含幾個要素,分別是“字段名稱”、“數(shù)據(jù)類型”和“說明”這3個部份。字段名稱、數(shù)據(jù)類型代表一個特定字段的名稱以及該字段所能儲存的數(shù)據(jù)內(nèi)容。說明是存放這個字段的說明,這一部分能夠省略。MSACCESS數(shù)據(jù)表結(jié)構(gòu)示例(3)數(shù)據(jù)類型說明文本用以儲存一般字符類型的數(shù)據(jù)備注

儲存大量的文字?jǐn)?shù)據(jù),例如備注類型的數(shù)據(jù)內(nèi)容數(shù)字

儲存數(shù)字類型的數(shù)據(jù),例如整數(shù)浮點數(shù)等等日期/時間儲存時間日期等類型的數(shù)據(jù)內(nèi)容貨幣

儲存需要高精確度,使用于貨幣金額計算的數(shù)據(jù)自動編號使用于本身作為編號的字段,例如訂單號碼,于每次新增一條數(shù)據(jù)的時候,自動新增號碼是/否儲存TRUE或是FALSE等布爾類型數(shù)據(jù)MSACCESS數(shù)據(jù)類型

字段類型名稱數(shù)據(jù)類型

說明數(shù)字byte字節(jié)整數(shù)smallint整數(shù)int長整數(shù)single單精準(zhǔn)數(shù)double雙精準(zhǔn)數(shù)文本char(n)記錄最大為n個字符的數(shù)據(jù),n最大值為255備注longtext字符串?dāng)?shù)據(jù)類型,可記錄最大字符串長度為64k日期/時間date日期數(shù)據(jù)自動編號counter字段中的數(shù)值會自動遞增MSACCESS字段屬性

字段屬性說明primarykey設(shè)定字段為主索引unique設(shè)定主索引字段的值不可重復(fù)notnull設(shè)定字段內(nèi)容不允許為空MSACCESS連接數(shù)據(jù)庫加載JDBC驅(qū)動程序

CLASS.FORNAME("SUN.JDBC.ODBC.JDBCODBCDRIVER“)連接數(shù)據(jù)庫

CONNECTIONOBJCONNECTION=DRIVERMANAGER.GETCONNECTION("JDBC:ODBC:DATABASE","USERID","USERPWD")關(guān)閉數(shù)據(jù)庫

OBJCONNECTION.CLOSE()SQLSERVER盡管SQL語言是一種標(biāo)準(zhǔn)的關(guān)系數(shù)據(jù)庫語言,但不同廠商的DBMS所支持的SQL仍有一些差異。這主要是因為各廠商根據(jù)自己的需要對SQL作了一些擴(kuò)充。本課程在介紹操作實例時使用微軟公司的SQLSERVER。它在SQL語法,數(shù)據(jù)庫功能上與SYBASE公司的SYBASESQLSERVER基本相同。既有可以在單機(jī)上運(yùn)行的版本,也有可以在網(wǎng)絡(luò)上運(yùn)行的版本。是廣泛使用的大型數(shù)據(jù)庫管理系統(tǒng)之一。SQLSERVER的數(shù)據(jù)類型字符數(shù)據(jù)字符數(shù)據(jù)由字母、符號和數(shù)字組成。例如,有效字符數(shù)據(jù)包括“928”、“JOHNSON”和“(0*&(%B99NH

JKJ”。在MICROSOFT?SQLSERVER?2000中,字符數(shù)據(jù)使用CHAR、VARCHAR和TEXT數(shù)據(jù)類型存儲。當(dāng)列中各項的字符長度數(shù)可變時可用VARCHAR類型,但任何項的長度都不能超過8KB。當(dāng)列中各項為同一固定長度時使用CHAR類型(最多8KB)。TEXT數(shù)據(jù)類型的列可用于存儲大于8KB的ASCII字符。SQLSERVER的數(shù)據(jù)類型--數(shù)字?jǐn)?shù)據(jù)之整數(shù)數(shù)據(jù)整型數(shù)據(jù)由負(fù)整數(shù)或正整數(shù)組成,如-15、0、5和2509。在Microsoft?SQLServer?2000中,整型數(shù)據(jù)使用bigint、int、smallint和tinyint數(shù)據(jù)類型存儲。bigint數(shù)據(jù)類型可存儲的數(shù)字范圍比int數(shù)據(jù)類型廣。int數(shù)據(jù)類型比smallint數(shù)據(jù)類型的存儲范圍大,而smallint的數(shù)值范圍又比tinyint類型大。使用bigint數(shù)據(jù)類型存儲從-2^63(-9223372036854775808)到2^63-1(9223372036854775807)范圍內(nèi)的數(shù)字。存儲大小為8個字節(jié)。int數(shù)據(jù)類型的存儲范圍是-2,147,483,648至2,147,483,647(每個值需4個字節(jié)的存儲空間)。smallint數(shù)據(jù)類型的存儲范圍只有-32,768至32,767(每個值需2個字節(jié)的存儲空間),tinyint數(shù)據(jù)類型只能存儲0至255范圍內(nèi)的數(shù)字(每個值需1個字節(jié)的存儲空間)。SQLSERVER的數(shù)據(jù)類型--數(shù)字?jǐn)?shù)據(jù)之小數(shù)數(shù)據(jù)Decimal數(shù)據(jù)包含存儲在最小有效數(shù)上的數(shù)據(jù)。在SQLServer中,小數(shù)數(shù)據(jù)使用decimal或numeric數(shù)據(jù)類型存儲。存儲decimal或numeric數(shù)值所需的字節(jié)數(shù)取決于該數(shù)據(jù)的數(shù)字總數(shù)和小數(shù)點右邊的小數(shù)位數(shù)。例如,存儲數(shù)值19283.29383比存儲1.1需要更多的字節(jié)。在SQLServer中,numeric數(shù)據(jù)類型等價于decimal數(shù)據(jù)類型。近似數(shù)字(浮點)數(shù)據(jù)包括按二進(jìn)制計數(shù)系統(tǒng)所能提供的最大精度保留的數(shù)據(jù)。在SQLServer中,近似數(shù)字?jǐn)?shù)據(jù)以float和real數(shù)據(jù)類型存儲。例如,分?jǐn)?shù)1/3表示成小數(shù)形式為0.333333(循環(huán)小數(shù)),該數(shù)字不能以近似小數(shù)數(shù)據(jù)精確表示。因此,從SQLServer獲取的值可能并不準(zhǔn)確代表存儲在列中的原始數(shù)據(jù)。又如,以.3,.6,.7結(jié)尾的浮點數(shù)均為數(shù)字近似值。SQLSERVER的數(shù)據(jù)類型--日期和時間數(shù)據(jù)日期和時間數(shù)據(jù)由有效的日期或時間組成。例如,有效日期和時間數(shù)據(jù)既包括"4/01/9812:15:00:00:00PM",也包括"1:28:29:15:01AM8/17/98"。在Microsoft?SQLServer?2000中,日期和時間數(shù)據(jù)使用datetime和smalldatetime數(shù)據(jù)類型存儲。使用datetime數(shù)據(jù)類型存儲從1753年1月1日至9999年12月31日的日期(每個數(shù)值要求8個字節(jié)的存儲空間)。使用smalldatetime數(shù)據(jù)類型存儲從1900年1月1日至2079年6月6日的日期(每個數(shù)值要求4個字節(jié)的存儲空間)。SQLSERVER的數(shù)據(jù)類型--二進(jìn)制數(shù)據(jù)二進(jìn)制數(shù)據(jù)由十六進(jìn)制數(shù)表示。例如,十進(jìn)制數(shù)245等于十六進(jìn)制數(shù)F5。在Microsoft?SQLServer?2000中,二進(jìn)制數(shù)據(jù)使用binary、varbinary和image數(shù)據(jù)類型存儲。指派為binary數(shù)據(jù)類型的列在每行中都是固定的長度(最多為8KB)。指派為varbinary數(shù)據(jù)類型的列,各項所包含的十六進(jìn)制數(shù)字的個數(shù)可以不同(最多為8KB)。image數(shù)據(jù)列可以用來存儲超過8KB的可變長度的二進(jìn)制數(shù)據(jù),如MicrosoftWord文檔、MicrosoftExcel電子表格、包含位圖的圖像、圖形交換格式(GIF)文件和聯(lián)合圖像專家組(JPEG)文件。除非數(shù)據(jù)長度超過8KB時用image數(shù)據(jù)類型存儲,一般宜用varbinary類型來存儲二進(jìn)制數(shù)據(jù)。建議列寬的定義不超過所存儲的二進(jìn)制數(shù)據(jù)可能的最大長度。SQLSERVER的數(shù)據(jù)類型--貨幣數(shù)據(jù)貨幣數(shù)據(jù)表示正的或負(fù)的貨幣值。在Microsoft?SQLServer?2000中使用money和smallmoney數(shù)據(jù)類型存儲貨幣數(shù)據(jù)。貨幣數(shù)據(jù)存儲的精確度為四位小數(shù)??梢源鎯υ趍oney數(shù)據(jù)類型中的值的范圍是-922,337,203,685,477.5808至+922,337,203,685,477.5807(需8個字節(jié)的存儲空間)??梢源鎯υ趕mallmoney數(shù)據(jù)類型中的值的范圍是-214,748.3648至214,748.3647(需4個字節(jié)的存儲空間)。如果數(shù)值超過了上述范圍,則可使用decimal數(shù)據(jù)類型代替。SQLServer之SQLServerEnterpriseManagerSQLServer企業(yè)管理器是Microsoft?SQLServer?2000的主要管理工具,它提供了一個遵從Microsoft管理控制臺(MMC)的用戶界面,使用戶得以:定義運(yùn)行SQLServer的服務(wù)器組。將個別服務(wù)器注冊到組中。為每個已注冊的服務(wù)器配置所有SQLServer選項在每個已注冊的服務(wù)器中創(chuàng)建并管理所有SQLServer數(shù)據(jù)庫、對象、登錄、用戶和權(quán)限。在每個已注冊的服務(wù)器上定義并執(zhí)行所有SQLServer管理任務(wù)。通過喚醒調(diào)用SQL查詢分析器,交互地設(shè)計并測試SQL語句、批處理和腳本。喚醒調(diào)用為SQLServer定義的各種向?qū)?。SQLServer之查詢分析器Microsoft?SQLServer?2000SQL查詢分析器是一種圖形工具,可以使用它進(jìn)行以下操作:創(chuàng)建查詢和其它SQL腳本,并針對SQLServer數(shù)據(jù)庫執(zhí)行它們。(“查詢”窗口)由預(yù)定義腳本快速創(chuàng)建常用數(shù)據(jù)庫對象。(模板)快速復(fù)制現(xiàn)有數(shù)據(jù)庫對象。(對象瀏覽器腳本功能)在參數(shù)未知的情況下執(zhí)行存儲過程。(對象瀏覽器過程執(zhí)行功能)調(diào)試存儲過程。(T-SQL調(diào)試程序)調(diào)試查詢性能問題。(顯示執(zhí)行計劃、顯示服務(wù)器跟蹤、顯示客戶統(tǒng)計、索引優(yōu)化向?qū)В┰跀?shù)據(jù)庫內(nèi)定位對象(對象搜索功能),或查看和使用對象。(對象瀏覽器)快速插入、更新或刪除表中的行。(“打開表”窗口)為常用查詢創(chuàng)建鍵盤快捷方式。(自定義查詢快捷方式功能)向“工具”菜單添加常用命令。(自定義“工具”菜單功能)SQLSERVER創(chuàng)建數(shù)據(jù)庫用SQLServerEnterpriseManager建立學(xué)生數(shù)據(jù)庫testdb.db。用查詢分析器建立學(xué)生數(shù)據(jù)庫testdb.dbusemastergocreate

databasetestdbon(name=testDB_dat,filename='D:\data\testdbdat.mdf',size=1,maxsize=5,filegrowth=1)Logon(name='testDB_log',filename='D:\data\testdblog.ldf',size=1mb,maxsize=5mb,filegrowth=1mb)go基本表的定義createtable命令語法:createtable

[database_name.[owner].|owner.]table_name

({<column_definition>|column_nameascomputed_column_expression

|<table_constraint>::=[constraintconstraint_name]}

|[{primarykey|unique}[,...n]

)[on{filegroup|default}][textimage_on{filegroup|default}]參數(shù)說明column-definition:column-namedata-type[notnull][defaultdefault-value]基本表的定義(續(xù)一)column-constraint:unique|primarykey|referencestable-name[(column-name)][actions]|check(condition)default-value:string|globalvariable|number|autoincrement|currentdate|currenttime|currenttimestamp|null|user|(constant-expression)基本表的定義(續(xù)二)table-constraint:unique(column-name,...)|primarykey(column-name,...)|check(condition)|foreign-key-constraintforeign-key-constraint:[notnull]foreignkey[role-name][(column-name,...)]referencestable-name[(column-name,...)][actions][checkoncommit]action:on{update|delete}{cascade|setnull|setdefault|restrict}基本表的定義舉例定義表系(department),表名為d,包括系編號d#和系名dn,以系編號為主碼。createtabled(d#char(2)notnull,dnchar(20),primarykey(d#))定義表學(xué)生(student),表名為s,包括學(xué)號s#、姓名sn、所在系的編號d#、和年齡sa。以學(xué)號為主碼,系編號為外部碼,引用表d中的系編號。createtables(s#char(8)notnullprimarykey,snchar(8)notnull,d#char(2)notnullreferencesd(d#),saint)基本表的定義舉例定義表課程(course),表名為c,包括課程編號c#,課程名cn,先修課程編號pc#。課程編號為主碼。createtablec(c#char(2)notnull,cnchar(20)notnull,pc#char(2),primarykey(c#));定義表“學(xué)生選課”,表名為sc,包括學(xué)號s#、課程號c#、成績g。以學(xué)號和課程編號為主碼。學(xué)號為外部碼,引用表s中的學(xué)號。課程編號為外部碼,引用表c中的課程編號。

createtablesc(s#char(8)notnullreferencess(s#),c#char(2)notnullreferencesc(c#),gint,primarykey(s#,c#));基本表的刪除語法:droptable[owner.]tablename舉例:刪除表scdroptablescQuestion:若在刪除表sc前刪除表c,則會發(fā)生錯誤。為什么?基本表的修改(AlterTable)通過更改、添加、除去列和約束,或者通過啟用或禁用約束和觸發(fā)器來更改表的定義。altertabletable{[altercolumncolumn_name

{

new_data_type[(precision[,scale])]

[collate<collation_name>]

[null|notnull]

|{add|drop}rowguidcol}]

|add

{[<column_definition>]

|column_nameascomputed_column_expression

}[,...n]

|[withcheck|withnocheck]add

{<table_constraint>}[,...n]

|drop

{[constraint]constraint_name

|columncolumn}[,...n]

|{check|nocheck}constraint

{all|constraint_name[,...n]}

|{enable|disable}trigger

{all|trigger_name[,...n]}}基本表的修改舉例在表s中增加一列生日(birthday),類型為日期時間型:altertablesaddbirthdaydatetimenull修改課程表,使課程名的長度為30個字節(jié)。altertablecaltercolumncnchar(30)索引的定義(createindex)create[unique][clustered|nonclustered]indexindex_name

on{table|view}(column[asc|desc][,...n])[with<index_option>[,...n]][onfilegroup]<index_option>::=

{pad_index|

fillfactor=fillfactor|

ignore_dup_key|

drop_existing|

statistics_norecompute|

sort_in_tempdb

}

本命令在指定的表及指定的列上建立索引,索引由dbms自動使用以提高對數(shù)據(jù)庫的查詢速度和對查詢結(jié)果排序的速度。索引舉例設(shè)有一職工表employee包含兩列:姓emp_lname和名emp_fname。下例建立一個含這兩個列的索引。createindexemployee_name_indexonemployee(emp_lname,emp_fname)在表s為列d#建立索引:createindexdepartment_id_indexons(d#)查看索引使用存儲過程sp_helpindex報告有關(guān)表或視圖上索引的信息。語法sp_helpindex[@objname=]'name'參數(shù)[@objname=]'name'是當(dāng)前數(shù)據(jù)庫中表或視圖的名稱。name的數(shù)據(jù)類型為nvarchar(776),沒有默認(rèn)值。例如:查看學(xué)生表s上的索引sp_helpindexs索引的刪除語法:dropindex'table.index|view.index'[,...n]例:刪除索引employee_name_indexdropindexemployee.employee_name_index刪除索引department_id_indexdropindexs.department_id_indexSQL的數(shù)據(jù)操縱語句SQL的數(shù)據(jù)操縱語句是指追加、修改、刪除表中記錄的有關(guān)語句。我們將它與數(shù)據(jù)查詢語句分開,一方面是因為操縱語句會改變數(shù)據(jù)庫中的內(nèi)容,查詢語句不會。另一方面是因為數(shù)據(jù)操縱語句的語法相對較簡單。然而,為了查看數(shù)據(jù)操縱的結(jié)果,我們先簡單介紹數(shù)據(jù)查詢語句的最基本形式。簡單的數(shù)據(jù)查詢語句select語法:select{*|selectlist}fromtablename舉例:查看學(xué)生表中的記錄select*froms追加記錄(元組)insert語法:格式1(作用:插入一行到指定的表中)insertinto[owner.]table-name[(column-name,...)]values(expression|default,...)格式2(作用:從其他表中插入一行或多行記錄)insertinto[owner.]table-name[(column-name,...)]select-statementinsert語句舉例插入記錄到表d中insertintod(d#,dn)values('01','計算機(jī)系');insertintod(d#,dn)values('02','經(jīng)貿(mào)學(xué)院');insertintod(d#,dn)values(‘03’,‘化工學(xué)院’);insertintosvalues('s01','王芳','01',20,null)插入記錄到表c中insertintoc(c#,cn,pc#)values('c1','計算機(jī)基礎(chǔ)',NULL);insertintoc(c#,cn,pc#)values('c2','數(shù)據(jù)庫原理','c1');insertintoc(c#,cn,pc#)values('c3','英語',NULL);insertintoc(c#,cn,pc#)values('c4','高等數(shù)學(xué)',NULL);修改記錄內(nèi)容(Update)語法:updatetable-listsetcolumn-name={expression|subquery},...[wheresearch-condition]作用:將指定表table-list中符合條件search-condition的行的相應(yīng)列column-name修改為表達(dá)式expression的值或子查詢subquery的值。將所有學(xué)生的年齡增加1歲:updatessetsa=sa+1將學(xué)生li的年齡增加1歲:updatessetsa=sa+1wheresn=‘li’刪除記錄delete語法:deletefrom[owner.]table-name[wheresearch-condition]作用:刪除指定表table-name中,符合條件search-condition的記錄。刪除表s中,年齡大于25歲的學(xué)生。deletefromswheresa>25刪除表sc中的所有記錄:deletefromscJDBC簡介

JDBC全稱為JavaDataBaseConnectivitystandard,它是一種可用于執(zhí)行SQL語句的JavaAPI。它由一些Java語言編寫的類和界面組成,JDBC提供了一種標(biāo)準(zhǔn)的應(yīng)用程序設(shè)計接口,使開發(fā)人員可以用純Java語言編寫完整的數(shù)據(jù)庫應(yīng)用程序。1、JDBC的任務(wù)(簡單地說,JDBC能完成下列三件事) (1)同數(shù)據(jù)庫建立連接(2)向數(shù)據(jù)庫發(fā)送SQL語句 (3)處理數(shù)據(jù)庫返回的結(jié)果2、JDBC支持兩層模型,也支持三層模型訪問數(shù)據(jù)庫。

6.1.1JDBC驅(qū)動程序類型1、JDBC-ODBC橋2、Java到本地API3、JDBC網(wǎng)絡(luò)純Java驅(qū)動程序4、Java到本地數(shù)據(jù)庫協(xié)議jsp運(yùn)用sql創(chuàng)建web界面

JDBC實現(xiàn)數(shù)據(jù)庫的操作的步驟JDBCAPI是通用接口,在與數(shù)據(jù)庫連接時先要加載。加載驅(qū)動程序有很多方法,最常用的就是先把驅(qū)動程序類溶解到內(nèi)存中,作為“當(dāng)前”驅(qū)動程序。內(nèi)存中可以有多個驅(qū)動程序,但只有現(xiàn)在加載的這個作為首選連接的驅(qū)動程序。利用JDBC實現(xiàn)數(shù)據(jù)庫的操作一般可分為如下幾個步驟。1、加載jdbc驅(qū)動程序。2、定義連接url3、通過DriverManager到得一個與數(shù)據(jù)庫連接的句柄4、創(chuàng)建statement對象。5、執(zhí)行查詢或更新。6、查看返回的結(jié)果集。7、關(guān)閉結(jié)果集對象。8、關(guān)閉statement對象。9、關(guān)閉連接接口。6.1.2安裝JDBC驅(qū)動程序1.安裝MicrosoftSQLServer2000JDBC驅(qū)動程序安裝文件:mssqlserver.jar、msbase.jar、msutil.jar2.安裝MicrosoftSQLServer2005JDBC驅(qū)動程序安裝文件:sqljdbc.jar的文件3.安裝MySQLJDBC驅(qū)動程序安裝文件:mysql-connector-java-3.0.17-ga-bin.jar4.安裝OracleJDBC驅(qū)動程序安裝文件:classes12.jar以上驅(qū)動程序的安裝位置均為:$CATALINA_HOME/common/lib6.1.3加載JDBC驅(qū)動程序加載和注冊一個JDBC數(shù)據(jù)庫驅(qū)動程序:

Class.forName(className);常用JDBC數(shù)據(jù)庫驅(qū)動程序類名實現(xiàn)數(shù)據(jù)庫連接創(chuàng)建到指定數(shù)據(jù)庫的連接:Connectionconn=DriverManager.getConnection(url,user,password);url參數(shù)格式連接一個ODBC數(shù)據(jù)源時參數(shù)url格式:

jdbc:odbc:dnsName使用SQLServer2000JDBC驅(qū)動程序連接數(shù)據(jù)庫時參數(shù)url: jdbc:microsoft:sqlserver://host:port;DatabaseName=dbName使用SQLServer2005JDBC驅(qū)動程序連接數(shù)據(jù)庫時參數(shù)url格式: jdbc:sqlserver://host:port;DatabaseName=dbName連接MySQL數(shù)據(jù)庫時url參數(shù)的格式: jdbc:mysql://host:port/dbName連接Oracle數(shù)據(jù)庫時url參數(shù)的格式: jdbc:Oracle:thin://@host:port:dbNameP163Students表的結(jié)構(gòu)對students表進(jìn)行sql操作select@@versionselect*fromstudentsselect*fromstudentswhereclass='0501'andstudentsex='男’insertintoStudentsvalues('20050207','劉玉倩','女','1998-12-29','多媒體技術(shù)','0502',1,'lyq@163.com')insertintoStudents(StudentID,StudentName,StudentSex,Birthdate,Major)values('20050105','李云飛','男','1988-5-18','計算機(jī)應(yīng)用‘)updateStudentssetMajor='計算機(jī)網(wǎng)絡(luò)技術(shù)',email='wangmh@'wherestudentname='汪江濤’deletefromstudentswherestudentid='20050207'P163page6_03.jsp(1)

<%rs.close();conn.close();%>P163page6_03.jsp(2)6.1.4實現(xiàn)數(shù)據(jù)庫連接創(chuàng)建到指定數(shù)據(jù)庫的連接:Connectionconn=DriverManager.getConnection(url,user,password);url參數(shù)格式連接一個ODBC數(shù)據(jù)源時參數(shù)url格式:

jdbc:odbc:dnsName使用SQLServer2000JDBC驅(qū)動程序連接數(shù)據(jù)庫時參數(shù)url:jdbc:microsoft:sqlserver://host:port;DatabaseName=dbName使用SQLServer2005JDBC驅(qū)動程序連接數(shù)據(jù)庫時參數(shù)url格式:jdbc:sqlserver://host:port;DatabaseName=dbName連接MySQL數(shù)據(jù)庫時url參數(shù)的格式:

jdbc:mysql://host:port/dbName連接Oracle數(shù)據(jù)庫時url參數(shù)的格式:

jdbc:Oracle:thin://@host:port:dbName6.1.5在Dreamweaver中創(chuàng)建數(shù)據(jù)庫連接打開JSP頁,選擇“窗口”→“數(shù)據(jù)庫”命令。在“數(shù)據(jù)庫”面板上單擊加號按鈕,并從彈出菜單中選擇驅(qū)動程序。如果菜單中沒有列出所需要的驅(qū)動程序,可選擇“自定義JDBC連接”。設(shè)置連接參數(shù):輸入連接的名稱。注意不要在該名稱中使用任何空格或特殊字符。輸入驅(qū)動程序的連接參數(shù),包括驅(qū)動程序完全限定類名、要連接的數(shù)據(jù)庫的URL、用戶名和密碼。指定要使用的JDBC驅(qū)動程序的位置,通常應(yīng)該選擇“在測試服務(wù)器上使用驅(qū)動程序”選項。單擊“測試”按鈕。6.2.1SELECT語句SELECT<fieldList>[INTO<newTable>]FROM<dataSource>[WHERE<searchCondition>][ORDERBY<orderByExpression>[ASC|DESC]]其中SELECT子句用于指定輸出字段;INTO子句的作用是將檢索結(jié)果存儲到一個名為newTable的新表中;FROM子句用于指定要檢索的數(shù)據(jù)來源;WHERE子句用于指定對記錄的搜索條件;ORDERBY子句用于對檢索到的記錄進(jìn)行排序處理。6.2.2使用JDBCAPI創(chuàng)建記錄集1.Connection接口Connection接口的常用方法voidclose():立即釋放此Connection對象的數(shù)據(jù)庫和JDBC資源StatementcreateStatement():創(chuàng)建一個Statement對象來將SQL語句發(fā)送到數(shù)據(jù)庫CallableStatementprepareCall(Stringsql):創(chuàng)建一個CallableStatement對象來調(diào)用數(shù)據(jù)庫存儲過程PreparedStatementprepareStatement(Stringsql):創(chuàng)建一個PreparedStatement對象來將參數(shù)化的SQL語句發(fā)送到數(shù)據(jù)庫6.2.2使用JDBCAPI創(chuàng)建記錄集2.Statement及其子接口java.sql.Statement接口用于執(zhí)行靜態(tài)SQL語句并返回所生成的結(jié)果。Statement接口有一個PreparedStatement子接口,用于對SQL語句進(jìn)行預(yù)編譯,然后可以高效地多次執(zhí)行該語句。PreparedStatement接口有一個CallableStatement子接口,用于執(zhí)行數(shù)據(jù)庫中的存儲過程。創(chuàng)建Statement對象: Statementstmt=conn.createStatement();6.2.2使用JDBCAPI創(chuàng)建記錄集Statement接口的常用方法voidclose():立即釋放此Statement對象的數(shù)據(jù)庫和JDBC資源booleanexecute(Stringsql):執(zhí)行給定的SQL語句,該語句可能返回多個結(jié)果ResultSetexecuteQuery(Stringsql):執(zhí)行給定的SQL語句,該語句返回單個ResultSet對象intexecuteUpdate(Stringsql):執(zhí)行給定SQL語句,該語句可能為INSERT、UPDATE或DELETE語句,或者不返回任何內(nèi)容的SQL語句(如SQLDDL語句)6.2.2使用JDBCAPI創(chuàng)建記錄集2.Statement及其子接口PreparedStatement接口的常用方法booleanexecute():在此PreparedStatement對象中執(zhí)行SQL語句,該語句可以是任何SQL語句ResultSetexecuteQuery():在此PreparedStatement對象中執(zhí)行SQL查詢,并返回一個ResultSet對象intexecuteUpdate():在此PreparedStatement對象中執(zhí)行SQL語句,該語句必須是一個INSERT、UPDATE或DELETE語句,或者是一個什么都不返回的SQL語句voidsetObject(intparameterIndex,Objectx):使用給定對象設(shè)置指定參數(shù)的值70/1926.2.2使用JDBCAPI創(chuàng)建記錄集3.ResultSet接口創(chuàng)建ResultSet對象:ResultSetrs=stmt.executeQuery(Stringsql)ResultSetrs=pstmt.executeQuery();ResultSet接口的常用方法:booleanabsolute(introw):將指針移動到此ResultSet對象的給定行編號ObjectgetObject(intcolumnIndex):以Java語言中Object的形式獲取此ResultSet對象的當(dāng)前行中指定列的值ObjectgetObject(StringcolumnName):以Java語言中Object的形式獲取此ResultSet對象的當(dāng)前行中指定列的值booleannext()

將指針從當(dāng)前位置下移一行。booleanprevious():將指針移動到此ResultSet對象的上一行。booleanwasNull():報告最后一個讀取的列是否具有SQLNULL值6.2.3在Dreamweaver中創(chuàng)建記錄集1.用簡單記錄集對話框創(chuàng)建記錄集打開要使用記錄集的JSP動態(tài)頁。選擇“窗口”→“綁定”命令。在綁定面板中單擊加號按鈕,選擇“記錄集(查詢)”命令。若出現(xiàn)了高級記錄集對話框,請通過單擊“簡單”按鈕。在“名稱”文本框中,輸入記錄集的名稱。從“連接”列表框中選取一個連接。在“表”列表框中,選取為記錄集提供數(shù)據(jù)的數(shù)據(jù)庫表。若要使記錄集只包括數(shù)據(jù)庫表中的部分字段,請單擊“已選定”,然后按住Ctrl鍵并單擊列表中的字段,以選擇所需的字段。若要只包括表中的某些記錄,請按照下列步驟完成“過濾器”部分。在第一個列表框中選取數(shù)據(jù)庫表中的字段。在第二個列表框中選取一個運(yùn)算符。在第三個列表框中選取一種測試值類型(包括URL參數(shù)、表單變量、cookie、會話變量、應(yīng)用程序變量以及輸入的值)。在文本框中輸入測試值。例如,若選擇了表單變量,則應(yīng)在此文本框中輸入表單元素的名稱。若要對記錄進(jìn)行排序,請選取要作為排序依據(jù)的列,然后指定是按升序(1、2、3...或A、B、C...)還是按降序?qū)τ涗涍M(jìn)行排序。6.2.3在Dreamweaver中創(chuàng)建記錄集2.用高級記錄集對話框創(chuàng)建記錄集打開要使用記錄集的JSP頁。在綁定面板中單擊加號按鈕,選擇“記錄集(查詢)”命令。如果出現(xiàn)了簡單記錄集對話框,請通過單擊“高級”按鈕切換到高級記錄集對話框。在“名稱”文本框中,輸入記錄集的名稱。從“連接”列表框中選取一個連接。在SQL文本區(qū)域中輸入一個SQL語句。如果SQL語句包含變量,請在“變量”區(qū)域中定義它們的值,方法是單擊加號按鈕并輸入變量名稱、默認(rèn)值(若未返回運(yùn)行時值,則變量應(yīng)取該值)和運(yùn)行時值。6.2.3在Dreamweaver中創(chuàng)建記錄集3.管理記錄集顯示字段值。若要在JSP頁中顯示記錄集內(nèi)的某個字段值,可從綁定面板上將該字段直接拖放到頁面中;也可以先定位插入點,然后在綁定面板上單擊一個字段,然后單擊綁定面板底部的“插入”按鈕。編輯記錄集。創(chuàng)建記錄集時,新記錄集同時出現(xiàn)在綁定面板和服務(wù)器行為面板上。若要對已有記錄集進(jìn)行修改,可在服務(wù)器面板上單擊該記錄集,然后利用屬性檢查器對記錄集的屬性進(jìn)行設(shè)置。復(fù)制記錄集。若要在兩個JSP頁之間復(fù)制記錄集,可打開包含記錄集的JSP頁,在綁定面板上右擊一個記錄集并從彈出菜單中選擇“拷貝”命令,然后切換到另一個JSP頁,接著在綁定面板上單擊鼠標(biāo)右鍵并從彈出菜單中選擇“粘貼”命令。刪除記錄集。若要刪除一個記錄集,可在綁定面板上單擊該記錄集,然后單擊減號按鈕。6.2.4分頁顯示記錄集創(chuàng)建記錄集之后,就可以在JSP頁上顯示記錄集的內(nèi)容。如果記錄集包含的記錄比較多(例如10000條),則必須通過設(shè)置在一個頁面中顯示的記錄數(shù)目來分頁顯示記錄集,以縮短頁面的下載時間。在一個頁面中顯示的記錄構(gòu)成一個記錄組,可以通過記錄集導(dǎo)航條在不同記錄組之間移動,也可以通過記錄計數(shù)器顯示總頁數(shù)、當(dāng)前頁號以及記錄總數(shù)。 1.通過編程實現(xiàn)記錄集分頁顯示 2.通過服務(wù)器行為實現(xiàn)記錄集分頁顯示6.2.5創(chuàng)建搜索/結(jié)果頁為了給JSP應(yīng)用程序添加搜索功能,通常需要創(chuàng)建一個搜索頁和一個結(jié)果頁。在搜索頁中,訪問者通過表單輸入搜索參數(shù)并將這些參數(shù)傳遞給服務(wù)器上的結(jié)果頁,由結(jié)果頁獲取搜索參數(shù),連接到數(shù)據(jù)庫并執(zhí)行數(shù)據(jù)庫查詢,創(chuàng)建記錄集并顯示其內(nèi)容。在某些情況下,也可以將這搜索頁和結(jié)果頁合而為一。1.通過編程實現(xiàn)搜索/結(jié)果頁2.通過服務(wù)器行為實現(xiàn)搜索/結(jié)果頁6.2.6創(chuàng)建主/詳細(xì)頁主/詳細(xì)頁通過兩個明細(xì)級別來顯示從數(shù)據(jù)庫中檢索的信息。這個頁面集由主頁和詳細(xì)所組成,主頁列出通過查詢返回的所有記錄部分信息的列表,每條記錄都包含一個超級鏈接,當(dāng)單擊主頁上的超級鏈接時打開詳細(xì)頁并傳遞URL參數(shù),在詳細(xì)頁中讀取URL參數(shù)并根據(jù)此參數(shù)值執(zhí)行數(shù)據(jù)庫查詢,以檢索所選記錄的更多詳細(xì)信息并顯示出來。1.通過編程實現(xiàn)主/詳細(xì)頁2.通過服務(wù)器行為實現(xiàn)主/詳細(xì)頁6.3.1SQLINSERT語句INSERT語句的基本語法如下:INSERTINTOtableName[(fieldList)]VALUES(valueList)其中tableName是用來接受數(shù)據(jù)的表的名稱;fieldList給出若干個要插入數(shù)據(jù)的字段,該列表必須用圓括號起來,其中的各個字段用逗號分隔,如果省略fieldList,則使用目標(biāo)表中的所有字段來接受數(shù)據(jù);valueList給出待插入的數(shù)據(jù),這個列表也必須用圓括號括起來,其中的各個值用逗號分隔。如果希望在一行記錄的所有字段中添加數(shù)據(jù),則可以省略INSERT語句中的(fieldList)部分。在這種情況下,只要在VALUES關(guān)鍵字后面列出要添加的數(shù)據(jù)值就行了,但必須使值的順序與目標(biāo)表中的字段順序保持一致。6.3.2編程實現(xiàn)添加記錄調(diào)用Class.forName方法加載JDBC數(shù)據(jù)庫驅(qū)動程序。調(diào)用DriverManager.getConnection方法連接到指定數(shù)據(jù)庫,并創(chuàng)建一個Connection連接對象。調(diào)用Connection對象的preparedStatement方法創(chuàng)建一個PreparedStatement對象,將參數(shù)化的SQL語句發(fā)送到數(shù)據(jù)庫。調(diào)用PreparedStatement對象的setter方法(如setShort、setString等)設(shè)置參數(shù)值,以替換SQL語句中的“?”占位符。必須指定與輸入?yún)?shù)的已定義SQL類型兼容的類型。調(diào)用PreparedStatement對象的executeUpdate方法執(zhí)行SQL語句。6.3.3快速生成記錄添加頁在Dreamweaver8中,添加記錄的頁面由兩個構(gòu)造塊組成:允許用戶輸入數(shù)據(jù)的表單和用于更新數(shù)據(jù)庫的“插入記錄”服務(wù)器行為。既可以使用“插入記錄表單向?qū)А蓖ㄟ^單個操作添加這兩個構(gòu)造塊,也可以使用表單工具和“服務(wù)器行為”面板分別添加它們。1.使用向?qū)捎涗浱砑禹撁?.逐塊生成記錄添加頁面6.4.1sqlupdate語句在sql語言中,更新記錄的操作是通過update語句來實現(xiàn)的。update語句用于對目標(biāo)表中的一行、多行或所有記錄進(jìn)行修改。update語句的基本語法如下:updatetablenamesetfieldname1=value1,fieldname2=value2…fieldnamen=valuen[wheresearchcondition]其中tablename給出要更新數(shù)據(jù)的表的名稱;set子句指定要修改的字段和所使用的數(shù)據(jù),fieldname1、fieldname2…fieldnamen指定包含待修改數(shù)據(jù)的字段;value1、value2…valuen給出各個字段的新值。where子句用于指定要修改目標(biāo)表中的哪些記錄。如果省略where子句,則目標(biāo)表中的所有記錄都將被修改成由set子句指定的數(shù)據(jù)。6.4.2編程實現(xiàn)記錄更新調(diào)用Class.forName方法加載JDBC數(shù)據(jù)庫驅(qū)動程序。調(diào)用DriverManager.getConnection方法連接到指定數(shù)據(jù)庫,并創(chuàng)建一個Connection連接對象。調(diào)用Connection對象的preparedStatement方法創(chuàng)建一個PreparedStatement對象,將參數(shù)化的UPDATE語句發(fā)送到數(shù)據(jù)庫,該語句可以包含一個或多個“?”參數(shù)占位符。例如,為各個字段提供的值可以使用“?”參數(shù)來表示。通過request.getParameter方法獲取表單參數(shù),并調(diào)用PreparedStatement對象的setter方法(如setInt、setString等)來設(shè)置參數(shù)值,以替換SQL語句中的“?”占位符。必須指定與輸入?yún)?shù)的已定義SQL類型兼容的類型。調(diào)用PreparedStatement對象的executeUpdate方法執(zhí)行UPDATE語句,此時該方法將返回所影響的行數(shù)。如果發(fā)生數(shù)據(jù)庫訪問錯誤,則拋出SQLException異常。6.4.3快速生成記錄更新頁錄1.搜索要更新的記錄2.打開更新頁面并傳遞記錄標(biāo)識3.檢索要更新的記錄4.使用向?qū)筛马撁娓马撁婢哂?個構(gòu)造塊:一個用于從數(shù)據(jù)表中檢索記錄的記錄集;一個允許用戶修改記錄數(shù)據(jù)的表單;一個用于更新記錄數(shù)據(jù)的“更新記錄”服務(wù)器行為。在Dreamweaver8中,可以使用更新記錄表單向?qū)硖砑雍竺鎯蓚€構(gòu)造塊。6.5.1SQLDELETE語句deletefromtablename[wheresearchcodition]其中,tablename指定要從其中刪除記錄的表的名稱;where子句指定要從目標(biāo)表中刪除哪些記錄,searchcodition指定記錄的篩選條件,凡符合該條件的記錄將被刪除。如果省略where子句,則目標(biāo)表中的所有記錄被刪除。6.5.2編程實現(xiàn)記錄刪除調(diào)用Class.forName方法加載JDBC數(shù)據(jù)庫驅(qū)動程序。調(diào)用DriverManager.getConnection方法連接到指定數(shù)據(jù)庫,并創(chuàng)建一個Connection連接對象。調(diào)用Connection對象的preparedStatement方法創(chuàng)建一個PreparedStatement對象,將參數(shù)化的DELETE語句發(fā)送到數(shù)據(jù)庫,在WHERE子句可以包含一個或多個“?”參數(shù)占位符,以指定要刪除哪些記錄。通過request.getParameter方法獲取表單參數(shù),并調(diào)用PreparedSta

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論