JSP數(shù)據(jù)庫核心技術(shù)課件_第1頁
JSP數(shù)據(jù)庫核心技術(shù)課件_第2頁
JSP數(shù)據(jù)庫核心技術(shù)課件_第3頁
JSP數(shù)據(jù)庫核心技術(shù)課件_第4頁
JSP數(shù)據(jù)庫核心技術(shù)課件_第5頁
已閱讀5頁,還剩67頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

思考:”程序”+?+”數(shù)據(jù)庫”思考:”程序”+?+”數(shù)據(jù)庫”1關(guān)系圖1應(yīng)用程序、JDBC和驅(qū)動程序之間的關(guān)系關(guān)系圖1應(yīng)用程序、JDBC和驅(qū)動程序之間的關(guān)系2JDBCAPI結(jié)構(gòu)圖其它數(shù)據(jù)庫MysqlOracleJAVA應(yīng)用程序Oracle驅(qū)動程序Mysql驅(qū)動程序ODBC驅(qū)動程序JDBC-ODBC驅(qū)動DriverManager(驅(qū)動程序管理器)Statement接口(更新SQL語句)PreparedStatement(預(yù)編譯)CallableStatement(存儲過程)ResultSet(數(shù)據(jù)集)ResultSet(數(shù)據(jù)集)ResultSet(數(shù)據(jù)集)JDBCAPI結(jié)構(gòu)圖其它數(shù)據(jù)庫MysqlOracleJAV3第6章(2)

JSP操作數(shù)據(jù)庫核心技術(shù)第6章(2)JSP操作數(shù)據(jù)庫核心技術(shù)4內(nèi)容摘要

JDBC技術(shù)是Web程序開發(fā)的重要組成部分。在網(wǎng)絡(luò)技術(shù)蓬勃發(fā)展的時代,數(shù)據(jù)庫扮演著非常重要的角色;因此,數(shù)據(jù)庫操作是程序應(yīng)用的最重要技術(shù)之一。如何獲取數(shù)據(jù)、增加數(shù)據(jù)、刪除數(shù)據(jù)以及如何對數(shù)據(jù)庫進(jìn)行管理,是每個程序開發(fā)者必須面對的問題。為了使程序開發(fā)人員不必考慮所用的數(shù)據(jù)庫更方便開發(fā)應(yīng)用程序,Java平臺提供了一個標(biāo)準(zhǔn)的數(shù)據(jù)庫訪問接口集——JDBCAPI。本章主要介紹JDBC的基本概念和相關(guān)接口,如何使用JDBC提供的接口操作數(shù)據(jù)庫,使用預(yù)編譯語句等。內(nèi)容摘要JDBC技術(shù)是Web程序開發(fā)的重要組5學(xué)習(xí)目標(biāo)掌握J(rèn)DBC的概念掌握J(rèn)DBCAPI常用的接口和方法熟練掌握使用不同方式連接數(shù)據(jù)庫熟練掌握數(shù)據(jù)庫的更新操作熟練掌握數(shù)據(jù)庫的顯示和查詢操作熟練掌握數(shù)據(jù)庫分頁顯示掌握預(yù)編譯語句的處理掌握獲取數(shù)據(jù)庫系統(tǒng)信息學(xué)習(xí)目標(biāo)掌握J(rèn)DBC的概念66.1JDBC技術(shù)

JDBC(JavaDataBaseConnectivity)是一套面向?qū)ο蟮膽?yīng)用程序接口,它制定了統(tǒng)一的訪問各類關(guān)系數(shù)據(jù)庫的標(biāo)準(zhǔn)接口,為各個數(shù)據(jù)庫廠商提供了標(biāo)準(zhǔn)接口的實(shí)現(xiàn)。通過使用JDBC技術(shù),開發(fā)人員可以用純Java語言和標(biāo)準(zhǔn)的SQL語句編寫完整的數(shù)據(jù)庫應(yīng)用程序,并且真正的實(shí)現(xiàn)了軟件的跨平臺型。

JDBC技術(shù)簡介

