java數(shù)據(jù)庫(kù)操作_第1頁(yè)
java數(shù)據(jù)庫(kù)操作_第2頁(yè)
java數(shù)據(jù)庫(kù)操作_第3頁(yè)
java數(shù)據(jù)庫(kù)操作_第4頁(yè)
java數(shù)據(jù)庫(kù)操作_第5頁(yè)
已閱讀5頁(yè),還剩34頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、JDBC回顧1 java.io包中包含了一系列對(duì)輸入/輸出進(jìn)行操作的類(lèi) File類(lèi)用于訪問(wèn)文件系統(tǒng),但只能訪問(wèn)文件(或目錄)的屬性,而不能進(jìn)行讀/寫(xiě)操作 流是指一連串流動(dòng)的數(shù)據(jù)信號(hào),是以先進(jìn)先出方式發(fā)送信息的通道,從流動(dòng)方向上區(qū)分,流可以分為輸入流和輸出流,從格式上區(qū)分,可以分為字節(jié)流和字符流 使用FileInputStream類(lèi)和FileOutputStream類(lèi)以字節(jié)流的方式讀寫(xiě)文件回顧2FileReader類(lèi)和FileWriter類(lèi)配合BufferedReader類(lèi)和BufferedWriter類(lèi)可以以字符流的方式對(duì)文件進(jìn)行讀/寫(xiě)操作要從控制臺(tái)接受輸入,需要將System.in對(duì)象進(jìn)行包

2、裝,使用如下語(yǔ)句:InputStreamReader isr = new InputStreamReader(System.in);BufferedReader br = new BufferedReader(isr);DataInputStream類(lèi)和DataOutputStream類(lèi)在讀/寫(xiě)數(shù)據(jù)時(shí)可以區(qū)分?jǐn)?shù)據(jù)類(lèi)型絕大部分的IO操作都有可能拋出IOException本章相關(guān)詞匯單單 詞詞說(shuō)說(shuō) 明明driver驅(qū)動(dòng),驅(qū)動(dòng)程序驅(qū)動(dòng),驅(qū)動(dòng)程序connection連接連接manager管理器管理器statement語(yǔ)句語(yǔ)句prepared預(yù)備的,預(yù)編譯的預(yù)備的,預(yù)編譯的result結(jié)果結(jié)果creat

3、e創(chuàng)建,創(chuàng)造創(chuàng)建,創(chuàng)造execute執(zhí)行執(zhí)行query查詢(xún)查詢(xún)本章目標(biāo) 了解JDBC的概念和必要性 了解JDBC驅(qū)動(dòng)程序類(lèi)型 了解java.sql包 理解JDBC程序的結(jié)構(gòu) 使用JDBC進(jìn)行數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)簡(jiǎn)介數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)簡(jiǎn)介當(dāng)今企業(yè)級(jí)應(yīng)用程序大部分采用了客戶(hù)機(jī)/服務(wù)器(C/S)模式;客戶(hù)端機(jī)器需要與服務(wù)器進(jìn)行通訊,要操作數(shù)據(jù)庫(kù)中的數(shù)據(jù),執(zhí)行SQL(Structured Query Language結(jié)構(gòu)化查詢(xún)語(yǔ)言)語(yǔ)句以及檢索查詢(xún)結(jié)果;在Java中實(shí)現(xiàn)這些活動(dòng)的技術(shù)稱(chēng)作JDBC。數(shù)據(jù)庫(kù)編程示意圖數(shù)據(jù)庫(kù)編程示意圖 客戶(hù)機(jī)客戶(hù)機(jī)/服務(wù)器服務(wù)器應(yīng)用程序應(yīng)用程序 數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)編程JDBC

