版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
思考:”程序”+?+”數(shù)據(jù)庫(kù)”思考:”程序”+?+”數(shù)據(jù)庫(kù)”1關(guān)系圖1應(yīng)用程序、JDBC和驅(qū)動(dòng)程序之間的關(guān)系關(guān)系圖1應(yīng)用程序、JDBC和驅(qū)動(dòng)程序之間的關(guān)系2JDBCAPI結(jié)構(gòu)圖其它數(shù)據(jù)庫(kù)MysqlOracleJAVA應(yīng)用程序Oracle驅(qū)動(dòng)程序Mysql驅(qū)動(dòng)程序ODBC驅(qū)動(dòng)程序JDBC-ODBC驅(qū)動(dòng)DriverManager(驅(qū)動(dòng)程序管理器)Statement接口(更新SQL語(yǔ)句)PreparedStatement(預(yù)編譯)CallableStatement(存儲(chǔ)過(guò)程)ResultSet(數(shù)據(jù)集)ResultSet(數(shù)據(jù)集)ResultSet(數(shù)據(jù)集)JDBCAPI結(jié)構(gòu)圖其它數(shù)據(jù)庫(kù)MysqlOracleJAV3第6章(2)
JSP操作數(shù)據(jù)庫(kù)核心技術(shù)第6章(2)JSP操作數(shù)據(jù)庫(kù)核心技術(shù)4內(nèi)容摘要
JDBC技術(shù)是Web程序開(kāi)發(fā)的重要組成部分。在網(wǎng)絡(luò)技術(shù)蓬勃發(fā)展的時(shí)代,數(shù)據(jù)庫(kù)扮演著非常重要的角色;因此,數(shù)據(jù)庫(kù)操作是程序應(yīng)用的最重要技術(shù)之一。如何獲取數(shù)據(jù)、增加數(shù)據(jù)、刪除數(shù)據(jù)以及如何對(duì)數(shù)據(jù)庫(kù)進(jìn)行管理,是每個(gè)程序開(kāi)發(fā)者必須面對(duì)的問(wèn)題。為了使程序開(kāi)發(fā)人員不必考慮所用的數(shù)據(jù)庫(kù)更方便開(kāi)發(fā)應(yīng)用程序,Java平臺(tái)提供了一個(gè)標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù)訪問(wèn)接口集——JDBCAPI。本章主要介紹JDBC的基本概念和相關(guān)接口,如何使用JDBC提供的接口操作數(shù)據(jù)庫(kù),使用預(yù)編譯語(yǔ)句等。內(nèi)容摘要JDBC技術(shù)是Web程序開(kāi)發(fā)的重要組5學(xué)習(xí)目標(biāo)掌握J(rèn)DBC的概念掌握J(rèn)DBCAPI常用的接口和方法熟練掌握使用不同方式連接數(shù)據(jù)庫(kù)熟練掌握數(shù)據(jù)庫(kù)的更新操作熟練掌握數(shù)據(jù)庫(kù)的顯示和查詢操作熟練掌握數(shù)據(jù)庫(kù)分頁(yè)顯示掌握預(yù)編譯語(yǔ)句的處理掌握獲取數(shù)據(jù)庫(kù)系統(tǒng)信息學(xué)習(xí)目標(biāo)掌握J(rèn)DBC的概念66.1JDBC技術(shù)
JDBC(JavaDataBaseConnectivity)是一套面向?qū)ο蟮膽?yīng)用程序接口,它制定了統(tǒng)一的訪問(wèn)各類關(guān)系數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)接口,為各個(gè)數(shù)據(jù)庫(kù)廠商提供了標(biāo)準(zhǔn)接口的實(shí)現(xiàn)。通過(guò)使用JDBC技術(shù),開(kāi)發(fā)人員可以用純Java語(yǔ)言和標(biāo)準(zhǔn)的SQL語(yǔ)句編寫完整的數(shù)據(jù)庫(kù)應(yīng)用程序,并且真正的實(shí)現(xiàn)了軟件的跨平臺(tái)型。
JDBC技術(shù)簡(jiǎn)介
6.1JDBC技術(shù)JDBC7JDBC概述在JSP技術(shù)中,對(duì)數(shù)據(jù)庫(kù)的操作都是通過(guò)JDBC組件完成的。JDBC在Java腳本程序和數(shù)據(jù)庫(kù)之間充當(dāng)了一個(gè)橋梁的作用。Java腳本程序可以通過(guò)JDBC組件向數(shù)據(jù)庫(kù)發(fā)出命令,數(shù)據(jù)庫(kù)管理系統(tǒng)獲得命令后,執(zhí)行請(qǐng)求,并將請(qǐng)求結(jié)果通過(guò)JDBC返回給Java程序。JDBC是Sun公司提供的一套數(shù)據(jù)庫(kù)編程接口API函數(shù),由Java語(yǔ)言編寫的類。使用JDBC開(kāi)發(fā)的程序能夠自動(dòng)地將SQL語(yǔ)句傳送給相應(yīng)的數(shù)據(jù)庫(kù)管理系統(tǒng)。不但如此,使用Java編寫的應(yīng)用程序可以在任何支持Java的平臺(tái)上運(yùn)行,不必在不同的平臺(tái)上編寫不同的應(yīng)用。Java和JDBC的結(jié)合可以讓開(kāi)發(fā)人員在開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用程序時(shí)真正實(shí)現(xiàn)“WriteOnce,RunEverywhere!”JDBC概述在JSP技術(shù)中,對(duì)數(shù)據(jù)庫(kù)的操作都是通過(guò)JDBC組8JDBC概述圖1應(yīng)用程序、JDBC和驅(qū)動(dòng)程序之間的關(guān)系JDBC概述圖1應(yīng)用程序、JDBC和驅(qū)動(dòng)程序之間的關(guān)系9JDBC概述通過(guò)JDBC組件對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作所需的類庫(kù)JDBCAPI,包含在兩個(gè)包里。第一個(gè)包是java.sql,包含了JDBCAPI的核心類和接口,它們指定具體操作而不提供任何實(shí)現(xiàn)。實(shí)際的實(shí)現(xiàn)由第三方提供商提供。包括為DBMS(數(shù)據(jù)庫(kù)管理系統(tǒng))連接和存儲(chǔ)在DBMS里的數(shù)據(jù)進(jìn)行交互而提供的Java數(shù)據(jù)對(duì)象。另一個(gè)包含JDBCAPI的包是javax.sql,它擴(kuò)展了java.sql,是J2EE/JavaEE的一部分。除其他高級(jí)JDBC特性外javax.sql還包含了那些與Java命名與目錄接口(JNDI)進(jìn)行交互Java數(shù)據(jù)對(duì)象,以及管理連接池的Java數(shù)據(jù)對(duì)象。JDBC概述通過(guò)JDBC組件對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作所需的類庫(kù)JD10JDBC的主要操作類及接口NO.類及接口描述1java.sql.Driver定義一個(gè)數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序的接口2java.sql.DriverManager用于管理JDBC驅(qū)動(dòng)程序3java.sql.Connection用于建立與特定數(shù)據(jù)庫(kù)的連接,一個(gè)連接就是一個(gè)會(huì)話,建立連接后便可以執(zhí)行SQL語(yǔ)句和獲得檢索結(jié)果4java.sql.Statement一個(gè)Statement對(duì)象用于執(zhí)行靜態(tài)SQL語(yǔ)句,并獲得語(yǔ)句執(zhí)行后產(chǎn)生的結(jié)果5java.sql.PreparedStatement創(chuàng)建一個(gè)可以編譯的SQL語(yǔ)句對(duì)象,該對(duì)象可以被多次運(yùn)行,以提高執(zhí)行的效率,該接口是Statement的子接口6java.sql.ResultSet用于創(chuàng)建表示SQL語(yǔ)句檢索結(jié)果的結(jié)果集,用戶通過(guò)結(jié)果集完成對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)7java.sql.CallableStatement用于執(zhí)行SQL存儲(chǔ)過(guò)程8java.sql.SQLException對(duì)數(shù)據(jù)庫(kù)訪問(wèn)時(shí)產(chǎn)生的錯(cuò)誤的描述信息JDBC的主要操作類及接口NO.類及接口描述1java.sq11JDBC的主要操作類及接口NO.類及接口描述9java.sql.Date該類是標(biāo)準(zhǔn)java.util.Date的一個(gè)子集,用于表示與SQLDATE相同的日期類型,該日期不包括時(shí)間10java.sql.Time該類是標(biāo)準(zhǔn)java.util.Date的一個(gè)子集,用于表示時(shí)、分、秒11java.sql.DataTruncation在JDBC遇到數(shù)據(jù)截?cái)嗟漠惓r(shí),報(bào)告一個(gè)警告(讀數(shù)據(jù)時(shí))或產(chǎn)生一個(gè)異常(寫數(shù)據(jù)時(shí))12java.sql.DrivaerPropertyInfo高級(jí)程序設(shè)計(jì)人員通過(guò)DriverPropertInfo與Driver進(jìn)行交流,可使用getDriverPropertyInfo獲取或提供驅(qū)動(dòng)程序的信息13java.sql.Timestamp標(biāo)準(zhǔn)java.util.Date類的擴(kuò)展,用于表示SQL時(shí)間戳,并增加了一個(gè)能表示納秒的時(shí)間域14java.sql.DatabaseMetaData與java.sql.ResultSetMetaData一同用于訪問(wèn)數(shù)據(jù)庫(kù)的元信息15java.sql.SQLWarning對(duì)數(shù)據(jù)庫(kù)訪問(wèn)時(shí)產(chǎn)生的警告的描述信息16java.sql.Types定義了表示SQL類型的常量JDBC的主要操作類及接口NO.類及接口描述9java.sq12JDBCAPI結(jié)構(gòu)圖其它數(shù)據(jù)庫(kù)MysqlOracleJAVA應(yīng)用程序Oracle驅(qū)動(dòng)程序Mysql驅(qū)動(dòng)程序ODBC驅(qū)動(dòng)程序JDBC-ODBC驅(qū)動(dòng)DriverManager(驅(qū)動(dòng)程序管理器)Statement接口(更新SQL語(yǔ)句)PreparedStatement(預(yù)編譯)CallableStatement(存儲(chǔ)過(guò)程)ResultSet(數(shù)據(jù)集)ResultSet(數(shù)據(jù)集)ResultSet(數(shù)據(jù)集)JDBCAPI結(jié)構(gòu)圖其它數(shù)據(jù)庫(kù)MysqlOracleJAV13JDBCAPI介紹DriverManagerDriverManager類是JDBC的管理層,作用于用戶和驅(qū)動(dòng)程序之間。跟蹤可用的驅(qū)動(dòng)程序,并在數(shù)據(jù)庫(kù)和相應(yīng)驅(qū)動(dòng)程序之間建立連接。另外,DriverManager類也處理諸如驅(qū)動(dòng)程序登錄時(shí)間限制及登錄和跟蹤消息的顯示等事務(wù)。ConnectionConnection對(duì)象代表與數(shù)據(jù)庫(kù)的連接。連接過(guò)程包括所執(zhí)行的SQL語(yǔ)句和在該連接上所返回的結(jié)果。一個(gè)應(yīng)用程序可與單個(gè)數(shù)據(jù)庫(kù)有一個(gè)或多個(gè)連接,或者可與許多數(shù)據(jù)庫(kù)有連接。JDBCAPI介紹DriverManager14JDBCAPI介紹StatementStatement對(duì)象用于將SQL語(yǔ)句發(fā)送到數(shù)據(jù)庫(kù)中。實(shí)際上有三種Statement對(duì)象:Statement、PreparedStatement(它從Statement繼承而來(lái))和CallableStatement(它從PreparedStatement繼承而來(lái))。Statement對(duì)象用于執(zhí)行不帶參數(shù)的簡(jiǎn)單SQL語(yǔ)句;PreparedStatement對(duì)象用于執(zhí)行帶或不帶IN參數(shù)的預(yù)編譯SQL語(yǔ)句;CallableStatement對(duì)象用于執(zhí)行對(duì)數(shù)據(jù)庫(kù)已存儲(chǔ)過(guò)程的調(diào)用。Statement接口提供了執(zhí)行語(yǔ)句和獲取結(jié)果的基本方法。PreparedStatement接口添加處理IN參數(shù)的方法;而CallableStatement添加處理OUT參數(shù)的方法。JDBCAPI介紹Statement15JDBCAPI介紹
ResultSet使用Statement對(duì)象執(zhí)行executeQuery()方法,將會(huì)返回一個(gè)數(shù)據(jù)庫(kù)的結(jié)果集。結(jié)果集一般是一個(gè)表,其中有查詢所返回的列標(biāo)題及相應(yīng)的值。ResultSet記錄集中包含符合SQL語(yǔ)句中條件的所有行,并且它通過(guò)一套get方法(這些get方法可以訪問(wèn)當(dāng)前行中的不同列)提供對(duì)這些行中數(shù)據(jù)的訪問(wèn)。ResultSet使用next方法用于移動(dòng)到ResultSet中的下一行,使下一行成為當(dāng)前行。JDBCAPI介紹ResultSet16JDBC操作步驟及數(shù)據(jù)庫(kù)連接操作JDBC操作步驟及數(shù)據(jù)庫(kù)連接操作17本小節(jié)目標(biāo)掌握J(rèn)DBC的操作步驟掌握數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序的配置方法可以使用JDBC進(jìn)行數(shù)據(jù)庫(kù)連接本小節(jié)目標(biāo)掌握J(rèn)DBC的操作步驟18JDBC操作步驟1、加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序各個(gè)數(shù)據(jù)庫(kù)都提供JDBC的驅(qū)動(dòng)程序開(kāi)發(fā)包,直接把JDBC操作所需要的開(kāi)發(fā)包(一般為*.jar或*.zip)直接配置到classpath路徑即可。2、連接數(shù)據(jù)庫(kù)根據(jù)各個(gè)數(shù)據(jù)庫(kù)廠商提供的不同連接地址完成數(shù)據(jù)庫(kù)地址的連接,并提供連接數(shù)據(jù)庫(kù)的用戶名和密碼。3、使用語(yǔ)句進(jìn)行數(shù)據(jù)庫(kù)操作數(shù)據(jù)庫(kù)操作分為更新和查詢兩種,可以使用標(biāo)準(zhǔn)的SQL語(yǔ)句完成。4、關(guān)閉數(shù)據(jù)庫(kù)連接關(guān)閉連接以釋放資源JDBC操作步驟1、加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序19JDBC操作步驟JDBC操作步驟20使用純Java數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序連接這種驅(qū)動(dòng)利用作為中間件的應(yīng)用服務(wù)器來(lái)訪問(wèn)數(shù)據(jù)庫(kù)。應(yīng)用服務(wù)器作為一個(gè)到多個(gè)數(shù)據(jù)庫(kù)的網(wǎng)關(guān),客戶端通過(guò)它可以連接到不同的數(shù)據(jù)庫(kù)服務(wù)器。應(yīng)用服務(wù)器通常都有自己的網(wǎng)絡(luò)協(xié)議,Java客戶端程序通過(guò)JDBC驅(qū)動(dòng)程序?qū)DBC調(diào)用發(fā)送給應(yīng)用服務(wù)器,應(yīng)用服務(wù)器使用本地驅(qū)動(dòng)程序訪問(wèn)數(shù)據(jù)庫(kù),從而完成請(qǐng)求。如圖所示。使用純Java數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序連接這種驅(qū)動(dòng)利用作為中間件的應(yīng)用21使用JDBC-ODBC橋接器連接因?yàn)槲④浌就瞥龅腛DBC比JDBC出現(xiàn)的時(shí)間要早,所以絕大多數(shù)的數(shù)據(jù)庫(kù)都可以通過(guò)ODBC來(lái)訪問(wèn),當(dāng)Sun公司推出JDBC的時(shí)候,為了支持更多的數(shù)據(jù)庫(kù)提供了JDBC-ODBC橋。利用JDBC-ODBC訪問(wèn)數(shù)據(jù)庫(kù),需要客戶的機(jī)器具有JDBC-ODBC橋驅(qū)動(dòng)。ODBC驅(qū)動(dòng)程序和相應(yīng)數(shù)據(jù)庫(kù)的本地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)用,并通過(guò)ODBC庫(kù)把它們發(fā)送給支持ODBC對(duì)象的數(shù)據(jù)庫(kù),如圖所示。使用JDBC-ODBC橋接器連接因?yàn)槲④浌就瞥龅腛DBC22JDBC的主要操作類及接口NO.類及接口描述1java.sql.Driver定義一個(gè)數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序的接口2java.sql.DriverManager用于管理JDBC驅(qū)動(dòng)程序3java.sql.Connection用于建立與特定數(shù)據(jù)庫(kù)的連接,一個(gè)連接就是一個(gè)會(huì)話,建立連接后便可以執(zhí)行SQL語(yǔ)句和獲得檢索結(jié)果4java.sql.Statement一個(gè)Statement對(duì)象用于執(zhí)行靜態(tài)SQL語(yǔ)句,并獲得語(yǔ)句執(zhí)行后產(chǎn)生的結(jié)果5java.sql.PreparedStatement創(chuàng)建一個(gè)可以編譯的SQL語(yǔ)句對(duì)象,該對(duì)象可以被多次運(yùn)行,以提高執(zhí)行的效率,該接口是Statement的子接口6java.sql.ResultSet用于創(chuàng)建表示SQL語(yǔ)句檢索結(jié)果的結(jié)果集,用戶通過(guò)結(jié)果集完成對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)7java.sql.CallableStatement用于執(zhí)行SQL存儲(chǔ)過(guò)程8java.sql.SQLException對(duì)數(shù)據(jù)庫(kù)訪問(wèn)時(shí)產(chǎn)生的錯(cuò)誤的描述信息JDBC的主要操作類及接口NO.類及接口描述1java.sq23驅(qū)動(dòng)器接口:Driver某個(gè)數(shù)數(shù)據(jù)庫(kù)的驅(qū)動(dòng)名稱將驅(qū)動(dòng)設(shè)置為Srting類型Driver類加載驅(qū)動(dòng)名稱拋出ClassNotFoundException執(zhí)行其它操作判斷YN驅(qū)動(dòng)器接口:Driver某個(gè)數(shù)數(shù)據(jù)庫(kù)的驅(qū)動(dòng)名稱將驅(qū)動(dòng)設(shè)置為24驅(qū)動(dòng)管理類:DriverManager負(fù)責(zé)管理JDBC驅(qū)動(dòng)程序的基本服務(wù),作用于用戶和驅(qū)動(dòng)程序之間,負(fù)責(zé)追蹤可用的驅(qū)動(dòng)程序,并在數(shù)據(jù)庫(kù)和相應(yīng)驅(qū)動(dòng)程序之間建立連接。另外,DriverManager類也處理驅(qū)動(dòng)程序登錄時(shí)間限制及登錄和跟蹤消息的顯示等事務(wù)。NO.方法描述1publicstaticConnection
getConnection(Stringurl)throwsSQLException通過(guò)連接地址連接數(shù)據(jù)庫(kù)2publicstaticConnection
getConnection(Stringurl,Stringuser,Stringpassword)throwsSQLException通過(guò)連接地址連接數(shù)據(jù)庫(kù),同時(shí)輸入用戶名和密碼驅(qū)動(dòng)管理類:DriverManager負(fù)責(zé)管理JDBC驅(qū)動(dòng)25MySQL數(shù)據(jù)庫(kù)的連接地址格式j(luò)dbc:mysql://IP地址:端口號(hào)/數(shù)據(jù)庫(kù)名稱jdbc協(xié)議:JDBCURL中的協(xié)議總是jdbc子協(xié)議:驅(qū)動(dòng)程序名或數(shù)據(jù)庫(kù)連接機(jī)制,例如:mysql子名稱:一種標(biāo)識(shí)數(shù)據(jù)庫(kù)的方法。必須遵循"http://主機(jī)各:端口/子協(xié)議"的標(biāo)準(zhǔn)URL命名約定,例如://localhost:3306/MySQL數(shù)據(jù)庫(kù)的連接地址格式26數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序
數(shù)據(jù)庫(kù)名稱類包名驅(qū)動(dòng)名稱與URL地址SQLServer2000msbase.jar、mssqlserver.jar、msutil.jarcom.microsoft.jdbc.sqlserver.SQLServerDriverjdbc:microsoft:sqlserver://localhost:1433;DatabaseName=數(shù)據(jù)庫(kù)名稱SQLServer2005sqljdbc.jarcom.microsoft.sqlserver.jdbc.SQLServerDriverjdbc:sqlserver://localhost:1433;databaseName=數(shù)據(jù)庫(kù)名稱MYSQLmysql-connector-java-3.0.16-ga-bin.jarcom.mysql.jdbc.Driverjdbc:mysql://localhost:3306/數(shù)據(jù)庫(kù)名稱oracleclass12.jaroracle.jdbc.driver.OracleDriverjdbc:oracle:thin:@dssw2k01:1521:數(shù)據(jù)庫(kù)名稱DB2db2jcc.jar.DB2Driverjdbc:db2://localhost:6589/數(shù)據(jù)庫(kù)名稱Derbyderby.jarorg.apache.derby.jdbc.EmbeddedDriverjdbc:derby://localhost:1525:數(shù)據(jù)庫(kù)名稱;create=false數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序數(shù)據(jù)庫(kù)名稱類包名驅(qū)動(dòng)名稱與URL地址SQL27Access數(shù)據(jù)庫(kù)的連接Access數(shù)據(jù)庫(kù)管理系統(tǒng)是MicrosoftOffice系統(tǒng)軟件中的一個(gè)重要組成部分,它是一個(gè)關(guān)系型桌面數(shù)據(jù)庫(kù)管理系統(tǒng),可以用來(lái)建立中、小型的數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng),應(yīng)用非常廣泛。同時(shí),由于Access數(shù)據(jù)庫(kù)操作簡(jiǎn)單、使用方便等特點(diǎn),許多小型的Web應(yīng)用程序也采用Access數(shù)據(jù)庫(kù)。Access數(shù)據(jù)庫(kù)的驅(qū)動(dòng)為:StringdriverClass="sun.jdbc.odbc.JdbcOdbcDriver";
連接Access數(shù)據(jù)庫(kù)需要通過(guò)JDBC-ODBC方式,不需要引入任何包。連接Access數(shù)據(jù)庫(kù)的URL為:Stringurl="jdbc:odbc:driver={MicrosoftAccessDriver(*.mdb)};DBQ=數(shù)據(jù)庫(kù)名";Access數(shù)據(jù)庫(kù)的連接Access數(shù)據(jù)庫(kù)管理系28執(zhí)行數(shù)據(jù)庫(kù)更新操作執(zhí)行數(shù)據(jù)庫(kù)更新操作29本節(jié)目標(biāo)可以使用Connection對(duì)象取得Statement實(shí)例可以使用Statement進(jìn)行數(shù)據(jù)增加、修改、刪除操作本節(jié)目標(biāo)可以使用Connection對(duì)象取得Statemen30數(shù)據(jù)庫(kù)連接接口:Connectionjava.sql.Connection接口表示與特定數(shù)據(jù)庫(kù)的連接,并在連接的上下文中可以執(zhí)行SQL語(yǔ)句并返回結(jié)果。通過(guò)Connection對(duì)象可以獲取一個(gè)數(shù)據(jù)庫(kù)和表等數(shù)據(jù)庫(kù)對(duì)象的詳細(xì)信息。數(shù)據(jù)庫(kù)連接接口:Connectionjava.sql.C31Connection接口中常用的方法NO.方法描述1StatementcreateStatement()throwsSQLException創(chuàng)建一個(gè)Statement對(duì)象2-1PreparedStatementprepareStatement(Stringsql)throwsSQLException創(chuàng)建一個(gè)PreparedStatement類型的對(duì)象2-2PreparedStatementprepareStatement(Stringsql,intresultSetType,intresultSetConcurrency)throwsSQLException創(chuàng)建一個(gè)PreparedStatement類型的對(duì)象,為了使用JDBC2.0中創(chuàng)建可滾動(dòng)的結(jié)果集3CallableStatementprepareCall(Stringsql)throwsSQLException創(chuàng)建一個(gè)CallableStatement對(duì)象,此對(duì)象專門用于調(diào)用數(shù)據(jù)庫(kù)的存儲(chǔ)過(guò)程4booleanisClosed()throwsSQLException判斷連接是否已關(guān)閉5voidclose()throwsSQLException關(guān)閉數(shù)據(jù)庫(kù)Connection接口中常用的方法NO.方法描述1Stat32執(zhí)行靜態(tài)SQL語(yǔ)句接口:Statementjava.sql.Statement接口用來(lái)執(zhí)行靜態(tài)的SQL語(yǔ)句,并返回執(zhí)行結(jié)果。處理靜態(tài)的SQL語(yǔ)句主要分為3種Statement對(duì)象:Statement、PreparedStatement、CallableStatement。它們作為在指定連接上執(zhí)行SQL語(yǔ)句的容器。這3種Statement對(duì)象的關(guān)系如圖所示。執(zhí)行靜態(tài)SQL語(yǔ)句接口:Statementjava.sql.33執(zhí)行靜態(tài)SQL語(yǔ)句接口:StatementNO.方法描述1intexecuteUpdate(Stringsql)throwsSQLException執(zhí)行數(shù)據(jù)庫(kù)更新的SQL語(yǔ)句,例如:insert、update、delete等語(yǔ)句,返回更新的記錄數(shù)2ResultSetexecuteQuery(Stringsql)throwsSQLexception執(zhí)行數(shù)據(jù)庫(kù)查詢操作,返回一個(gè)結(jié)果集對(duì)象,例如,執(zhí)行SELECT查詢語(yǔ)句3voidaddBatch(Stringsql)throwsSQLExeption增加一個(gè)待執(zhí)行的SQL語(yǔ)句4int[]executeBatch()throwsSQLException批量執(zhí)行SQL語(yǔ)句5voidclose()throwsSQLException關(guān)閉Statement操作6booleanexecute(Stringsql)throwsSQLException執(zhí)行SQL語(yǔ)句執(zhí)行靜態(tài)SQL語(yǔ)句接口:StatementNO.方法描述1i34RESULTSET接口RESULTSET接口35本小節(jié)目標(biāo)掌握ResultSet接口的主要作用使用ResultSet接口查詢數(shù)據(jù)本小節(jié)目標(biāo)掌握ResultSet接口的主要作用36返回查詢結(jié)果集接口:ResultSet
java.sql.ResultSet接口類似于一個(gè)數(shù)據(jù)表,通過(guò)該接口的實(shí)例可以獲得檢索結(jié)果集以及對(duì)應(yīng)的數(shù)據(jù)表相關(guān)信息。Result實(shí)例通過(guò)執(zhí)行查詢數(shù)據(jù)庫(kù)的語(yǔ)句生成。一個(gè)Statement對(duì)象在同一時(shí)刻只能打開(kāi)一個(gè)ResultSet對(duì)象??梢酝ㄟ^(guò)字段的序號(hào)或者字段的名字來(lái)制定獲取某個(gè)字段的值。返回查詢結(jié)果集接口:ResultSetjava.sql.R37執(zhí)行靜態(tài)SQL語(yǔ)句接口:StatementNO.方法描述1intexecuteUpdate(Stringsql)throwsSQLException執(zhí)行數(shù)據(jù)庫(kù)更新的SQL語(yǔ)句,例如:insert、update、delete等語(yǔ)句,返回更新的記錄數(shù)2ResultSetexecuteQuery(Stringsql)throwsSQLexception執(zhí)行數(shù)據(jù)庫(kù)查詢操作,返回一個(gè)結(jié)果集對(duì)象,例如,執(zhí)行SELECT查詢語(yǔ)句3voidaddBatch(Stringsql)throwsSQLExeption增加一個(gè)待執(zhí)行的SQL語(yǔ)句4int[]executeBatch()throwsSQLException批量執(zhí)行SQL語(yǔ)句5voidclose()throwsSQLException關(guān)閉Statement操作6booleanexecute(Stringsql)throwsSQLException執(zhí)行SQL語(yǔ)句執(zhí)行靜態(tài)SQL語(yǔ)句接口:StatementNO.方法描述1i38ResultSet接口的常用操作方法NO.方法描述1Booleannext()throwsSQLException將指針移到下一行2IntgetInt(intcolumnIndex)throwsSQLException以整數(shù)形式按列的編號(hào)取得指定列的內(nèi)容3IntgetInt(StringcolumnName)throwsSQLException以整數(shù)形式取得指定列的內(nèi)容4FloatgetFloat(intcolumnIndex)throwsSQLException以浮點(diǎn)數(shù)形式按列的編號(hào)取得指定列的內(nèi)容5FloatgetFloat(StringcolumnName)throwsSQLException浮點(diǎn)數(shù)形式取得指定列的內(nèi)容6StringgetString(intcolumnIndex)throwsSQLException以字符串形式按列的編號(hào)取得指定列的內(nèi)容7StringgetString(StringcolumnName)throwsSQLException字符串形式取得指定列的內(nèi)容8DategetDate(intcolumnIndex)throwsSQLException以Date形式按列的編號(hào)取得指定列的內(nèi)容9DategetDate(StringcolumnName)throwsSQLException以Date形式取得指定列的內(nèi)容ResultSet接口的常用操作方法NO.方法描述1Bool39PREPAREDSTATEMENT接口PREPAREDSTATEMENT接口40本小節(jié)目標(biāo)掌握PreparedStatement接口的工作原理可以使用PreparedStatement進(jìn)行數(shù)據(jù)庫(kù)的更新及查詢操作本小節(jié)目標(biāo)掌握PreparedStatement接口的工作原41執(zhí)行預(yù)編譯的SQL語(yǔ)句接口:PreparedStatementPreparedStatement接口繼承并擴(kuò)展了Statement接口,用來(lái)執(zhí)行動(dòng)態(tài)的SQL語(yǔ)句。與直接使用Statement不同的是,PreparedStatement在操作時(shí),是先在數(shù)據(jù)表之中準(zhǔn)備好一條SQL語(yǔ)句,但是此SQL語(yǔ)句的具體內(nèi)容暫時(shí)不設(shè)置,而是之后再進(jìn)行設(shè)置,以插入數(shù)據(jù)為例:執(zhí)行預(yù)編譯的SQL語(yǔ)句接口:PreparedStatemen42執(zhí)行預(yù)編譯的SQL語(yǔ)句接口:PreparedStatement1、創(chuàng)建PreparedStatement對(duì)象例如,創(chuàng)建包含帶兩個(gè)參數(shù)占位符的SQL語(yǔ)句PreparedStatement對(duì)象:PreparedStatementpstmt=con.prepareStatement("UPDATEwy_tableSETm=?WHEREx=?");2、傳遞多參數(shù)例如,將第一個(gè)參數(shù)設(shè)為“王”,第二個(gè)參數(shù)設(shè)為“毅”:pstmt.setString(1,“王”);pstmt.setString(2,“毅”);執(zhí)行預(yù)編譯的SQL語(yǔ)句接口:PreparedStatemen43PreparedStatement的基本操作方法NO.方法描述1intexecuteUpdate()throwsSQLException執(zhí)行設(shè)置的預(yù)處理SQL語(yǔ)句2voidsetInt(intparameterIndex,intx)throwsSQLException指定索引編號(hào),并設(shè)置整數(shù)內(nèi)容3voidsetFloat(intparameterIndex,floatx)throwsSQLException指定索引編號(hào),并設(shè)置浮點(diǎn)數(shù)內(nèi)容4voidsetString(intparameterIndex,Stringx)throwsSQLException指定索引編號(hào),并設(shè)置字符串內(nèi)容5voidsetDate(intparameterIndex,Datex)throwsSQLException指定索引編號(hào),并設(shè)置java.sql.Date類型的日期內(nèi)容PreparedStatement的基本操作方法NO.方法描44注意:關(guān)于日期的輸入問(wèn)題:在正常情況下都使用java.util.Date表示日期,但是在PreparedStatement中如果要想使用日期則改須使用java.sql.Date類型。Stringbirthday="2007-08-27"; //生日java.util.Datetemp=null;//聲明一個(gè)Date對(duì)象temp=newSimpleDateFormat("yyyy-MM-dd").parse(birthday);//通過(guò)SimpleDateFormat類將字符串變?yōu)閖ava.util.Date類型java.sql.Datebir=newjava.sql.Date(temp.getTime());//通過(guò)java.util.Date取出具體的日期數(shù),并將其變?yōu)閖ava.sql.Date類型注意:45CALLABLESTATEMENT存儲(chǔ)過(guò)程接口CALLABLESTATEMENT存儲(chǔ)過(guò)程接口46處理存儲(chǔ)過(guò)程語(yǔ)句接口:CallableStatement(1)
CallableStatement對(duì)象為所有的關(guān)系性數(shù)據(jù)庫(kù)提供了一種以標(biāo)準(zhǔn)形式調(diào)用已儲(chǔ)存過(guò)程的方法。該對(duì)象可以處理兩種形式的存儲(chǔ)過(guò)程:一種形式帶結(jié)果參數(shù),另一種形式不帶結(jié)果參數(shù)。結(jié)果參數(shù)是一種輸出參數(shù),是已儲(chǔ)存過(guò)程的返回值。兩種形式都可帶有數(shù)量可變的輸入、輸出或輸入和輸出的參數(shù)。問(wèn)號(hào)將用作參數(shù)的占位符。在JDBC中,調(diào)用存儲(chǔ)過(guò)程的語(yǔ)法如下:{call過(guò)程名[(?,?,...)]}返回結(jié)果參數(shù)的過(guò)程的語(yǔ)法如下:{?=call過(guò)程名[(?,?,...)]}處理存儲(chǔ)過(guò)程語(yǔ)句接口:CallableStatement(47處理存儲(chǔ)過(guò)程語(yǔ)句接口:CallableStatement(2)1.創(chuàng)建CallableStatement對(duì)象CallableStatement對(duì)象是用Connection類中的prepareCall()方法創(chuàng)建。其中,存在有兩個(gè)變量,不含結(jié)果參數(shù)代碼設(shè)置如下:CallableStatementcstmt=con.prepareCall("{callgetTestData(?,?)}");2.輸入和輸出參數(shù)將輸入?yún)?shù)傳給CallableStatement對(duì)象是通過(guò)setXXX()方法完成的。如果存儲(chǔ)過(guò)程返回的是輸出參數(shù),則在執(zhí)行CallableStatement對(duì)象前必須先注冊(cè)每個(gè)輸出參數(shù)的JDBC類型。注冊(cè)JDBC類型是用registerOutParameter()方法來(lái)完成的。語(yǔ)句執(zhí)行完后,CallableStatement的getXXX()方法將取回參數(shù)值。例如:處理存儲(chǔ)過(guò)程語(yǔ)句接口:CallableStatement(48處理存儲(chǔ)過(guò)程語(yǔ)句接口:CallableStatement(2)CallableStatementcstmt=con.prepareCall("{callgetTestData(?,?)}");cstmt.registerOutParameter(1,java.sql.Types.TINYINT);cstmt.registerOutParameter(2,java.sql.Types.DECIMAL,3); cstmt.executeQuery();//從第1個(gè)輸出參數(shù)中取出一個(gè)Java字節(jié)bytex=cstmt.getByte(1);//從第2個(gè)輸出參數(shù)中取出一個(gè)BigDecimal對(duì)象(小數(shù)點(diǎn)后面帶3位)java.math.BigDecimaln=cstmt.getBigDecimal(2,3);3.執(zhí)行存儲(chǔ)過(guò)程當(dāng)設(shè)置完存儲(chǔ)過(guò)程的參數(shù)后,就可以通過(guò)CallableStatement類中的方法執(zhí)行該存儲(chǔ)過(guò)程。CallableStatement類執(zhí)行存儲(chǔ)過(guò)程的方法如同Statement方法。處理存儲(chǔ)過(guò)程語(yǔ)句接口:CallableStatement(49JDBC2.0中RESULTSET操作JDBC2.0中RESULTSET操作50本小節(jié)目標(biāo)了解JDBC2.0提供的主要新特性掌握可滾動(dòng)結(jié)果集的操作掌握結(jié)果集的增加、修改、刪除操作了解批處理操作本小節(jié)目標(biāo)了解JDBC2.0提供的主要新特性51在JDBC2.0,加強(qiáng)了結(jié)果集ResultSet的功能,可以直接使用ResultSet執(zhí)行更新的操作,或者實(shí)現(xiàn)雙向滾動(dòng)。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ù)庫(kù)MysqlOracleJAVA應(yīng)用程序Oracle驅(qū)動(dòng)程序Mysql驅(qū)動(dòng)程序ODBC驅(qū)動(dòng)程序JDBC-ODBC驅(qū)動(dòng)DriverManager(驅(qū)動(dòng)程序管理器)Statement接口(更新SQL語(yǔ)句)PreparedStatement(預(yù)編譯)CallableStatement(存儲(chǔ)過(guò)程)ResultSet(數(shù)據(jù)集)ResultSet(數(shù)據(jù)集)ResultSet(數(shù)據(jù)集)JDBCAPI結(jié)構(gòu)圖其它數(shù)據(jù)庫(kù)MysqlOracleJAV54Connection接口中常用的方法NO.方法描述1StatementcreateStatement()throwsSQLException創(chuàng)建一個(gè)Statement對(duì)象2-1PreparedStatementprepareStatement(Stringsql)throwsSQLException創(chuàng)建一個(gè)PreparedStatement類型的對(duì)象2-2PreparedStatementprepareStatement(Stringsql,intresultSetType,intresultSetConcurrency)throwsSQLException創(chuàng)建一個(gè)PreparedStatement類型的對(duì)象,為了使用JDBC2.0中創(chuàng)建可滾動(dòng)的結(jié)果集3CallableStatementprepareCall(Stringsql)throwsSQLException創(chuàng)建一個(gè)CallableStatement對(duì)象,此對(duì)象專門用于調(diào)用數(shù)據(jù)庫(kù)的存儲(chǔ)過(guò)程4booleanisClosed()throwsSQLException判斷連接是否已關(guān)閉5voidclose()throwsSQLException關(guān)閉數(shù)據(jù)庫(kù)Connection接口中常用的方法NO.方法描述1Stat55JDBC2.0對(duì)ResultSet的新支持NO.方法及常量描述1StaticfinalintTYPE_FORWARD_ONLY表示指針只能向前移動(dòng)的ResultSet,是默認(rèn)值2StaticfinalintTYPE_SCROLL_SENSITIVE表示ResultSet可以滾動(dòng),可以更新內(nèi)容3StaticfinalintTYPE_SCROLL_INSENSITIVE表示可以滾動(dòng),但不能更新內(nèi)容4StaticfinalintCONCUR_READ_ONLY按只讀方式打開(kāi)數(shù)據(jù)庫(kù)5StaticfinalintCONCUR_UPDATABLE表示ResultSet可以更新6Booleanabsolute(introw)throwsSQLException將指針移到指定行7VoidafterLast()throwsSQLException將指針移到末尾之后8VoidbeforeFirst()throwsSQLException將指針移到首行之前9Booleanfirst()throwsSQLException將指針移到第一行10Booleanlast()throwsSQLException將指針移到最后一行11Booleanprevious()throwsSQLException將指針向上移動(dòng)JDBC2.0對(duì)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分頁(yè)顯示記錄通過(guò)Web進(jìn)行查詢時(shí),有時(shí)候由于得到的結(jié)果集太大,如果一次性全部通過(guò)網(wǎng)絡(luò)傳輸過(guò)來(lái),不僅浪費(fèi)網(wǎng)絡(luò)資源,還會(huì)導(dǎo)致客戶端的響應(yīng)時(shí)間很長(zhǎng),因此有必要把得到的結(jié)果集分頁(yè)傳遞給客戶端。數(shù)據(jù)庫(kù)分頁(yè)顯示信息是Web應(yīng)用程序中經(jīng)常遇到的問(wèn)題,當(dāng)用戶的數(shù)據(jù)查詢結(jié)果太多而超過(guò)計(jì)算機(jī)屏幕顯示的范圍時(shí),為了方便用戶的訪問(wèn),往往采用數(shù)據(jù)庫(kù)分頁(yè)顯示的方式。所謂分頁(yè)顯示,也就是將數(shù)據(jù)庫(kù)中的結(jié)果集人為的分成一段一段的來(lái)顯示,這里需要兩個(gè)初始的參數(shù):每頁(yè)多少條記
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024至2030年塑料電器外殼項(xiàng)目投資價(jià)值分析報(bào)告
- 陜西藝術(shù)職業(yè)學(xué)院《高等代數(shù)II》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024至2030年低速離心機(jī)項(xiàng)目投資價(jià)值分析報(bào)告
- 搬遠(yuǎn)工合同范例
- 陜西鐵路工程職業(yè)技術(shù)學(xué)院《小學(xué)教師基本功小學(xué)教師口語(yǔ)基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 陜西鐵路工程職業(yè)技術(shù)學(xué)院《建筑環(huán)境數(shù)值模擬》2023-2024學(xué)年第一學(xué)期期末試卷
- 燈具合伙合同范例
- 陜西師范大學(xué)《微波工程基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 居間合同范例 買賣
- 2024年組合冷藏庫(kù)項(xiàng)目可行性研究報(bào)告
- 租賃部績(jī)效考核制度
- 江蘇省揚(yáng)州市2023-2024學(xué)年高一上學(xué)期期末考試物理試題(含答案)
- 屠呦呦課件教學(xué)課件
- 護(hù)理肝癌的疑難病例討論
- 消防車換季保養(yǎng)計(jì)劃
- 股東會(huì)表決票-文書(shū)模板
- 2025年蛇年年度營(yíng)銷日歷營(yíng)銷建議【2025營(yíng)銷日歷】
- 金蛇納瑞企業(yè)2025年會(huì)慶典
- 福建省泉州市2023-2024學(xué)年高一上學(xué)期期末質(zhì)檢英語(yǔ)試題 附答案
- 防止主播跳槽合同模板
- DB13-T 2092-2014 河北省特種設(shè)備使用安全管理規(guī)范
評(píng)論
0/150
提交評(píng)論