第7章上 Java數(shù)據(jù)庫連接(JDBC)_第1頁
第7章上 Java數(shù)據(jù)庫連接(JDBC)_第2頁
第7章上 Java數(shù)據(jù)庫連接(JDBC)_第3頁
第7章上 Java數(shù)據(jù)庫連接(JDBC)_第4頁
第7章上 Java數(shù)據(jù)庫連接(JDBC)_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、基礎(chǔ)知識簡介基礎(chǔ)知識簡介n數(shù)據(jù)庫管理系統(tǒng)數(shù)據(jù)庫管理系統(tǒng)(Database Management System)(Database Management System)是一種操縱和管理數(shù)據(jù)庫的大型軟件,是用于建是一種操縱和管理數(shù)據(jù)庫的大型軟件,是用于建立、使用和維護(hù)數(shù)據(jù)庫,簡稱立、使用和維護(hù)數(shù)據(jù)庫,簡稱DBMSDBMS。n用途:用途:科學(xué)地組織和存儲數(shù)據(jù);高效地獲取和維科學(xué)地組織和存儲數(shù)據(jù);高效地獲取和維護(hù)數(shù)據(jù)。護(hù)數(shù)據(jù)。n常見的數(shù)據(jù)庫管理系統(tǒng):常見的數(shù)據(jù)庫管理系統(tǒng): Microsoft AccessMicrosoft Access Oracle Oracle Microsoft SQL Serv

2、er Microsoft SQL Server Visual FoxPro Visual FoxPro;沒有DBMS之前有了DBMS之后基礎(chǔ)知識簡介基礎(chǔ)知識簡介nSQLSQL語言語言:“結(jié)構(gòu)化查詢語言結(jié)構(gòu)化查詢語言”Structured Query LanguageStructured Query LanguagenSQLSQL語言的由來:語言的由來:最早的是最早的是IBMIBM的圣約瑟研究實(shí)驗室的圣約瑟研究實(shí)驗室為其關(guān)系數(shù)據(jù)庫管理系統(tǒng)為其關(guān)系數(shù)據(jù)庫管理系統(tǒng)SYSTEM RSYSTEM R開發(fā)的一種查詢開發(fā)的一種查詢語言,它的前身是語言,它的前身是SQUARESQUARE語言。語言。nSQLS

3、QL語言的優(yōu)點(diǎn)語言的優(yōu)點(diǎn):結(jié)構(gòu)簡潔,功能強(qiáng)大,簡單易學(xué)。:結(jié)構(gòu)簡潔,功能強(qiáng)大,簡單易學(xué)。nSQLSQL語言的地位語言的地位:在關(guān)系型數(shù)據(jù)庫中的地位猶如英語在世界上的地位,在關(guān)系型數(shù)據(jù)庫中的地位猶如英語在世界上的地位,它是數(shù)據(jù)庫系統(tǒng)的通用語言。它是數(shù)據(jù)庫系統(tǒng)的通用語言。利用利用SQLSQL語言,用戶可以用幾乎同樣的語句在不同的語言,用戶可以用幾乎同樣的語句在不同的數(shù)據(jù)庫管理系統(tǒng)上執(zhí)行同樣的操作。數(shù)據(jù)庫管理系統(tǒng)上執(zhí)行同樣的操作。SQLSQL已經(jīng)被已經(jīng)被ANSI(ANSI(美國國家標(biāo)準(zhǔn)化組織美國國家標(biāo)準(zhǔn)化組織) )確定為數(shù)據(jù)庫確定為數(shù)據(jù)庫系統(tǒng)的工業(yè)標(biāo)準(zhǔn)。系統(tǒng)的工業(yè)標(biāo)準(zhǔn)。 基礎(chǔ)知識簡介基礎(chǔ)知識簡介n什

4、么是什么是ODBCODBC?開放數(shù)據(jù)庫互連開放數(shù)據(jù)庫互連(Open Database Connectivity)(Open Database Connectivity)微軟微軟開放服務(wù)結(jié)構(gòu)中有關(guān)數(shù)據(jù)庫的一個組成部分開放服務(wù)結(jié)構(gòu)中有關(guān)數(shù)據(jù)庫的一個組成部分nODBCODBC有什么作用?有什么作用?建立了一組規(guī)范建立了一組規(guī)范提供了一組對數(shù)據(jù)庫訪問的標(biāo)準(zhǔn)提供了一組對數(shù)據(jù)庫訪問的標(biāo)準(zhǔn)APIAPIAPIAPI:應(yīng)用程序編程接口:應(yīng)用程序編程接口nODBCODBC本身提供了對本身提供了對SQLSQL語言的支持語言的支持:用戶可以直:用戶可以直接將接將SQLSQL語句送給語句送給ODBCODBC?;A(chǔ)知識簡