4、數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)執(zhí)行執(zhí)行 SQL 語(yǔ)句語(yǔ)句檢索查詢(xún)結(jié)果檢索查詢(xún)結(jié)果 關(guān)于關(guān)于DBMSDBMSDBMS(DataBase Management System)是指數(shù)據(jù)庫(kù)管理系統(tǒng);目前DBMS的生產(chǎn)商眾多,產(chǎn)品也不盡相同,如: Oracle公司的Oracle系列; Microsoft公司的Access系列和SQL Server系列; Microsoft公司早期的FoxPro; IBM公司的DB2; Sybase公司的Sybase; 還有自由開(kāi)源的MySQL等等。這就意味著編程語(yǔ)言要針對(duì)不同的DBMS開(kāi)發(fā)不同版本的應(yīng)用程序,這將是一項(xiàng)非??菰锏墓ぷ?。ODBCODBCODBC(Open DataBase

5、Connectivity)指開(kāi)放式數(shù)據(jù)庫(kù)連接,是由Microsoft公司提供的應(yīng)用程序接口;它負(fù)責(zé)連接各種不同產(chǎn)商和類(lèi)型的DBMS,然后為各種不同的編程語(yǔ)言提供查詢(xún)、插入、修改和刪除數(shù)據(jù)的功能;如同在各種不同的DBMS和各種不同的編程語(yǔ)言之間架設(shè)了一座通用的橋梁。JDBCJDBCJDBC(Java DataBase Connectivity)是由Sun Microsystem公司提供的API(Application Programming Interface應(yīng)用程序編程接口);它為Java應(yīng)用程序提供了一系列的類(lèi),使其能夠快速高效地訪問(wèn)數(shù)據(jù)庫(kù);這些功能是由一系列的類(lèi)和對(duì)象來(lái)完成的,我們只需使用

6、相關(guān)的對(duì)象,即可完成對(duì)數(shù)據(jù)庫(kù)的操作。JDBCJDBC工作方式示意圖工作方式示意圖 Java 程序程序 JDBC 驅(qū)動(dòng)程序驅(qū)動(dòng)程序數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)SQL 命令命令 結(jié)果結(jié)果 JDBCJDBC驅(qū)動(dòng)程序類(lèi)型驅(qū)動(dòng)程序類(lèi)型使用JDBC連接數(shù)據(jù)庫(kù)可以通過(guò)不同的驅(qū)動(dòng)方式來(lái)實(shí)現(xiàn),有4種驅(qū)動(dòng)類(lèi)型: JDBC-ODBC橋驅(qū)動(dòng) 純Java驅(qū)動(dòng) 本地API部分Java驅(qū)動(dòng) JDBC網(wǎng)絡(luò)純Java驅(qū)動(dòng)不論采用哪種驅(qū)動(dòng)方式,在程序中對(duì)數(shù)據(jù)庫(kù)的操作方式基本相同,只是加載不同的驅(qū)動(dòng)程序即可。java.sqljava.sql包包java.sql包也是Java內(nèi)置的包,其中包含了一系列用于與數(shù)據(jù)庫(kù)進(jìn)行通信的類(lèi)和接口;如果要使用到這些

7、類(lèi)和接口的話,則必須顯式地聲明如下語(yǔ)句:import java.sql.*;java.sqljava.sql包中的一些接口包中的一些接口接口名稱(chēng)接口名稱(chēng)說(shuō)說(shuō) 明明Connection連接對(duì)象,用于與數(shù)據(jù)庫(kù)取得連接連接對(duì)象,用于與數(shù)據(jù)庫(kù)取得連接Driver用于創(chuàng)建連接(用于創(chuàng)建連接(Connection)對(duì)象)對(duì)象Statement語(yǔ)句對(duì)象,用于執(zhí)行語(yǔ)句對(duì)象,用于執(zhí)行SQL語(yǔ)句,并將數(shù)據(jù)檢索語(yǔ)句,并將數(shù)據(jù)檢索到結(jié)果集(到結(jié)果集(ResultSet)對(duì)象中)對(duì)象中PreparedStatement預(yù)編譯語(yǔ)句對(duì)象,用于執(zhí)行預(yù)編譯的預(yù)編譯語(yǔ)句對(duì)象,用于執(zhí)行預(yù)編譯的SQL語(yǔ)句,語(yǔ)句,執(zhí)行效率比執(zhí)行效率比

8、Statement高高CallableStatement存儲(chǔ)過(guò)程語(yǔ)句對(duì)象,用于調(diào)用執(zhí)行存儲(chǔ)過(guò)程存儲(chǔ)過(guò)程語(yǔ)句對(duì)象,用于調(diào)用執(zhí)行存儲(chǔ)過(guò)程ResultSet結(jié)果集對(duì)象,包含執(zhí)行結(jié)果集對(duì)象,包含執(zhí)行SQL語(yǔ)句后返回的數(shù)據(jù)語(yǔ)句后返回的數(shù)據(jù)的集合的集合java.sqljava.sql包中的一些類(lèi)包中的一些類(lèi)類(lèi)類(lèi) 名名 稱(chēng)稱(chēng)說(shuō)說(shuō) 明明SQLException數(shù)據(jù)庫(kù)異常類(lèi),是其它數(shù)據(jù)庫(kù)異常類(lèi),是其它JDBC異常類(lèi)的根類(lèi),繼承異常類(lèi)的根類(lèi),繼承于于java.lang.Exception,絕大部分對(duì)數(shù)據(jù)庫(kù)進(jìn)行操,絕大部分對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作的方法都有可能拋出該異常作的方法都有可能拋出該異常DriverManager驅(qū)