6.1JDBC技術(shù)JDBC7JDBC概述在JSP技術(shù)中,對數(shù)據(jù)庫的操作都是通過JDBC組件完成的。JDBC在Java腳本程序和數(shù)據(jù)庫之間充當(dāng)了一個橋梁的作用。Java腳本程序可以通過JDBC組件向數(shù)據(jù)庫發(fā)出命令,數(shù)據(jù)庫管理系統(tǒng)獲得命令后,執(zhí)行請求,并將請求結(jié)果通過JDBC返回給Java程序。JDBC是Sun公司提供的一套數(shù)據(jù)庫編程接口API函數(shù),由Java語言編寫的類。使用JDBC開發(fā)的程序能夠自動地將SQL語句傳送給相應(yīng)的數(shù)據(jù)庫管理系統(tǒng)。不但如此,使用Java編寫的應(yīng)用程序可以在任何支持Java的平臺上運(yùn)行,不必在不同的平臺上編寫不同的應(yīng)用。Java和JDBC的結(jié)合可以讓開發(fā)人員在開發(fā)數(shù)據(jù)庫應(yīng)用程序時真正實(shí)現(xiàn)“WriteOnce,RunEverywhere!”JDBC概述在JSP技術(shù)中,對數(shù)據(jù)庫的操作都是通過JDBC組8JDBC概述圖1應(yīng)用程序、JDBC和驅(qū)動程序之間的關(guān)系JDBC概述圖1應(yīng)用程序、JDBC和驅(qū)動程序之間的關(guān)系9JDBC概述通過JDBC組件對數(shù)據(jù)庫進(jìn)行操作所需的類庫JDBCAPI,包含在兩個包里。第一個包是java.sql,包含了JDBCAPI的核心類和接口,它們指定具體操作而不提供任何實(shí)現(xiàn)。實(shí)際的實(shí)現(xiàn)由第三方提供商提供。包括為DBMS(數(shù)據(jù)庫管理系統(tǒng))連接和存儲在DBMS里的數(shù)據(jù)進(jìn)行交互而提供的Java數(shù)據(jù)對象。另一個包含JDBCAPI的包是javax.sql,它擴(kuò)展了java.sql,是J2EE/JavaEE的一部分。除其他高級JDBC特性外javax.sql還包含了那些與Java命名與目錄接口(JNDI)進(jìn)行交互Java數(shù)據(jù)對象,以及管理連接池的Java數(shù)據(jù)對象。JDBC概述通過JDBC組件對數(shù)據(jù)庫進(jìn)行操作所需的類庫JD10JDBC的主要操作類及接口NO.類及接口描述1java.sql.Driver定義一個數(shù)據(jù)庫驅(qū)動程序的接口2java.sql.DriverManager用于管理JDBC驅(qū)動程序3java.sql.Connection用于建立與特定數(shù)據(jù)庫的連接,一個連接就是一個會話,建立連接后便可以執(zhí)行SQL語句和獲得檢索結(jié)果4java.sql.Statement一個Statement對象用于執(zhí)行靜態(tài)SQL語句,并獲得語句執(zhí)行后產(chǎn)生的結(jié)果5java.sql.PreparedStatement創(chuàng)建一個可以編譯的SQL語句對象,該對象可以被多次運(yùn)行,以提高執(zhí)行的效率,該接口是Statement的子接口6java.sql.ResultSet用于創(chuàng)建表示SQL語句檢索結(jié)果的結(jié)果集,用戶通過結(jié)果集完成對數(shù)據(jù)庫的訪問7java.sql.CallableStatement用于執(zhí)行SQL存儲過程8java.sql.SQLException對數(shù)據(jù)庫訪問時產(chǎn)生的錯誤的描述信息JDBC的主要操作類及接口NO.類及接口描述1java.sq11JDBC的主要操作類及接口NO.類及接口描述9java.sql.Date該類是標(biāo)準(zhǔn)java.util.Date的一個子集,用于表示與SQLDATE相同的日期類型,該日期不包括時間10java.sql.Time該類是標(biāo)準(zhǔn)java.util.Date的一個子集,用于表示時、分、秒11java.sql.DataTruncation在JDBC遇到數(shù)據(jù)截斷的異常時,報告一個警告(讀數(shù)據(jù)時)或產(chǎn)生一個異常(寫數(shù)據(jù)時)12java.sql.DrivaerPropertyInfo高級程序設(shè)計人員通過DriverPropertInfo與Driver進(jìn)行交流,可使用getDriverPropertyInfo獲取或提供驅(qū)動程序的信息13java.sql.Timestamp標(biāo)準(zhǔn)java.util.Date類的擴(kuò)展,用于表示SQL時間戳,并增加了一個能表示納秒的時間域14java.sql.DatabaseMetaData與java.sql.ResultSetMetaData一同用于訪問數(shù)據(jù)庫的元信息15java.sql.SQLWarning對數(shù)據(jù)庫訪問時產(chǎn)生的警告的描述信息16java.sql.Types定義了表示SQL類型的常量JDBC的主要操作類及接口NO.類及接口描述9java.sq12JDBCAPI結(jié)構(gòu)圖其它數(shù)據(jù)庫MysqlOracleJAVA應(yīng)用程序Oracle驅(qū)動程序Mysql驅(qū)動程序ODBC驅(qū)動程序JDBC-ODBC驅(qū)動DriverManager(驅(qū)動程序管理器)Statement接口(更新SQL語句)PreparedStatement(預(yù)編譯)CallableStatement(存儲過程)ResultSet(數(shù)據(jù)集)ResultSet(數(shù)據(jù)集)ResultSet(數(shù)據(jù)集)JDBCAPI結(jié)構(gòu)圖其它數(shù)據(jù)庫MysqlOracleJAV13JDBCAPI介紹DriverManagerDriverManager類是JDBC的管理層,作用于用戶和驅(qū)動程序之間。跟蹤可用的驅(qū)動程序,并在數(shù)據(jù)庫和相應(yīng)驅(qū)動程序之間建立連接。另外,DriverManager類也處理諸如驅(qū)動程序登錄時間限制及登錄和跟蹤消息的顯示等事務(wù)。ConnectionConnection對象代表與數(shù)據(jù)庫的連接。連接過程包括所執(zhí)行的SQL語句和在該連接上所返回的結(jié)果。一個應(yīng)用程序可與單個數(shù)據(jù)庫有一個或多個連接,或者可與許多數(shù)據(jù)庫有連接。JDBCAPI介紹DriverManager14JDBCAPI介紹StatementStatement對象用于將SQL語句發(fā)送到數(shù)據(jù)庫中。實(shí)際上有三種Statement對象:Statement、PreparedStatement(它從Statement繼承而來)和CallableStatement(它從PreparedStatement繼承而來)。Statement對象用于執(zhí)行不帶參數(shù)的簡單SQL語句;PreparedStatement對象用于執(zhí)行帶或不帶IN參數(shù)的預(yù)編譯SQL語句;CallableStatement對象用于執(zhí)行對數(shù)據(jù)庫已存儲過程的調(diào)用。Statement接口提供了執(zhí)行語句和獲取結(jié)果的基本方法。PreparedStatement接口添加處理IN參數(shù)的方法;而CallableStatement添加處理OUT參數(shù)的方法。JDBCAPI介紹Statement15JDBCAPI介紹