5、介基礎(chǔ)知識簡介nODBCODBC的最大優(yōu)點(diǎn)的最大優(yōu)點(diǎn):能以:能以統(tǒng)一的方式統(tǒng)一的方式處理所有處理所有的數(shù)據(jù)庫。的數(shù)據(jù)庫。不依賴任何不依賴任何DBMSDBMS,不直接與,不直接與DBMSDBMS打交道,所有的打交道,所有的數(shù)據(jù)庫操作由對應(yīng)數(shù)據(jù)庫操作由對應(yīng)DBMSDBMS的的ODBCODBC驅(qū)動程序完成;驅(qū)動程序完成;不論是不論是FoxProFoxPro、AccessAccess、MYSQLMYSQL還是還是OracleOracle數(shù)據(jù)數(shù)據(jù)庫,均可用庫,均可用ODBC APIODBC API進(jìn)行訪問。進(jìn)行訪問?;A(chǔ)知識簡介基礎(chǔ)知識簡介nODBCODBC管理器的使用:管理器的使用:首先必須用首先必須

6、用ODBCODBC管理器注冊一個數(shù)據(jù)源。管理器注冊一個數(shù)據(jù)源。數(shù)據(jù)數(shù)據(jù)源中包含數(shù)據(jù)庫位置、數(shù)據(jù)庫類型及源中包含數(shù)據(jù)庫位置、數(shù)據(jù)庫類型及ODBCODBC驅(qū)動驅(qū)動程序等信息程序等信息。然后然后ODBCODBC管理器根據(jù)上述信息,自動建立起管理器根據(jù)上述信息,自動建立起ODBCODBC與具體數(shù)據(jù)庫的聯(lián)系。與具體數(shù)據(jù)庫的聯(lián)系。n只要應(yīng)用程序?qū)?shù)據(jù)源名提供給只要應(yīng)用程序?qū)?shù)據(jù)源名提供給ODBCODBC,ODBCODBC就能建就能建立起與相應(yīng)數(shù)據(jù)庫的連接。立起與相應(yīng)數(shù)據(jù)庫的連接。JDBC簡介簡介n什么是什么是JDBCJDBC?JavaJava數(shù)據(jù)庫連接數(shù)據(jù)庫連接(Java DataBase Connect

7、ivity)(Java DataBase Connectivity)SunSun公司公司開發(fā)的一種用于執(zhí)行開發(fā)的一種用于執(zhí)行SQLSQL語句的語句的Java APIJava API由一組用由一組用JavaJava語言編寫的類和接口組成,可以為語言編寫的類和接口組成,可以為多種關(guān)系數(shù)據(jù)庫提供統(tǒng)一訪問多種關(guān)系數(shù)據(jù)庫提供統(tǒng)一訪問n通用性:通用性:只需用只需用JDBC APIJDBC API編寫一個程序,就可以向相應(yīng)數(shù)編寫一個程序,就可以向相應(yīng)數(shù)據(jù)庫發(fā)送據(jù)庫發(fā)送SQLSQL語句,進(jìn)而語句,進(jìn)而訪問多種不同的數(shù)據(jù)庫訪問多種不同的數(shù)據(jù)庫ODBC與JDBCn共同點(diǎn):共同點(diǎn):ODBCODBC:微軟公司開發(fā)的:

8、微軟公司開發(fā)的用于操作數(shù)據(jù)庫的方法用于操作數(shù)據(jù)庫的方法JDBCJDBC:SunSun公司開發(fā)的公司開發(fā)的用于操作數(shù)據(jù)庫的方法用于操作數(shù)據(jù)庫的方法n不同點(diǎn):不同點(diǎn):ODBCODBC支持的數(shù)據(jù)庫類型多支持的數(shù)據(jù)庫類型多JDBCJDBC基于基于JavaJava跨平臺特性,可移植性好跨平臺特性,可移植性好JDBC簡介簡介nJDBCJDBC能哪完成能哪完成3 3件事?件事?與一個數(shù)據(jù)庫建立連接。與一個數(shù)據(jù)庫建立連接。向數(shù)據(jù)庫發(fā)送向數(shù)據(jù)庫發(fā)送SQLSQL語句。語句。處理數(shù)據(jù)庫返回的結(jié)果。處理數(shù)據(jù)庫返回的結(jié)果。n與數(shù)據(jù)庫建立連接的兩種方式:與數(shù)據(jù)庫建立連接的兩種方式:建立建立JDBC-ODBCJDBC-OD

9、BC橋接器:橋接器:加載純加載純JavaJava數(shù)據(jù)庫驅(qū)動程序數(shù)據(jù)庫驅(qū)動程序JDBC簡介簡介n1) 1) 建立建立JDBC-ODBCJDBC-ODBC橋接器:橋接器:由由SunSun公司本身開發(fā)出來的軟件模塊公司本身開發(fā)出來的軟件模塊隨著隨著JDKJDK的更新,它的各種操作的的更新,它的各種操作的APIAPI都是最新的都是最新的性能不高性能不高( (通常在教學(xué)中使用通常在教學(xué)中使用) )n2) 2) 加載純加載純JavaJava數(shù)據(jù)庫驅(qū)動程序數(shù)據(jù)庫驅(qū)動程序所有驅(qū)動程序由各個數(shù)據(jù)庫生產(chǎn)廠商按照所有驅(qū)動程序由各個數(shù)據(jù)庫生產(chǎn)廠商按照J(rèn)DBCJDBC標(biāo)標(biāo)準(zhǔn)提供準(zhǔn)提供經(jīng)常不支持最新版本的經(jīng)常不支持最新版

10、本的JDKJDK性能較高性能較高( (通常在軟件開發(fā)中使用通常在軟件開發(fā)中使用) )JDBC簡介簡介n使用使用JDBC-ODBCJDBC-ODBC橋接器連接數(shù)據(jù)庫的過程:橋接器連接數(shù)據(jù)庫的過程:1)1)創(chuàng)建一個數(shù)據(jù)庫創(chuàng)建一個數(shù)據(jù)庫(Access)(Access)2)2)創(chuàng)建一個創(chuàng)建一個ODBCODBC數(shù)據(jù)源,同數(shù)據(jù)庫建立連接數(shù)據(jù)源,同數(shù)據(jù)庫建立連接3)3)載入驅(qū)動程序,建立一個載入驅(qū)動程序,建立一個JDBC-ODBCJDBC-ODBC橋接器橋接器4)4)創(chuàng)建鏈接創(chuàng)建鏈接(Connection)(Connection)對象,連接到數(shù)據(jù)庫對象,連接到數(shù)據(jù)庫5)5)創(chuàng)建語句創(chuàng)建語句(Statemen

11、t)(Statement)對象對象6)6)執(zhí)行執(zhí)行SQLSQL語句,得到查詢結(jié)果語句,得到查詢結(jié)果(ResultSet)(ResultSet)7)7)對結(jié)果操作后,關(guān)閉連接對結(jié)果操作后,關(guān)閉連接JDBC-ODBCJDBC-ODBC橋接器連接數(shù)據(jù)庫橋接器連接數(shù)據(jù)庫1. 建立數(shù)據(jù)庫建立數(shù)據(jù)庫n使用使用AccessAccess創(chuàng)建一個數(shù)據(jù)庫創(chuàng)建一個數(shù)據(jù)庫student.mdbstudent.mdb 該庫中有一個表,表的名字是該庫中有一個表,表的名字是“成績表成績表”; 該表中該表中numbernumber、namename、birthdaybirthday字段的屬性字段的屬性是文本;是文本;math