9、動(dòng)程序管理類(lèi),用于加載和卸載各種驅(qū)動(dòng)程序,驅(qū)動(dòng)程序管理類(lèi),用于加載和卸載各種驅(qū)動(dòng)程序,并建立與數(shù)據(jù)庫(kù)的連接并建立與數(shù)據(jù)庫(kù)的連接Date該類(lèi)中包含有將該類(lèi)中包含有將SQL日期格式轉(zhuǎn)換成日期格式轉(zhuǎn)換成Java日期格日期格式的方法式的方法TimeStamp表示一個(gè)時(shí)間戳,能精確到納秒表示一個(gè)時(shí)間戳,能精確到納秒JDBCJDBC程序訪問(wèn)數(shù)據(jù)庫(kù)步驟程序訪問(wèn)數(shù)據(jù)庫(kù)步驟開(kāi)開(kāi) 始始導(dǎo)入導(dǎo)入 java.sql包包 加載并注冊(cè)驅(qū)動(dòng)程序加載并注冊(cè)驅(qū)動(dòng)程序創(chuàng)建創(chuàng)建Connection 對(duì)象對(duì)象創(chuàng)建創(chuàng)建 Statement 對(duì)象對(duì)象執(zhí)行執(zhí)行SQL語(yǔ)句語(yǔ)句關(guān)閉關(guān)閉ResultSet 對(duì)象對(duì)象關(guān)閉關(guān)閉Statement對(duì)象

10、對(duì)象關(guān)閉關(guān)閉Connection對(duì)象對(duì)象使用使用ResultSet對(duì)象對(duì)象建立數(shù)據(jù)源(建立數(shù)據(jù)源(ODBC) 附加相應(yīng)產(chǎn)商提供的驅(qū)動(dòng)附加相應(yīng)產(chǎn)商提供的驅(qū)動(dòng) 結(jié)結(jié) 束束JDBC-ODBC橋方式橋方式純純Java驅(qū)動(dòng)方式驅(qū)動(dòng)方式步驟詳解步驟詳解1 1:建立數(shù)據(jù)源:建立數(shù)據(jù)源這里以JDBC-ODBC橋驅(qū)動(dòng)方式為例,逐步詳細(xì)地講解在Java程序中如何操作數(shù)據(jù)庫(kù),而對(duì)于其它驅(qū)動(dòng)方式,只需更換驅(qū)動(dòng)程序即可,其余不變;首先建立ODBC數(shù)據(jù)源:【開(kāi)始】 【設(shè)置】 【控制面板】【管理工具】【數(shù)據(jù)源(ODBC)】新建數(shù)據(jù)源,名稱(chēng)可以任意,這里假設(shè)已經(jīng)建立了一個(gè)名為myODBC的數(shù)據(jù)源,連接到SQL Server

11、2000中的pubs數(shù)據(jù)庫(kù)。步驟詳解步驟詳解2 2:加載驅(qū)動(dòng)程序:加載驅(qū)動(dòng)程序使用Class類(lèi)的forName方法,將驅(qū)動(dòng)程序類(lèi)加載到JVM(Java虛擬機(jī))中;對(duì)于使用JDBC-ODBC橋的驅(qū)動(dòng)方式,應(yīng)該加載:sun.jdbc.odbc.JdbcOdbcDriver類(lèi)如:Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);方方 法法 原原 型型說(shuō)說(shuō) 明明static Class forName(String className)throws ClassNotFoundException將由將由className指定完整名稱(chēng)的類(lèi)指定完整名稱(chēng)的類(lèi)加載到加載到J