ResultSet使用Statement對象執(zhí)行executeQuery()方法,將會返回一個數(shù)據(jù)庫的結(jié)果集。結(jié)果集一般是一個表,其中有查詢所返回的列標(biāo)題及相應(yīng)的值。ResultSet記錄集中包含符合SQL語句中條件的所有行,并且它通過一套get方法(這些get方法可以訪問當(dāng)前行中的不同列)提供對這些行中數(shù)據(jù)的訪問。ResultSet使用next方法用于移動到ResultSet中的下一行,使下一行成為當(dāng)前行。JDBCAPI介紹ResultSet16JDBC操作步驟及數(shù)據(jù)庫連接操作JDBC操作步驟及數(shù)據(jù)庫連接操作17本小節(jié)目標(biāo)掌握J(rèn)DBC的操作步驟掌握數(shù)據(jù)庫驅(qū)動程序的配置方法可以使用JDBC進(jìn)行數(shù)據(jù)庫連接本小節(jié)目標(biāo)掌握J(rèn)DBC的操作步驟18JDBC操作步驟1、加載數(shù)據(jù)庫驅(qū)動程序各個數(shù)據(jù)庫都提供JDBC的驅(qū)動程序開發(fā)包,直接把JDBC操作所需要的開發(fā)包(一般為*.jar或*.zip)直接配置到classpath路徑即可。2、連接數(shù)據(jù)庫根據(jù)各個數(shù)據(jù)庫廠商提供的不同連接地址完成數(shù)據(jù)庫地址的連接,并提供連接數(shù)據(jù)庫的用戶名和密碼。3、使用語句進(jìn)行數(shù)據(jù)庫操作數(shù)據(jù)庫操作分為更新和查詢兩種,可以使用標(biāo)準(zhǔn)的SQL語句完成。4、關(guān)閉數(shù)據(jù)庫連接關(guān)閉連接以釋放資源JDBC操作步驟1、加載數(shù)據(jù)庫驅(qū)動程序19JDBC操作步驟JDBC操作步驟20使用純Java數(shù)據(jù)庫驅(qū)動程序連接這種驅(qū)動利用作為中間件的應(yīng)用服務(wù)器來訪問數(shù)據(jù)庫。應(yīng)用服務(wù)器作為一個到多個數(shù)據(jù)庫的網(wǎng)關(guān),客戶端通過它可以連接到不同的數(shù)據(jù)庫服務(wù)器。應(yīng)用服務(wù)器通常都有自己的網(wǎng)絡(luò)協(xié)議,Java客戶端程序通過JDBC驅(qū)動程序?qū)DBC調(diào)用發(fā)送給應(yīng)用服務(wù)器,應(yīng)用服務(wù)器使用本地驅(qū)動程序訪問數(shù)據(jù)庫,從而完成請求。如圖所示。使用純Java數(shù)據(jù)庫驅(qū)動程序連接這種驅(qū)動利用作為中間件的應(yīng)用21使用JDBC-ODBC橋接器連接因?yàn)槲④浌就瞥龅腛DBC比JDBC出現(xiàn)的時間要早,所以絕大多數(shù)的數(shù)據(jù)庫都可以通過ODBC來訪問,當(dāng)Sun公司推出JDBC的時候,為了支持更多的數(shù)據(jù)庫提供了JDBC-ODBC橋。利用JDBC-ODBC訪問數(shù)據(jù)庫,需要客戶的機(jī)器具有JDBC-ODBC橋驅(qū)動。ODBC驅(qū)動程序和相應(yīng)數(shù)據(jù)庫的本地API。在JDK中,提供JDBC-ODBC橋的實(shí)現(xiàn)類(sun.jdbc.odbc.JdbcOdbcDriver類)。這種橋機(jī)制實(shí)際上是把標(biāo)準(zhǔn)的JDBC調(diào)用轉(zhuǎn)換成相應(yīng)的ODBC調(diào)用,并通過ODBC庫把它們發(fā)送給支持ODBC對象的數(shù)據(jù)庫,如圖所示。使用JDBC-ODBC橋接器連接因?yàn)槲④浌就瞥龅腛DBC22JDBC的主要操作類及接口NO.類及接口描述1java.sql.Driver定義一個數(shù)據(jù)庫驅(qū)動程序的接口2java.sql.DriverManager用于管理JDBC驅(qū)動程序3java.sql.Connection用于建立與特定數(shù)據(jù)庫的連接,一個連接就是一個會話,建立連接后便可以執(zhí)行SQL語句和獲得檢索結(jié)果4java.sql.Statement一個Statement對象用于執(zhí)行靜態(tài)SQL語句,并獲得語句執(zhí)行后產(chǎn)生的結(jié)果5java.sql.PreparedStatement創(chuàng)建一個可以編譯的SQL語句對象,該對象可以被多次運(yùn)行,以提高執(zhí)行的效率,該接口是Statement的子接口6java.sql.ResultSet用于創(chuàng)建表示SQL語句檢索結(jié)果的結(jié)果集,用戶通過結(jié)果集完成對數(shù)據(jù)庫的訪問7java.sql.CallableStatement用于執(zhí)行SQL存儲過程8java.sql.SQLException對數(shù)據(jù)庫訪問時產(chǎn)生的錯誤的描述信息JDBC的主要操作類及接口NO.類及接口描述1java.sq23驅(qū)動器接口:Driver某個數(shù)數(shù)據(jù)庫的驅(qū)動名稱將驅(qū)動設(shè)置為Srting類型Driver類加載驅(qū)動名稱拋出ClassNotFoundException執(zhí)行其它操作判斷YN驅(qū)動器接口:Driver某個數(shù)數(shù)據(jù)庫的驅(qū)動名稱將驅(qū)動設(shè)置為24驅(qū)動管理類:DriverManager負(fù)責(zé)管理JDBC驅(qū)動程序的基本服務(wù),作用于用戶和驅(qū)動程序之間,負(fù)責(zé)追蹤可用的驅(qū)動程序,并在數(shù)據(jù)庫和相應(yīng)驅(qū)動程序之間建立連接。另外,DriverManager類也處理驅(qū)動程序登錄時間限制及登錄和跟蹤消息的顯示等事務(wù)。NO.方法描述1publicstaticConnection