12、math、englishenglish字段的屬性是數(shù)字。字段的屬性是數(shù)字。 關(guān)鍵字是關(guān)鍵字是numbernumber,見教材圖,見教材圖15.115.1JDBC-ODBCJDBC-ODBC橋接器連接數(shù)據(jù)庫橋接器連接數(shù)據(jù)庫2. 創(chuàng)建一個創(chuàng)建一個ODBC數(shù)據(jù)源數(shù)據(jù)源n1) 1) 打開打開 數(shù)據(jù)源數(shù)據(jù)源(ODBC)(ODBC)管理器:管理器:打開控制面板,選擇打開控制面板,選擇“性能和維護(hù)性能和維護(hù)” ” “管理工具管理工具” ” “ “數(shù)據(jù)源(數(shù)據(jù)源(ODBCODBC)” ” ;或雙擊或雙擊c:windowssystem32c:windowssystem32下的可執(zhí)行文件下的可執(zhí)行文件“odbca

13、d32”odbcad32”。此時會出現(xiàn)此時會出現(xiàn)ODBCODBC數(shù)據(jù)源管理器的對話框。數(shù)據(jù)源管理器的對話框。JDBC-ODBCJDBC-ODBC橋接器連接數(shù)據(jù)庫橋接器連接數(shù)據(jù)庫2. 創(chuàng)建一個創(chuàng)建一個ODBC數(shù)據(jù)源數(shù)據(jù)源n2) 2) 添加數(shù)據(jù)源的驅(qū)動程序添加數(shù)據(jù)源的驅(qū)動程序:在在ODBCODBC數(shù)據(jù)源管理器對話框中選擇數(shù)據(jù)源管理器對話框中選擇“用戶用戶DSN”DSN”然后單擊然后單擊“添加添加”按鈕,將出現(xiàn)安裝數(shù)據(jù)源按鈕,將出現(xiàn)安裝數(shù)據(jù)源的驅(qū)動程序?qū)υ捒虻尿?qū)動程序?qū)υ捒蛟谶x擇列表中選擇相應(yīng)的驅(qū)動程序,在選好在選擇列表中選擇相應(yīng)的驅(qū)動程序,在選好之后,單擊之后,單擊“完成完成”按鈕。按鈕。JDBC

14、-ODBCJDBC-ODBC橋接器連接數(shù)據(jù)庫橋接器連接數(shù)據(jù)庫2. 創(chuàng)建一個創(chuàng)建一個ODBC數(shù)據(jù)源數(shù)據(jù)源n3) 3) 創(chuàng)建數(shù)據(jù)源創(chuàng)建數(shù)據(jù)源:完成上步操作后,系統(tǒng)將出現(xiàn)創(chuàng)建數(shù)據(jù)源對完成上步操作后,系統(tǒng)將出現(xiàn)創(chuàng)建數(shù)據(jù)源對話框話框起名:為新建的數(shù)據(jù)源起一個名字;起名:為新建的數(shù)據(jù)源起一個名字;選擇:為新建的數(shù)據(jù)源選擇一個數(shù)據(jù)庫;選擇:為新建的數(shù)據(jù)源選擇一個數(shù)據(jù)庫;高級設(shè)置:設(shè)置登錄名稱和密碼。高級設(shè)置:設(shè)置登錄名稱和密碼。JDBC-ODBCJDBC-ODBC橋接器連接數(shù)據(jù)庫橋接器連接數(shù)據(jù)庫3. 建立一個建立一個JDBC-ODBC橋接器橋接器nClass.forName(sun.jdbc.odbc.Jd

15、bcOdbcDriver)Class.forName(sun.jdbc.odbc.JdbcOdbcDriver)ClassClass是包是包java.langjava.lang中的一個類;中的一個類;ClassClass類通過調(diào)用靜態(tài)方法類通過調(diào)用靜態(tài)方法forNameforName加載加載sun. sun. jdbc.odbcjdbc.odbc包中的包中的JdbcOdbcDriverJdbcOdbcDriver類來建立橋類來建立橋接器;接器;建立橋接器時,可能會發(fā)生異常,需要捕捉建立橋接器時,可能會發(fā)生異常,需要捕捉( (參參見教材見教材P393P393代碼代碼) )JDBC常用類與接口n使

16、用包使用包java.sqljava.sqln常用類與接口:常用類與接口: DriverManagerDriverManager Connection Connection Statement Statement PreparedStatement PreparedStatement ResultSet ResultSetJDBC-ODBCJDBC-ODBC橋接器連接數(shù)據(jù)庫橋接器連接數(shù)據(jù)庫4. 創(chuàng)建一個連接對象創(chuàng)建一個連接對象 nConnection con = DriverManager.getConnectionConnection con = DriverManager.getConnec