12、VM中,如果加載失敗,將中,如果加載失敗,將拋出異常,必須捕捉拋出異常,必須捕捉步驟詳解步驟詳解3 3:獲得連接對(duì)象:獲得連接對(duì)象成功加載驅(qū)動(dòng)后,必須使用DriverManager類(lèi)的靜態(tài)方法getConnection來(lái)獲得連接對(duì)象;對(duì)于使用JDBC-ODBC橋的連接方式,連接字符串的一般形式是:“jdbc:odbc:數(shù)據(jù)源名稱(chēng)”,如:Connection con =DriverManager.getConnection(jdbc:odbc:myODBC, sa, );方方 法法 原原 型型說(shuō)說(shuō) 明明static Connection getConnection(String url, Str

13、ing user,String password)throws SQLException參數(shù)參數(shù)url是連接字符串,參數(shù)是連接字符串,參數(shù)user是數(shù)據(jù)庫(kù)用戶(hù)是數(shù)據(jù)庫(kù)用戶(hù)名,參數(shù)名,參數(shù)password是登錄口令,成功連接到數(shù)是登錄口令,成功連接到數(shù)據(jù)庫(kù)返回?fù)?jù)庫(kù)返回Connection對(duì)象,連接失敗則拋出對(duì)象,連接失敗則拋出SQLException異常,必須捕捉異常,必須捕捉步驟詳解釋步驟詳解釋4 4:創(chuàng)建語(yǔ)句對(duì)象:創(chuàng)建語(yǔ)句對(duì)象一旦成功連接到數(shù)據(jù)庫(kù),獲得Connection對(duì)象后,必須通過(guò)Connection對(duì)象的createStatement方法來(lái)創(chuàng)建語(yǔ)句對(duì)象,才可以執(zhí)行SQL語(yǔ)句;如:St

14、atement sta = con.createStatement();方方 法法 原原 型型說(shuō)說(shuō) 明明Statement createStatement()throws SQLException成功創(chuàng)建返回成功創(chuàng)建返回Statement對(duì)象,對(duì)象,否則拋出否則拋出SQLException異常,異常,必須捕捉必須捕捉步驟詳解步驟詳解5 5:執(zhí)行:執(zhí)行SQLSQL語(yǔ)句語(yǔ)句使用語(yǔ)句對(duì)象來(lái)執(zhí)行SQL語(yǔ)句,有兩種情況:一種是執(zhí)行DELETE、UPDATE和INSERT之類(lèi)的數(shù)據(jù)庫(kù)操作語(yǔ)句(DML),這樣的語(yǔ)句沒(méi)有數(shù)據(jù)結(jié)果返回,使用Statement對(duì)象的executeUpdate方法執(zhí)行;如:sta.

15、executeUpdate(INSERT INTO Friends VALUES(田七, 重慶, 456712, 2003-2-25, 7500);方方 法法 原原 型型說(shuō)說(shuō) 明明int executeUpdate(String sql)throws SQLException參數(shù)參數(shù)sql是要執(zhí)行的是要執(zhí)行的SQL語(yǔ)句,執(zhí)行成功返語(yǔ)句,執(zhí)行成功返回受影響的行數(shù),執(zhí)行失敗則拋出回受影響的行數(shù),執(zhí)行失敗則拋出SQLException異常,必須捕捉異常,必須捕捉步驟詳解步驟詳解5 5:執(zhí)行:執(zhí)行SQLSQL語(yǔ)句(續(xù))語(yǔ)句(續(xù))另一種是執(zhí)行SELECT這樣的數(shù)據(jù)查詢(xún)語(yǔ)句(DQL),這樣的語(yǔ)句將從數(shù)據(jù)庫(kù)

16、中獲得所需的數(shù)據(jù),使用Statement對(duì)象的executeQuery 方法執(zhí)行;如:ResultSet rs =sta.executeQuery(SELECT * FROM Friend);方方 法法 原原 型型說(shuō)說(shuō) 明明ResultSet executeQuery(String sql)throws SQLException參數(shù)參數(shù)sql是要執(zhí)行的是要執(zhí)行的SQL語(yǔ)句,查詢(xún)成語(yǔ)句,查詢(xún)成功返回包含有結(jié)果數(shù)據(jù)的功返回包含有結(jié)果數(shù)據(jù)的ResultSet對(duì)對(duì)象,否則拋出象,否則拋出SQLException異常,異常,必須捕捉必須捕捉步驟詳解步驟詳解6 6:關(guān)閉資源:關(guān)閉資源當(dāng)對(duì)數(shù)據(jù)庫(kù)的操作結(jié)束后

17、,應(yīng)當(dāng)將所有已經(jīng)被打開(kāi)的資源關(guān)閉,否則將會(huì)造成資源泄漏;Connection對(duì)象、Statement對(duì)象和ResultSet對(duì)象都有執(zhí)行關(guān)閉的close方法;函數(shù)原型都是:void close() throws SQLException 如:rs.close(); /關(guān)閉ResultSet對(duì)象sta.close(); /關(guān)閉Statement對(duì)象con.close(); /關(guān)閉Connection對(duì)象有可能拋出SQLException異常,必須捕捉;請(qǐng)注意關(guān)閉的順序,最后打開(kāi)的資源最先關(guān)閉,最先打開(kāi)的資源最后關(guān)閉。數(shù)據(jù)庫(kù)操作示例數(shù)據(jù)庫(kù)操作示例import java.sql.*; /導(dǎo)入導(dǎo)入ja

18、va.sql包包public class JDBCDemo public static void main(String args) String strCon = jdbc:odbc:myODBC; /連接字符串連接字符串 String strUser = sa; /數(shù)據(jù)庫(kù)用戶(hù)名數(shù)據(jù)庫(kù)用戶(hù)名 String strPwd = ; /口令口令 System.out.println(正在連接數(shù)據(jù)庫(kù)正在連接數(shù)據(jù)庫(kù).); try /監(jiān)控異常監(jiān)控異常 Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); /加載驅(qū)動(dòng)程序加載驅(qū)動(dòng)程序 Connection con; /獲