getConnection(Stringurl)throwsSQLException通過連接地址連接數(shù)據(jù)庫2publicstaticConnection

getConnection(Stringurl,Stringuser,Stringpassword)throwsSQLException通過連接地址連接數(shù)據(jù)庫,同時輸入用戶名和密碼驅(qū)動管理類:DriverManager負(fù)責(zé)管理JDBC驅(qū)動25MySQL數(shù)據(jù)庫的連接地址格式j(luò)dbc:mysql://IP地址:端口號/數(shù)據(jù)庫名稱jdbc協(xié)議:JDBCURL中的協(xié)議總是jdbc子協(xié)議:驅(qū)動程序名或數(shù)據(jù)庫連接機(jī)制,例如:mysql子名稱:一種標(biāo)識數(shù)據(jù)庫的方法。必須遵循"http://主機(jī)各:端口/子協(xié)議"的標(biāo)準(zhǔn)URL命名約定,例如://localhost:3306/MySQL數(shù)據(jù)庫的連接地址格式26數(shù)據(jù)庫驅(qū)動程序

數(shù)據(jù)庫名稱類包名驅(qū)動名稱與URL地址SQLServer2000msbase.jar、mssqlserver.jar、msutil.jarcom.microsoft.jdbc.sqlserver.SQLServerDriverjdbc:microsoft:sqlserver://localhost:1433;DatabaseName=數(shù)據(jù)庫名稱SQLServer2005sqljdbc.jarcom.microsoft.sqlserver.jdbc.SQLServerDriverjdbc:sqlserver://localhost:1433;databaseName=數(shù)據(jù)庫名稱MYSQLmysql-connector-java-3.0.16-ga-bin.jarcom.mysql.jdbc.Driverjdbc:mysql://localhost:3306/數(shù)據(jù)庫名稱oracleclass12.jaroracle.jdbc.driver.OracleDriverjdbc:oracle:thin:@dssw2k01:1521:數(shù)據(jù)庫名稱DB2db2jcc.jar.DB2Driverjdbc:db2://localhost:6589/數(shù)據(jù)庫名稱Derbyderby.jarorg.apache.derby.jdbc.EmbeddedDriverjdbc:derby://localhost:1525:數(shù)據(jù)庫名稱;create=false數(shù)據(jù)庫驅(qū)動程序數(shù)據(jù)庫名稱類包名驅(qū)動名稱與URL地址SQL27Access數(shù)據(jù)庫的連接Access數(shù)據(jù)庫管理系統(tǒng)是MicrosoftOffice系統(tǒng)軟件中的一個重要組成部分,它是一個關(guān)系型桌面數(shù)據(jù)庫管理系統(tǒng),可以用來建立中、小型的數(shù)據(jù)庫應(yīng)用系統(tǒng),應(yīng)用非常廣泛。同時,由于Access數(shù)據(jù)庫操作簡單、使用方便等特點(diǎn),許多小型的Web應(yīng)用程序也采用Access數(shù)據(jù)庫。Access數(shù)據(jù)庫的驅(qū)動為:StringdriverClass="sun.jdbc.odbc.JdbcOdbcDriver";