17、tion (URL,login name,password); (URL,login name,password);首先,使用首先,使用java.sqljava.sql包中的包中的ConnectionConnection類類聲明一聲明一個對象;個對象;然后,再使用類然后,再使用類DriverManagerDriverManager調(diào)用其靜態(tài)方法調(diào)用其靜態(tài)方法getConnectiongetConnection創(chuàng)建這樣一個對象;創(chuàng)建這樣一個對象;URLURL:jdbc:odbc:jdbc:odbc:數(shù)據(jù)源名字?jǐn)?shù)據(jù)源名字建立連接時,應(yīng)捕捉建立連接時,應(yīng)捕捉SQLExceptionSQLExcept

18、ion異常;異常;參見教材參見教材P393P393代碼;代碼;nStatement sql=con.createStatement();Statement sql=con.createStatement();首先使用首先使用StatementStatement聲明一個聲明一個SQLSQL語句對象;語句對象;通過剛剛創(chuàng)建的連接數(shù)據(jù)庫的對象通過剛剛創(chuàng)建的連接數(shù)據(jù)庫的對象concon調(diào)用方法調(diào)用方法createStatement()createStatement()創(chuàng)建一個創(chuàng)建一個SQLSQL語句對象;語句對象;nPreparedStatement sql;PreparedStatement sql

19、;sql=con.prepareStatement(SQLsql=con.prepareStatement(SQL語句語句););預(yù)編譯處理后,生成該數(shù)據(jù)庫底層的內(nèi)部命令,預(yù)編譯處理后,生成該數(shù)據(jù)庫底層的內(nèi)部命令,并將該命令封裝在并將該命令封裝在PreparedStatementPreparedStatement對象中對象中JDBC-ODBCJDBC-ODBC橋接器連接數(shù)據(jù)庫橋接器連接數(shù)據(jù)庫5. 創(chuàng)建創(chuàng)建SQL語句對象語句對象nsql.executeUpdate(“SQLsql.executeUpdate(“SQL語句語句”) ); UPDATEUPDATE INSERT INSERT DEL

20、ETE DELETEnsql.executeQuery(“SQLsql.executeQuery(“SQL語句語句”) );由由SELECTSELECT語句使用,將數(shù)據(jù)庫查詢結(jié)果存放在一語句使用,將數(shù)據(jù)庫查詢結(jié)果存放在一個個ResultSetResultSet類的對象里。類的對象里。JDBC-ODBCJDBC-ODBC橋接器連接數(shù)據(jù)庫橋接器連接數(shù)據(jù)庫6. 執(zhí)行執(zhí)行SQL語句,進(jìn)行查詢語句,進(jìn)行查詢nResultSetResultSet對象:對象:實(shí)際上是一個實(shí)際上是一個管式數(shù)據(jù)集管式數(shù)據(jù)集,即統(tǒng)一形式的列組織,即統(tǒng)一形式的列組織的數(shù)據(jù)行組成;的數(shù)據(jù)行組成;ResultSetResultSet對

21、象一次只能看到一個數(shù)據(jù)行,使用對象一次只能看到一個數(shù)據(jù)行,使用next()next()方法走到下一個數(shù)據(jù)行;方法走到下一個數(shù)據(jù)行;ResultSetResultSet對象調(diào)用方法對象調(diào)用方法getXxx()getXxx(),傳遞參數(shù),傳遞參數(shù)“位置索引位置索引”或列名稱,即可得到對應(yīng)的字段值。或列名稱,即可得到對應(yīng)的字段值。注意:使用該方法時不可顛倒順序!注意:使用該方法時不可顛倒順序!參見教材參見教材394394頁表頁表15.115.1JDBC-ODBCJDBC-ODBC橋接器連接數(shù)據(jù)庫橋接器連接數(shù)據(jù)庫6. 執(zhí)行執(zhí)行SQL語句,進(jìn)行查詢語句,進(jìn)行查詢JDBC-ODBCJDBC-ODBC橋接器