19、得連接對(duì)象獲得連接對(duì)象 con = DriverManager.getConnection(strCon, strUser, strPwd); System.out.println(成功連接到數(shù)據(jù)庫(kù)。成功連接到數(shù)據(jù)庫(kù)。); Statement sta = con.createStatement(); /創(chuàng)建語(yǔ)句對(duì)象創(chuàng)建語(yǔ)句對(duì)象 /執(zhí)行執(zhí)行SQL語(yǔ)句語(yǔ)句 String strSql = DELETE FROM Friends WHERE Name = 鄭六鄭六; int count = sta.executeUpdate(strSql); System.out.println(成功刪除成功刪除

20、+ count + 行數(shù)據(jù)。行數(shù)據(jù)。); sta.close(); con.close(); /關(guān)閉所有已經(jīng)打開(kāi)的資源關(guān)閉所有已經(jīng)打開(kāi)的資源 catch (ClassNotFoundException cnfe) cnfe.printStackTrace(); catch (SQLException sqle) sqle.printStackTrace(); 操作結(jié)果集操作結(jié)果集使用Statement對(duì)象的executeQuery方法成功執(zhí)行SELECT語(yǔ)句后,將返回一個(gè)包含有結(jié)果數(shù)據(jù)的ResultSet對(duì)象,要從該對(duì)象中獲取數(shù)據(jù),將使用到如下方法:方方 法法 原原 型型說(shuō)說(shuō) 明明boolea

21、n next()throws SQLException將結(jié)果集游標(biāo)往下移動(dòng)一行,如果已經(jīng)到將結(jié)果集游標(biāo)往下移動(dòng)一行,如果已經(jīng)到達(dá)結(jié)果集最后,將會(huì)返回達(dá)結(jié)果集最后,將會(huì)返回false,有可能拋,有可能拋異常,必須捕捉異常,必須捕捉X getX(String columnName)throws SQLException獲得某個(gè)字段的值,獲得某個(gè)字段的值,X是指具體的數(shù)據(jù)類(lèi)是指具體的數(shù)據(jù)類(lèi)型,視數(shù)據(jù)庫(kù)表中字段的具體情況而定,型,視數(shù)據(jù)庫(kù)表中字段的具體情況而定,該方法有一組,并且每個(gè)都有兩種重載方該方法有一組,并且每個(gè)都有兩種重載方法,一種是以字段名稱(chēng)為參數(shù),另一種是法,一種是以字段名稱(chēng)為參數(shù),另一種

22、是以字段索引為參數(shù)(字段索引從以字段索引為參數(shù)(字段索引從1開(kāi)始),開(kāi)始),有可能拋異常,必須捕捉有可能拋異常,必須捕捉X getX(int columnIndex)throws SQLException操作結(jié)果集示例操作結(jié)果集示例try String strCon = jdbc:odbc:MyODBC; System.out.println(正在連接數(shù)據(jù)庫(kù)正在連接數(shù)據(jù)庫(kù).); Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); Connection con; con = DriverManager.getConnection(strCon, sa, );