連接Access數(shù)據(jù)庫需要通過JDBC-ODBC方式,不需要引入任何包。連接Access數(shù)據(jù)庫的URL為:Stringurl="jdbc:odbc:driver={MicrosoftAccessDriver(*.mdb)};DBQ=數(shù)據(jù)庫名";Access數(shù)據(jù)庫的連接Access數(shù)據(jù)庫管理系28執(zhí)行數(shù)據(jù)庫更新操作執(zhí)行數(shù)據(jù)庫更新操作29本節(jié)目標(biāo)可以使用Connection對象取得Statement實(shí)例可以使用Statement進(jìn)行數(shù)據(jù)增加、修改、刪除操作本節(jié)目標(biāo)可以使用Connection對象取得Statemen30數(shù)據(jù)庫連接接口:Connectionjava.sql.Connection接口表示與特定數(shù)據(jù)庫的連接,并在連接的上下文中可以執(zhí)行SQL語句并返回結(jié)果。通過Connection對象可以獲取一個數(shù)據(jù)庫和表等數(shù)據(jù)庫對象的詳細(xì)信息。數(shù)據(jù)庫連接接口:Connectionjava.sql.C31Connection接口中常用的方法NO.方法描述1StatementcreateStatement()throwsSQLException創(chuàng)建一個Statement對象2-1PreparedStatementprepareStatement(Stringsql)throwsSQLException創(chuàng)建一個PreparedStatement類型的對象2-2PreparedStatementprepareStatement(Stringsql,intresultSetType,intresultSetConcurrency)throwsSQLException創(chuàng)建一個PreparedStatement類型的對象,為了使用JDBC2.0中創(chuàng)建可滾動的結(jié)果集3CallableStatementprepareCall(Stringsql)throwsSQLException創(chuàng)建一個CallableStatement對象,此對象專門用于調(diào)用數(shù)據(jù)庫的存儲過程4booleanisClosed()throwsSQLException判斷連接是否已關(guān)閉5voidclose()throwsSQLException關(guān)閉數(shù)據(jù)庫Connection接口中常用的方法NO.方法描述1Stat32執(zhí)行靜態(tài)SQL語句接口:Statementjava.sql.Statement接口用來執(zhí)行靜態(tài)的SQL語句,并返回執(zhí)行結(jié)果。處理靜態(tài)的SQL語句主要分為3種Statement對象:Statement、PreparedStatement、CallableStatement。它們作為在指定連接上執(zhí)行SQL語句的容器。這3種Statement對象的關(guān)系如圖所示。執(zhí)行靜態(tài)SQL語句接口:Statementjava.sql.33執(zhí)行靜態(tài)SQL語句接口:StatementNO.方法描述1intexecuteUpdate(Stringsql)throwsSQLException執(zhí)行數(shù)據(jù)庫更新的SQL語句,例如:insert、update、delete等語句,返回更新的記錄數(shù)2ResultSetexecuteQuery(Stringsql)throwsSQLexception執(zhí)行數(shù)據(jù)庫查詢操作,返回一個結(jié)果集對象,例如,執(zhí)行SELECT查詢語句3voidaddBatch(Stringsql)throwsSQLExeption增加一個待執(zhí)行的SQL語句4int[]executeBatch()throwsSQLException批量執(zhí)行SQL語句5voidclose()throwsSQLException關(guān)閉Statement操作6booleanexecute(Stringsql)throwsSQLException執(zhí)行SQL語句執(zhí)行靜態(tài)SQL語句接口:StatementNO.方法描述1i34RESULTSET接口RESULTSET接口35本小節(jié)目標(biāo)掌握ResultSet接口的主要作用使用ResultSet接口查詢數(shù)據(jù)本小節(jié)目標(biāo)掌握ResultSet接口的主要作用36返回查詢結(jié)果集接口:ResultSet