22、連接數(shù)據(jù)庫橋接器連接數(shù)據(jù)庫7. 關(guān)閉數(shù)據(jù)庫關(guān)閉數(shù)據(jù)庫n數(shù)據(jù)庫每次使用后都必須關(guān)閉:數(shù)據(jù)庫每次使用后都必須關(guān)閉:關(guān)閉數(shù)據(jù)庫的順序與打開數(shù)據(jù)庫的順序相反關(guān)閉數(shù)據(jù)庫的順序與打開數(shù)據(jù)庫的順序相反1)1)先關(guān)閉結(jié)果集先關(guān)閉結(jié)果集( (ResultSetResultSet) )2)2)再關(guān)閉操作再關(guān)閉操作( (StatementStatement) )3)3)最后關(guān)閉連接最后關(guān)閉連接( (ConnectionConnection) )15.3 順序查詢順序查詢n使用結(jié)果集使用結(jié)果集ResultResult的的next()next()方法,可以順方法,可以順序的查詢。序的查詢。n一個結(jié)果集將游標(biāo)最初定位在第

23、一行的前一個結(jié)果集將游標(biāo)最初定位在第一行的前面,第一次調(diào)用面,第一次調(diào)用next()next()方法使游標(biāo)移動到方法使游標(biāo)移動到第一行。第一行。nnext()next()方法返回一個方法返回一個booleanboolean型數(shù)據(jù),當(dāng)游型數(shù)據(jù),當(dāng)游標(biāo)移動到最后一行之后返回標(biāo)移動到最后一行之后返回falsefalse。 15.4 可滾動結(jié)果集可滾動結(jié)果集n為了得到一個可滾動的結(jié)果集,必須使用下述方為了得到一個可滾動的結(jié)果集,必須使用下述方法先獲得一個法先獲得一個StatementStatement對象:對象:Statement stmt = con.createStatementStatement

24、 stmt = con.createStatement (int type ,int concurrency); (int type ,int concurrency);n然后,根據(jù)參數(shù)的然后,根據(jù)參數(shù)的typetype、concurrencyconcurrency的取值情況,的取值情況,stmtstmt返回相應(yīng)類型的結(jié)果集:返回相應(yīng)類型的結(jié)果集:ResultSet re=stmt.executeQuery(SQLResultSet re=stmt.executeQuery(SQL語句語句););typetype的取值決定滾動方式:的取值決定滾動方式:nResultSet.TYPE_FORWO

25、RD_ONLYResultSet.TYPE_FORWORD_ONLY 結(jié)果集的結(jié)果集的游標(biāo)只能向下滾動。游標(biāo)只能向下滾動。nResultSet.TYPE_SCROLL_INSENSITIVEResultSet.TYPE_SCROLL_INSENSITIVE 結(jié)結(jié)果集的游標(biāo)可以上下移動,當(dāng)數(shù)據(jù)庫變化果集的游標(biāo)可以上下移動,當(dāng)數(shù)據(jù)庫變化時,當(dāng)前結(jié)果集不變。時,當(dāng)前結(jié)果集不變。nResultSet.TYPE_SCROLL_SENSITIVE ResultSet.TYPE_SCROLL_SENSITIVE 返回返回可滾動的結(jié)果集,當(dāng)數(shù)據(jù)庫變化時,當(dāng)前可滾動的結(jié)果集,當(dāng)數(shù)據(jù)庫變化時,當(dāng)前結(jié)果集同步改變。

26、結(jié)果集同步改變。Concurrency Concurrency 取值決定是否可以用結(jié)果取值決定是否可以用結(jié)果集更新數(shù)據(jù)庫:集更新數(shù)據(jù)庫:nResultSet.CONCUR_READ_ONLY ResultSet.CONCUR_READ_ONLY 不能用結(jié)不能用結(jié)果集更新數(shù)據(jù)庫中的表。果集更新數(shù)據(jù)庫中的表。nResultSet.CONCUR_UPDATETABLEResultSet.CONCUR_UPDATETABLE 能用結(jié)能用結(jié)果集更新數(shù)據(jù)庫中的表。果集更新數(shù)據(jù)庫中的表。滾動查詢常用到的滾動查詢常用到的ResultSetResultSet的方法:的方法:n參見教材參見教材P398P398 p

27、revious() previous() first() first() last() last() beforeFirst() beforeFirst() afterlast() afterlast() getRow() getRow() absolute(int row) absolute(int row)15.5 排序查詢排序查詢n可以在可以在SQLSQL語句中使用語句中使用ORDER BYORDER BY子語句,對記子語句,對記錄排序。錄排序。n例如:按總成績排序查詢的例如:按總成績排序查詢的SQLSQL語句語句SELECT SELECT * * FROM student ORDER