23、 System.out.println(成功連接到數(shù)據(jù)庫(kù)。成功連接到數(shù)據(jù)庫(kù)。); Statement sta = con.createStatement(); ResultSet rs = sta.executeQuery(SELECT * FROM Friends); System.out.println(查詢(xún)到數(shù)據(jù)如下:查詢(xún)到數(shù)據(jù)如下:); while (rs.next() /循環(huán)將結(jié)果集游標(biāo)往下移動(dòng),到達(dá)末尾返回循環(huán)將結(jié)果集游標(biāo)往下移動(dòng),到達(dá)末尾返回false /根據(jù)字段名稱(chēng)獲得各個(gè)字段的值根據(jù)字段名稱(chēng)獲得各個(gè)字段的值 System.out.print(rs.getString(Name

24、) + t); /獲得字符串獲得字符串 System.out.print(rs.getString(Address) + t); /獲得字符串獲得字符串 System.out.print(rs.getInt(Telephone) + t); /獲得整數(shù)獲得整數(shù) System.out.print(rs.getDate(HireDate) + t); /獲得日期型數(shù)據(jù)獲得日期型數(shù)據(jù) System.out.println(rs.getFloat(Salary); /獲得浮點(diǎn)型數(shù)據(jù)獲得浮點(diǎn)型數(shù)據(jù) rs.close(); sta.close(); con.close(); catch (ClassNot

25、FoundException cnfe) cnfe.printStackTrace(); catch (SQLException sqle) sqle.printStackTrace(); PreparedStatementPreparedStatement接口接口1 1如果要多次執(zhí)行相似的SQL語(yǔ)句,可以使用PreparedStatemend(預(yù)編譯語(yǔ)句對(duì)象)對(duì)象來(lái)執(zhí)行;通過(guò)Connection對(duì)象的prepareStatement方法來(lái)創(chuàng)建預(yù)編譯語(yǔ)句對(duì)象;PreparedStatement對(duì)象會(huì)將SQL語(yǔ)句預(yù)先編譯,這樣將會(huì)獲得比Statement對(duì)象更高的執(zhí)行效率。方方 法法 原原 型型

26、說(shuō)說(shuō) 明明PreparedStatementprepareStatement(String sql)throws SQLException參數(shù)參數(shù)sql是要執(zhí)行的是要執(zhí)行的SQL語(yǔ)句,根據(jù)指定的語(yǔ)句,根據(jù)指定的SQL語(yǔ)語(yǔ)句創(chuàng)建句創(chuàng)建PrepareStatement對(duì)象,有可能拋異常,必對(duì)象,有可能拋異常,必須捕捉須捕捉PreparedStatementPreparedStatement接口接口2 2包含在PreparedStatement對(duì)象中的SQL語(yǔ)句可以帶有一個(gè)或多個(gè)參數(shù),使用“?”作為占位符,如:PreparedStatement ps = con.prepareStatement(U

27、PDATE Friends SET Address = ? WHERE Name = ?);在執(zhí)行SQL語(yǔ)句之前,必須使用PreparedStatement對(duì)象中的setX方法設(shè)置每個(gè)“?”位置的參數(shù)值;如:ps.setString(1, 長(zhǎng)沙);ps.setString(2, 王五);方方 法法 原原 型型說(shuō)說(shuō) 明明void setX(int parameterIndex, X x)throws SQLException將將parameterIndex指定的指定的“?”位置指定為位置指定為x的的值,這里值,這里X可以指代任意數(shù)據(jù)類(lèi)型,可以指代任意數(shù)據(jù)類(lèi)型, “?”的的索引從索引從1開(kāi)始。開(kāi)始

28、。PreparedStatementPreparedStatement接口接口3 3設(shè)置好每個(gè)參數(shù)的值之后,就可以使用PreparedStatement對(duì)象的executeUpdate和executeQuery方法來(lái)執(zhí)行SQL語(yǔ)句,這一點(diǎn)和Statement對(duì)象很相似:方方 法法 原原 型型說(shuō)說(shuō) 明明int executeUpdate()throws SQLException用于執(zhí)行用于執(zhí)行INSERT、DELETE和和UPDATE語(yǔ)語(yǔ)句,執(zhí)行成功返回受影響的行數(shù),否則拋出句,執(zhí)行成功返回受影響的行數(shù),否則拋出SQLException異常,必須捕捉異常,必須捕捉ResultSet execut

29、Query()throws SQLException用于執(zhí)行用于執(zhí)行SELECT語(yǔ)句,執(zhí)行成功返回包含語(yǔ)句,執(zhí)行成功返回包含有結(jié)果數(shù)據(jù)的有結(jié)果數(shù)據(jù)的ResultSet對(duì)象,否則拋出對(duì)象,否則拋出SQLException異常,必須捕捉異常,必須捕捉PreparedStatementPreparedStatement對(duì)象示例對(duì)象示例String strCon = jdbc:odbc:MyODBC;System.out.println(正在連接數(shù)據(jù)庫(kù)正在連接數(shù)據(jù)庫(kù).);Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);Connection con;con = D

30、riverManager.getConnection(strCon, sa, );System.out.println(成功連接到數(shù)據(jù)庫(kù)。成功連接到數(shù)據(jù)庫(kù)。);PreparedStatement ps;/使用帶參數(shù)的使用帶參數(shù)的SQL語(yǔ)句創(chuàng)建語(yǔ)句創(chuàng)建PreparedStatement對(duì)象對(duì)象ps = con.prepareStatement(UPDATE Friends SET Address = ? WHERE Name = ?);/設(shè)置設(shè)置SQL語(yǔ)句中的參數(shù)值語(yǔ)句中的參數(shù)值ps.setString(1, 長(zhǎng)沙長(zhǎng)沙);ps.setString(2, 王五王五);int count = ps.

31、executeUpdate(); /執(zhí)行命令執(zhí)行命令System.out.println(成功更新了成功更新了 + count + 行數(shù)據(jù)。行數(shù)據(jù)。); ps.close(); /關(guān)閉資源關(guān)閉資源con.close();純純JavaJava驅(qū)動(dòng)方式連接數(shù)據(jù)庫(kù)驅(qū)動(dòng)方式連接數(shù)據(jù)庫(kù)使用JDBC-ODBC橋方式連接數(shù)據(jù)庫(kù),其性能完全取決于數(shù)據(jù)源(ODBC)的性能,并且無(wú)法脫離Microsoft的平臺(tái),這樣將帶來(lái)不便;大部分DBMS產(chǎn)商都為自己的產(chǎn)品開(kāi)發(fā)了純Java的驅(qū)動(dòng)程序,我們只需要加載相應(yīng)的驅(qū)動(dòng),就可以直接連接到數(shù)據(jù)庫(kù),而無(wú)需通過(guò)ODBC橋連接;鑒于DBMS產(chǎn)品太多,這里只針對(duì)當(dāng)今比較流行的SQL

32、 Server 2000和Oracle 9i進(jìn)行介紹。下載驅(qū)動(dòng)程序包下載驅(qū)動(dòng)程序包要使用純Java驅(qū)動(dòng),首先必須獲得相應(yīng)數(shù)據(jù)庫(kù)的驅(qū)動(dòng)程序包;根據(jù)數(shù)據(jù)庫(kù)的類(lèi)型,登錄對(duì)應(yīng)產(chǎn)商的官方網(wǎng)站,一般都可以免費(fèi)獲得;下載后,復(fù)制到本地磁盤(pán),并將完整路徑設(shè)置到classpath環(huán)境變量中,如用開(kāi)發(fā)工具開(kāi)發(fā)程序,還需在開(kāi)發(fā)環(huán)境中設(shè)置路徑。純純JavaJava驅(qū)動(dòng)連接驅(qū)動(dòng)連接SQL Server2000SQL Server2000使用純Java驅(qū)動(dòng)連接到SQL Server 2000數(shù)據(jù)庫(kù),加載驅(qū)動(dòng)程序應(yīng)改成如下語(yǔ)句:Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver);連接字符串應(yīng)如下格式:jdbc:microsoft:sqlserver:/服務(wù)器名或IP:1433;databaseName=數(shù)據(jù)庫(kù)名如:Connection con = DriverManager.getConnection(jdbc:microsoft:sqlserver:/127.0.0.1:1433;databaseName=pubs, sa, ); 純純JavaJava驅(qū)動(dòng)連接驅(qū)動(dòng)連接

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論