java.sql.ResultSet接口類似于一個數(shù)據(jù)表,通過該接口的實(shí)例可以獲得檢索結(jié)果集以及對應(yīng)的數(shù)據(jù)表相關(guān)信息。Result實(shí)例通過執(zhí)行查詢數(shù)據(jù)庫的語句生成。一個Statement對象在同一時刻只能打開一個ResultSet對象??梢酝ㄟ^字段的序號或者字段的名字來制定獲取某個字段的值。返回查詢結(jié)果集接口:ResultSetjava.sql.R37執(zhí)行靜態(tài)SQL語句接口:StatementNO.方法描述1intexecuteUpdate(Stringsql)throwsSQLException執(zhí)行數(shù)據(jù)庫更新的SQL語句,例如:insert、update、delete等語句,返回更新的記錄數(shù)2ResultSetexecuteQuery(Stringsql)throwsSQLexception執(zhí)行數(shù)據(jù)庫查詢操作,返回一個結(jié)果集對象,例如,執(zhí)行SELECT查詢語句3voidaddBatch(Stringsql)throwsSQLExeption增加一個待執(zhí)行的SQL語句4int[]executeBatch()throwsSQLException批量執(zhí)行SQL語句5voidclose()throwsSQLException關(guān)閉Statement操作6booleanexecute(Stringsql)throwsSQLException執(zhí)行SQL語句執(zhí)行靜態(tài)SQL語句接口:StatementNO.方法描述1i38ResultSet接口的常用操作方法NO.方法描述1Booleannext()throwsSQLException將指針移到下一行2IntgetInt(intcolumnIndex)throwsSQLException以整數(shù)形式按列的編號取得指定列的內(nèi)容3IntgetInt(StringcolumnName)throwsSQLException以整數(shù)形式取得指定列的內(nèi)容4FloatgetFloat(intcolumnIndex)throwsSQLException以浮點(diǎn)數(shù)形式按列的編號取得指定列的內(nèi)容5FloatgetFloat(StringcolumnName)throwsSQLException浮點(diǎn)數(shù)形式取得指定列的內(nèi)容6StringgetString(intcolumnIndex)throwsSQLException以字符串形式按列的編號取得指定列的內(nèi)容7StringgetString(StringcolumnName)throwsSQLException字符串形式取得指定列的內(nèi)容8DategetDate(intcolumnIndex)throwsSQLException以Date形式按列的編號取得指定列的內(nèi)容9DategetDate(StringcolumnName)throwsSQLException以Date形式取得指定列的內(nèi)容ResultSet接口的常用操作方法NO.方法描述1Bool39PREPAREDSTATEMENT接口PREPAREDSTATEMENT接口40本小節(jié)目標(biāo)掌握PreparedStatement接口的工作原理可以使用PreparedStatement進(jìn)行數(shù)據(jù)庫的更新及查詢操作本小節(jié)目標(biāo)掌握PreparedStatement接口的工作原41執(zhí)行預(yù)編譯的SQL語句接口:PreparedStatementPreparedStatement接口繼承并擴(kuò)展了Statement接口,用來執(zhí)行動態(tài)的SQL語句。與直接使用Statement不同的是,PreparedStatement在操作時,是先在數(shù)據(jù)表之中準(zhǔn)備好一條SQL語句,但是此SQL語句的具體內(nèi)容暫時不設(shè)置,而是之后再進(jìn)行設(shè)置,以插入數(shù)據(jù)為例:執(zhí)行預(yù)編譯的SQL語句接口:PreparedStatemen42執(zhí)行預(yù)編譯的SQL語句接口:PreparedStatement1、創(chuàng)建PreparedStatement對象例如,創(chuàng)建包含帶兩個參數(shù)占位符的SQL語句PreparedStatement對象:PreparedStatementpstmt=con.prepareStatement("UPDATEwy_tableSETm=?WHEREx=?");2、傳遞多參數(shù)例如,將第一個參數(shù)設(shè)為“王”,第二個參數(shù)設(shè)為“毅”:pstmt.setString(1,“王”);pstmt.setString(2,“毅”);執(zhí)行預(yù)編譯的SQL語句接口:PreparedStatemen43PreparedStatement的基本操作方法NO.方法描述1intexecuteUpdate()throwsSQLException執(zhí)行設(shè)置的預(yù)處理SQL語句2voidsetInt(intparameterIndex,intx)throwsSQLException指定索引編號,并設(shè)置整數(shù)內(nèi)容3voidsetFloat(intparameterIndex,floatx)throwsSQLException指定索引編號,并設(shè)置浮點(diǎn)數(shù)內(nèi)容4voidsetString(intparameterIndex,Stringx)throwsSQLException指定索引編號,并設(shè)置字符串內(nèi)容5voidsetDate(intparameterIndex,Datex)throwsSQLException指定索引編號,并設(shè)置java.sql.Date類型的日期內(nèi)容PreparedStatement的基本操作方法NO.方法描44注意:關(guān)于日期的輸入問題:在正常情況下都使用java.util.Date表示日期,但是在PreparedStatement中如果要想使用日期則改須使用java.sql.Date類型。Stringbirthday="2007-08-27"; //生日java.util.Datetemp=null;//聲明一個Date對象temp=newSimpleDateFormat("yyyy-MM-dd").parse(birthday);//通過SimpleDateFormat類將字符串變?yōu)閖ava.util.Date類型java.sql.Datebir=newjava.sql.Date(temp.getTime());//通過java.util.Date取出具體的日期數(shù),并將其變?yōu)閖ava.sql.Date類型注意:45CALLABLESTATEMENT存儲過程接口CALLABLESTATEMENT存儲過程接口46處理存儲過程語句接口:CallableStatement(1)