28、BY math+english FROM student ORDER BY math+englishn升序:升序:ASC(ASC(默認(rèn)默認(rèn)) )n降序:降序:DESCDESCn參見教材參見教材P399P399例題例題15.415.415.6 模糊查詢模糊查詢n可以用可以用SQLSQL語句操作符語句操作符LIKELIKE進(jìn)行模式般配:進(jìn)行模式般配:使用使用“%”%”代替代替0 0個或多個字符;個或多個字符;用一個下劃線用一個下劃線“_”_”代替代替1 1個字符;個字符;比如,下述語句查詢姓氏是比如,下述語句查詢姓氏是“王王”的記錄:的記錄:rs=sql.executeQueryrs=sql.ex

29、ecuteQuery (SELECT (SELECT * * FROM students WHERE name LIKE FROM students WHERE name LIKE 王王% % ););n參見教材參見教材P400P400例題例題15.515.5課堂實(shí)驗:n編寫登陸窗口類LoginFrame(如下圖所示),用于輸入用戶名和密碼。n編寫數(shù)據(jù)庫查詢類DataOperation,該類包含靜態(tài)方法isLogin,用于查詢數(shù)據(jù)庫判斷登陸用戶是否存在。15.7 隨機(jī)查詢隨機(jī)查詢n用用MathMath類的靜態(tài)方法類的靜態(tài)方法random()random()可以產(chǎn)生一可以產(chǎn)生一個大于個大于0 0

30、小于小于1 1的隨機(jī)數(shù)。的隨機(jī)數(shù)。n使用下述公式:使用下述公式: int i=(int)(Math.random()int i=(int)(Math.random()* *number);number);可以產(chǎn)生一個可以產(chǎn)生一個0 0到到numbernumber之間的隨機(jī)數(shù)。之間的隨機(jī)數(shù)。n根據(jù)這個隨機(jī)數(shù),將游標(biāo)移動到相應(yīng)的行,根據(jù)這個隨機(jī)數(shù),將游標(biāo)移動到相應(yīng)的行,并輸出該行記錄。并輸出該行記錄。n參見教材參見教材P401P401例題例題15.615.615.8 更新、添加、刪除記錄更新、添加、刪除記錄n使用使用SQLSQL語句更新記錄中字段的值語句更新記錄中字段的值nStatementSta

31、tement對象調(diào)用方法:對象調(diào)用方法: public int executeUpdate(String sqlStatementpublic int executeUpdate(String sqlStatement); ;通過參數(shù)通過參數(shù)sqlStatementsqlStatement指定的方式實(shí)現(xiàn)對指定的方式實(shí)現(xiàn)對數(shù)據(jù)庫表中記錄的字段值的更新。數(shù)據(jù)庫表中記錄的字段值的更新。nSQLSQL更新操作常用命令:更新操作常用命令: UPDATEUPDATE INSERT INSERT DELETE DELETESQLSQL更新操作常用命令:更新操作常用命令:nUPDATEUPDATE:UPDAT

32、E ScoreTableUPDATE ScoreTable SET math=88SET math=88 WHERE name= WHERE name=錢二錢二 nINSERTINSERT:INSERT INTO ScoreTable INSERT INTO ScoreTable VALUES(VALUES(2005008,1989-2005008,1989-12-02,12-02,劉明明劉明明,70,95,70,95) )nDELETEDELETE:DELETE FROM ScoreTable DELETE FROM ScoreTable WHERE number=2003004WHERE

33、number=2003004課堂練習(xí):n編寫程序,完成如下數(shù)據(jù)庫操作:編寫程序,完成如下數(shù)據(jù)庫操作:將將錢大能錢大能的英文成績改為的英文成績改為66分;分;插入記錄插入記錄(2005006,李向陽李向陽,1934-12-02,96,91)刪除學(xué)號為刪除學(xué)號為2003002的學(xué)生的信息記錄的學(xué)生的信息記錄課堂練習(xí):n編寫一個編寫一個學(xué)生成績查詢系統(tǒng)學(xué)生成績查詢系統(tǒng):15.9 預(yù)處理語句預(yù)處理語句 n當(dāng)向數(shù)據(jù)庫發(fā)送一個當(dāng)向數(shù)據(jù)庫發(fā)送一個SQLSQL語句后語句后,比如:,比如:“Select Select * * From chengjibiao” From chengjibiao”首先,數(shù)據(jù)庫庫中

34、的首先,數(shù)據(jù)庫庫中的SQLSQL解釋器負(fù)責(zé)將把解釋器負(fù)責(zé)將把SQLSQL語句語句生成底層的內(nèi)部命令生成底層的內(nèi)部命令然后,執(zhí)行該命令,完成有關(guān)的數(shù)據(jù)操作。然后,執(zhí)行該命令,完成有關(guān)的數(shù)據(jù)操作。n潛在的問題潛在的問題:如果應(yīng)用程序不斷地向數(shù)據(jù)庫:如果應(yīng)用程序不斷地向數(shù)據(jù)庫提交提交SQLSQL語句,勢必會語句,勢必會增加數(shù)據(jù)庫中增加數(shù)據(jù)庫中SQLSQL解釋解釋器的負(fù)擔(dān)器的負(fù)擔(dān),影響執(zhí)行的速度。,影響執(zhí)行的速度。15.9 預(yù)處理語句預(yù)處理語句 n預(yù)處理:預(yù)處理:首先,應(yīng)用程序針對連接的數(shù)據(jù)庫,首先,應(yīng)用程序針對連接的數(shù)據(jù)庫,事先將事先將SQLSQL語句解釋為數(shù)據(jù)庫底層的內(nèi)部命令語句解釋為數(shù)據(jù)庫底層的

35、內(nèi)部命令;然后,直接讓數(shù)據(jù)庫去執(zhí)行這個命令。然后,直接讓數(shù)據(jù)庫去執(zhí)行這個命令。n優(yōu)點(diǎn):優(yōu)點(diǎn):不僅減輕了數(shù)據(jù)庫的負(fù)擔(dān);不僅減輕了數(shù)據(jù)庫的負(fù)擔(dān);而且也提高了訪問數(shù)據(jù)庫的速度。而且也提高了訪問數(shù)據(jù)庫的速度。n對于對于JDBCJDBC,如果使用,如果使用ConnectionConnection和某個數(shù)據(jù)庫建立和某個數(shù)據(jù)庫建立了連接對象了連接對象concon,那么,那么concon就可以調(diào)用就可以調(diào)用prepareStatement(String sql)prepareStatement(String sql) 方法對方法對SQLSQL語句進(jìn)行語句進(jìn)行預(yù)編譯處理預(yù)編譯處理;n預(yù)編譯處理后,會生成該數(shù)據(jù)庫

36、底層的內(nèi)部命令,預(yù)編譯處理后,會生成該數(shù)據(jù)庫底層的內(nèi)部命令,并將該命令封裝在并將該命令封裝在PreparedStatementPreparedStatement對象中;對象中;n那么該對象調(diào)用下列方法,都可以使得該底層的內(nèi)那么該對象調(diào)用下列方法,都可以使得該底層的內(nèi)部命令被數(shù)據(jù)庫執(zhí)行部命令被數(shù)據(jù)庫執(zhí)行:execute(); executeQuery(); executeUpdate()execute(); executeQuery(); executeUpdate()15.9 預(yù)處理語句預(yù)處理語句 nPreparedStatementPreparedStatement對象可調(diào)用的方法:對象可調(diào)

37、用的方法:execute()execute():可執(zhí)行:可執(zhí)行SQLSQL任何命令任何命令executeQuery()executeQuery():執(zhí)行查詢命令:執(zhí)行查詢命令executeUpdate()executeUpdate():執(zhí)行更新、插入或刪除命令:執(zhí)行更新、插入或刪除命令n只要編譯好了只要編譯好了PrepareedStatementPrepareedStatement對象,那么對象,那么該對象可以隨時的執(zhí)行上述方法,顯然提高了該對象可以隨時的執(zhí)行上述方法,顯然提高了訪問數(shù)據(jù)庫的速度訪問數(shù)據(jù)庫的速度15.9 預(yù)處理語句預(yù)處理語句 n參見教材參見教材P401P401例題例題15.615.6con = DriverManager.getConnection con = DriverManager

溫馨提示

  • 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

提交評論