CallableStatement對象為所有的關(guān)系性數(shù)據(jù)庫提供了一種以標(biāo)準(zhǔn)形式調(diào)用已儲存過程的方法。該對象可以處理兩種形式的存儲過程:一種形式帶結(jié)果參數(shù),另一種形式不帶結(jié)果參數(shù)。結(jié)果參數(shù)是一種輸出參數(shù),是已儲存過程的返回值。兩種形式都可帶有數(shù)量可變的輸入、輸出或輸入和輸出的參數(shù)。問號將用作參數(shù)的占位符。在JDBC中,調(diào)用存儲過程的語法如下:{call過程名[(?,?,...)]}返回結(jié)果參數(shù)的過程的語法如下:{?=call過程名[(?,?,...)]}處理存儲過程語句接口:CallableStatement(47處理存儲過程語句接口:CallableStatement(2)1.創(chuàng)建CallableStatement對象CallableStatement對象是用Connection類中的prepareCall()方法創(chuàng)建。其中,存在有兩個變量,不含結(jié)果參數(shù)代碼設(shè)置如下:CallableStatementcstmt=con.prepareCall("{callgetTestData(?,?)}");2.輸入和輸出參數(shù)將輸入?yún)?shù)傳給CallableStatement對象是通過setXXX()方法完成的。如果存儲過程返回的是輸出參數(shù),則在執(zhí)行CallableStatement對象前必須先注冊每個輸出參數(shù)的JDBC類型。注冊JDBC類型是用registerOutParameter()方法來完成的。語句執(zhí)行完后,CallableStatement的getXXX()方法將取回參數(shù)值。例如:處理存儲過程語句接口:CallableStatement(48處理存儲過程語句接口:CallableStatement(2)CallableStatementcstmt=con.prepareCall("{callgetTestData(?,?)}");cstmt.registerOutParameter(1,java.sql.Types.TINYINT);cstmt.registerOutParameter(2,java.sql.Types.DECIMAL,3); cstmt.executeQuery();//從第1個輸出參數(shù)中取出一個Java字節(jié)bytex=cstmt.getByte(1);//從第2個輸出參數(shù)中取出一個BigDecimal對象(小數(shù)點(diǎn)后面帶3位)java.math.BigDecimaln=cstmt.getBigDecimal(2,3);3.執(zhí)行存儲過程當(dāng)設(shè)置完存儲過程的參數(shù)后,就可以通過CallableStatement類中的方法執(zhí)行該存儲過程。CallableStatement類執(zhí)行存儲過程的方法如同Statement方法。處理存儲過程語句接口:CallableStatement(49JDBC2.0中RESULTSET操作JDBC2.0中RESULTSET操作50本小節(jié)目標(biāo)了解JDBC2.0提供的主要新特性掌握可滾動結(jié)果集的操作掌握結(jié)果集的增加、修改、刪除操作了解批處理操作本小節(jié)目標(biāo)了解JDBC2.0提供的主要新特性51在JDBC2.0,加強(qiáng)了結(jié)果集ResultSet的功能,可以直接使用ResultSet執(zhí)行更新的操作,或者實(shí)現(xiàn)雙向滾動。JDBC2.0加強(qiáng)了批處理數(shù)據(jù)的操作在JDBC2.0,加強(qiáng)了結(jié)果集ResultSet的功能,可52思考:JDBC結(jié)構(gòu)圖思考:JDBC結(jié)構(gòu)圖53JDBCAPI結(jié)構(gòu)圖其它數(shù)據(jù)庫MysqlOracleJAVA應(yīng)用程序Oracle驅(qū)動程序Mysql驅(qū)動程序ODBC驅(qū)動程序JDBC-ODBC驅(qū)動DriverManager(驅(qū)動程序管理器)Statement接口(更新SQL語句)PreparedStatement(預(yù)編譯)CallableStatement(存儲過程)ResultSet(數(shù)據(jù)集)ResultSet(數(shù)據(jù)集)ResultSet(數(shù)據(jù)集)JDBCAPI結(jié)構(gòu)圖其它數(shù)據(jù)庫MysqlOracleJAV54Connection接口中常用的方法NO.方法描述1StatementcreateStatement()throwsSQLException創(chuàng)建一個Statement對象2-1PreparedStatementprepareStatement(Stringsql)throwsSQLException創(chuàng)建一個PreparedStatement類型的對象2-2PreparedStatementprepareStatement(Stringsql,intresultSetType,intresultSetConcurrency)throwsSQLException創(chuàng)建一個PreparedStatement類型的對象,為了使用JDBC2.0中創(chuàng)建可滾動的結(jié)果集3CallableStatementprepareCall(Stringsql)throwsSQLException創(chuàng)建一個CallableStatement對象,此對象專門用于調(diào)用數(shù)據(jù)庫的存儲過程4booleanisClosed()throwsSQLException判斷連接是否已關(guān)閉5voidclose()throwsSQLException關(guān)閉數(shù)據(jù)庫Connection接口中常用的方法NO.方法描述1Stat55JDBC2.0對ResultSet的新支持NO.方法及常量描述1StaticfinalintTYPE_FORWARD_ONLY表示指針只能向前移動的ResultSet,是默認(rèn)值2StaticfinalintTYPE_SCROLL_SENSITIVE表示ResultSet可以滾動,可以更新內(nèi)容3StaticfinalintTYPE_SCROLL_INSENSITIVE表示可以滾動,但不能更新內(nèi)容4StaticfinalintCONCUR_READ_ONLY按只讀方式打開數(shù)據(jù)庫5StaticfinalintCONCUR_UPDATABLE表示ResultSet可以更新6Booleanabsolute(introw)throwsSQLException將指針移到指定行7VoidafterLast()throwsSQLException將指針移到末尾之后8VoidbeforeFirst()throwsSQLException將指針移到首行之前9Booleanfirst()throwsSQLException將指針移到第一行10Booleanlast()throwsSQLException將指針移到最后一行11Booleanprevious()throwsSQLException將指針向上移動JDBC2.0對ResultSet的新支持NO.方法及常量56NO.方法及常量描述12VoidupdateString(intcolumnIndex,Stringx)throwsSQLException指定更新列的內(nèi)容,支持各種數(shù)據(jù)類型13VoidupdateString(StringcolumnName,Stringx)throwsSQLException指定更新列的內(nèi)容,支持各種數(shù)據(jù)類型14VoidmoveToInsertRow()throwsSQLException將指針移到插入行15VoidupdateRow()throwsSQLException更新行數(shù)據(jù)信息16VoidcancelRowUpdates()throwsSQLException取消更新數(shù)據(jù),在updateRow()調(diào)用之前有效17VoidinsertRow()throwsSQLException插入行數(shù)據(jù)18VoiddeleteRow()throwsSQLException刪除行數(shù)據(jù)NO.方法及常量描述12VoidupdateString(57分頁顯示記錄通過Web進(jìn)行查詢時,有時候由于得到的結(jié)果集太大,如果一次性全部通過網(wǎng)絡(luò)傳輸過來,不僅浪費(fèi)網(wǎng)絡(luò)資源,還會導(dǎo)致客戶端的響應(yīng)時間很長,因此有必要把得到的結(jié)果集分頁傳遞給客戶端。數(shù)據(jù)庫分頁顯示信息是Web應(yīng)用程序中經(jīng)常遇到的問題,當(dāng)用戶的數(shù)據(jù)查詢結(jié)果太多而超過計算機(jī)屏幕顯示的范圍時,為了方便用戶的訪問,往往采用數(shù)據(jù)庫分頁顯示的方式。所謂分頁顯示,也就是將數(shù)據(jù)庫中的結(jié)果集人為的分成一段一段的來顯示,這里需要兩個初始的參數(shù):每頁多少條記

溫馨提示

  • 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

提交評論