數(shù)據(jù)庫(kù)連接(JDBC)及其.ppt
《數(shù)據(jù)庫(kù)連接(JDBC)及其.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《數(shù)據(jù)庫(kù)連接(JDBC)及其.ppt(23頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、第11章 數(shù)據(jù)庫(kù)連接(JDBC)及其應(yīng)用,本章要點(diǎn): 數(shù)據(jù)源的配置 數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序加載的方式 數(shù)據(jù)庫(kù)操作的流程 事務(wù)控制 預(yù)查詢,11.1 JDBC基本編程概念,JDBC協(xié)議遵循了微軟公司的ODBC模型,并與ODBC建立在同一方案的基礎(chǔ)之上:遵循JDBC API協(xié)議的程序和JDBC驅(qū)動(dòng)程序管理器通信,驅(qū)動(dòng)程序管理器用嵌入的驅(qū)動(dòng)程序訪問(wèn)數(shù)據(jù)庫(kù)。 從程序設(shè)計(jì)的角度來(lái)看,用JDBC類編程與使用一般的Java類編程并沒(méi)有太大的不同。,11.1.1 設(shè)定ODBC數(shù)據(jù)源,------語(yǔ)法------2000版本 String URL=jdbc:microsoft:sqlserver://localhost
2、:1433; DatabaseName=news; Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver); Connection con = DriverManager.getConnection(URL,sa,sa);,sql server數(shù)據(jù)庫(kù)驅(qū)動(dòng)類的完全限定類名,演示:在工程中引入JDBC驅(qū)動(dòng)程序包,數(shù)據(jù)庫(kù)名稱,------語(yǔ)法------2005版本 String URL=jdbc:sqlserver://localhost:1433; DatabaseName=news; Class.forName(com.micro
3、soft. sqlserver. jdbc.SQLServerDriver); Connection con = DriverManager.getConnection(URL,sa,sa);,sql server數(shù)據(jù)庫(kù)驅(qū)動(dòng)類的完全限定類名,演示:在工程中引入JDBC驅(qū)動(dòng)程序包,數(shù)據(jù)庫(kù)名稱,1. SQL Server 2000數(shù)據(jù)庫(kù)連接字符串 Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver).newInstance();Connectionconn=java.sql.DriverManager.getConnection(j
4、dbc:microsoft:sqlserver://數(shù)據(jù)庫(kù)服務(wù)器名或地址:1433;DatabaseName=數(shù)據(jù)庫(kù)名,用戶名,密碼); 所需jar包:msbase.jar、mssqlserver.jar、msutil.jar 2. SQL Server 2005 數(shù)據(jù)庫(kù)連接字符串: Class.forName(com.microsoft.sqlserver.jdbc.SQLServerDriver).newInstance();Connectionconn=java.sql.DriverManager.getConnection(jdbc:sqlserver://數(shù)據(jù)庫(kù)服務(wù)器名或地址:143
5、3;DatabaseName=數(shù)據(jù)庫(kù)名,用戶名,密碼);,11.1.2 數(shù)據(jù)庫(kù)URL 要連接一個(gè)數(shù)據(jù)庫(kù),必須要指定源數(shù)據(jù)庫(kù),有時(shí)也需要指定相應(yīng)的參數(shù)。例如:網(wǎng)絡(luò)協(xié)議驅(qū)動(dòng)程序需要指定端口、ODBC驅(qū)動(dòng)程序等。 JDBC用類似于常見的Net URL句法描述數(shù)據(jù)庫(kù)。例如:我們通過(guò)JDBCODBC橋連接一個(gè)Access數(shù)據(jù)庫(kù)myAccess: jdbc:odbc:myAccess String driverName=sun.jdbc.odbc.JdbcOdbcDriver; String URL=jdbc:odbc:db1; JDBC常規(guī)的URL句法是: jdbc:subprotocol name
6、:datasource 連接到Oracle數(shù)據(jù)庫(kù)及SQL Server的URL分別如下: Oracle數(shù)據(jù)庫(kù) jdbc:oracle:thin:127.0.0.1:1521:wangwd,數(shù)據(jù)庫(kù)名稱,因?yàn)檫B接Oracle數(shù)據(jù)庫(kù)一般是通過(guò)客戶端去進(jìn)行的, Oracle客戶端也被稱為瘦型機(jī)(thin),對(duì)于127.0.0.1這是本地IP地址,也就是說(shuō)Oracle數(shù)據(jù)庫(kù)是安裝在本機(jī)上的,當(dāng)然在這里用戶也可以采用如下的格式: jdbc:oracle:thin:localhost:1521:wangwd 1521是Oracle訪問(wèn)端口號(hào),wangwd是建立的Oracle數(shù)據(jù)庫(kù)的名字,用戶可以換成自己喜歡
7、的名字。 SQL Server 2000數(shù)據(jù)庫(kù)URL jdbc:microsoft:sqlserver://localhost:1433 在這里采用默認(rèn)的數(shù)據(jù)庫(kù),如果用戶自己創(chuàng)立的數(shù)據(jù)庫(kù)如myBook,可以采用如下的格式: jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=myBook,SQL Server 2005數(shù)據(jù)庫(kù)URL jdbc:sqlserver://localhost:1433 在這里采用默認(rèn)的數(shù)據(jù)庫(kù),如果用戶自己創(chuàng)立的數(shù)據(jù)庫(kù)如myBook,可以采用如下的格式: jdbc:sqlserver://localhost:14
8、33;DatabaseName=myBook 驅(qū)動(dòng)程序全稱: com.microsoft.sqlserver.jdbc.SQLServerDriver,11.1.3 建立連接 驅(qū)動(dòng)程序管理器(DriverManager)類是負(fù)責(zé)選擇數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序和建立到數(shù)據(jù)庫(kù)的連接的類,但驅(qū)動(dòng)程序管理器只能激活已登錄的驅(qū)動(dòng)程序。 登錄驅(qū)動(dòng)程序的方法如下: 裝入一個(gè)驅(qū)動(dòng)程序類以自己登錄驅(qū)動(dòng)程序。例如可以用以下方式登錄Oracle驅(qū)動(dòng)程序: Class.forName(oracle.jdbc.driver.OracleDriver); 用戶也可以用下面的方式登錄一個(gè)SQL Server的驅(qū)動(dòng)程序: Class.
9、forName(com.microsoft.jdbc.sqlserver.SQLServerDriver); 登錄我們剛剛建立的ODBC數(shù)據(jù)源的方法如下: Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);,現(xiàn)在我們假設(shè)安裝了Oracle數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)名字為wangwd,則得到一個(gè)數(shù)據(jù)庫(kù)的連接如下: Class.forName(oracle.jdbc.driver.OracleDriver);//登錄Oracle數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序 String url = jdbc:oracle:thin:localhost:1521:wangwd;//數(shù)據(jù)庫(kù)URL Stri
10、ng userName =scott;//登錄數(shù)據(jù)庫(kù)用戶名 String password = tiger;//用戶密碼 Connection con = DriverManager.getConnection(url, userName, password); 接著我們?cè)僖怨P者安裝的SQL Server為例,并新建一個(gè)數(shù)據(jù)庫(kù)為studentmanager: Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver); String url =jdbc:microsoft:sqlserver://localhost:1433; Dat
11、abaseName=studentmanager; String userName = sa; String password = ; Connection con = DriverManager.getConnection(url, userName, password);,11.1.4 建立會(huì)話 數(shù)據(jù)庫(kù)建立連接后,要想操縱數(shù)據(jù)庫(kù),必須跟數(shù)據(jù)庫(kù)建立一個(gè)會(huì)話。所謂會(huì)話就是從建立一個(gè)數(shù)據(jù)庫(kù)連接到關(guān)閉數(shù)據(jù)庫(kù)連接所進(jìn)行的所有動(dòng)作的總稱,這與數(shù)據(jù)庫(kù)會(huì)話是不同的??梢酝ㄟ^(guò)如下的代碼得到一個(gè)會(huì)話: tryStatement st = con.createStatement(); catch(SQLExce
12、ption e) 通過(guò)這段代碼我們可以知道,創(chuàng)建一個(gè)會(huì)話是建立在數(shù)據(jù)庫(kù)連接的基礎(chǔ)上的?,F(xiàn)在我們得到了一個(gè)默認(rèn)的會(huì)話。接下來(lái)就可以進(jìn)行數(shù)據(jù)庫(kù)的具體操作了。,11.1.5 操作數(shù)據(jù)庫(kù) 如果我們把數(shù)據(jù)庫(kù)(database)看作是一個(gè)倉(cāng)庫(kù),那到數(shù)據(jù)庫(kù)的連接(Connection)就可以假想成一條通往倉(cāng)庫(kù)的陽(yáng)光大道,那么會(huì)話(Statement)就可以看作是跑在這條大道上的一輛貨車,我們對(duì)數(shù)據(jù)庫(kù)進(jìn)行的不同的操作(SQL語(yǔ)句),就是對(duì)這輛貨車發(fā)出不同的指令(update、delete、query等),執(zhí)行的結(jié)果就是從數(shù)據(jù)庫(kù)中返回操作結(jié)果,這個(gè)結(jié)果就類似于從倉(cāng)庫(kù)拉回不同的貨物。 1. 查詢 查詢操作是數(shù)據(jù)庫(kù)
13、中最基本的語(yǔ)句,通過(guò)如下的語(yǔ)句可以對(duì)數(shù)據(jù)庫(kù)執(zhí)行一個(gè)查詢,查詢的結(jié)果是以結(jié)果集(ResultSet)的形式返回的。 String sql = select * from student; ResultSet result = st.executeQuery(sql);,ResultSet類的若干方法,例11-1程序清單 QueryODBCTest.java /** * 通過(guò)這個(gè)程序,向讀者展示比較完整的JDBC數(shù)據(jù)庫(kù)操作的順序,在這個(gè)例子中主要展示的查詢 * 及格式輸出。 */ import java.sql.SQLException; import java.sql.Connection; i
14、mport java.sql.Statement; import java.sql.ResultSet; import java.sql.DriverManager; import java.sql.Date; public class QueryODBCTest private Connection con; public static void main(String args) QueryODBCTest test = new QueryODBCTest(); Connection con = test.getConnection(); String sql = select *
15、from student; test.getStudent(con, sql); ,public void getStudent(Connection con, String sql) try Statement st = con.createStatement(); ResultSet rs = st.executeQuery(sql); while(rs.next()) String name =rs.getString(姓名); String number = rs.getString(學(xué)號(hào)); Date date = rs.getDate(出生日期); String spe = r
16、s.getString(專業(yè)); String address = rs.getString(籍貫); System.out.println( n姓名: + name + t學(xué)號(hào): + number + t出生日期: + date + t專業(yè): + spe + t籍貫: + address ); ,st.close(); con.close(); catch(SQLException e) e.printStackTrace(); public Connection getConnection() String url = jdbc:odbc:myAccess;//數(shù)據(jù)庫(kù)URL String
17、 userName = ;//登錄數(shù)據(jù)庫(kù)用戶名 String password = ;//用戶密碼 try //登錄JDBC-ODBC驅(qū)動(dòng)程序 Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); con = DriverManager.getConnection(url, userName, password); catch(SQLException e), e.printStackTrace(); catch(ClassNotFoundException ex) ex.printStackTrace(); return con; ,2. 建表 下面我
18、們將在SQL Server中利用數(shù)據(jù)庫(kù)的相關(guān)操作建立一個(gè)student表,并插入相關(guān)的記錄。 在創(chuàng)建一個(gè)表格時(shí),我們是通過(guò): st.execute(sql); 來(lái)實(shí)現(xiàn)的。execute方法的返回值是一個(gè)boolean型的,如果執(zhí)行成功就返回true,反之則返回false。 在執(zhí)行插入記錄的操作時(shí),我們是通過(guò): st.executeUpdate(sql); 來(lái)實(shí)現(xiàn)的。它的返回值是一個(gè)int型的數(shù)值,它表示當(dāng)前操作完成的記錄數(shù)。,3. 創(chuàng)建數(shù)據(jù)庫(kù) 在前面的示例中,我們都是通過(guò)直接將SQL語(yǔ)句嵌入到程序本身中,這種編碼方式我們習(xí)慣上稱之為硬編碼。硬編碼看起來(lái)比較容易編寫,但存在一個(gè)很大的缺點(diǎn),那就是
19、兼容性不強(qiáng),這里的兼容性指的是程序的兼容性。試想,假如我們按照以下的形式創(chuàng)建了一張表: String sql = CREATE TABLE SUTDENT(姓名 varchar(12) NOT NULL, +學(xué)號(hào) varchar(10) NOT NULL, + 出生日期 datetime NOT NULL,專業(yè) varchar(10) NULL, +籍貫 varchar(30) NULL); 如果由于某種原因需要將籍貫的字段長(zhǎng)度更改為50位字符長(zhǎng),那只有重新修改程序代碼,并重新編譯,重新發(fā)布,這樣做無(wú)疑是非常麻煩的?,F(xiàn)在我們可以將類似的SQL語(yǔ)句也通過(guò)配置文件配置,并且當(dāng)需要修改數(shù)據(jù)庫(kù)結(jié)構(gòu)時(shí),
20、我們只需要簡(jiǎn)單地修改一下屬性文件就可以了。,11.2 預(yù)查詢,接下來(lái),我們?cè)俳榻BJDBC在進(jìn)行查詢數(shù)據(jù)庫(kù)操作方面的一個(gè)新的特性:預(yù)查詢(prepared statement)。根據(jù)字面的意思,我們知道預(yù)查詢也就是在執(zhí)行真正的查詢工作之前先做一部分準(zhǔn)備工作,以適應(yīng)真正的查詢,這樣做的目的是為了減少數(shù)據(jù)庫(kù)操作的時(shí)間。 現(xiàn)在假設(shè)我們想從建立的數(shù)據(jù)庫(kù)中查詢符合條件的一條記錄: select 姓名,學(xué)號(hào),專業(yè),籍貫 from student where 姓名 = 需要用戶輸入的信息 在這個(gè)SQL語(yǔ)句中,只有需要用戶輸入的信息是可變的,其他信息基本上不變,所以我們可以考慮把前面的信息先輸入到數(shù)據(jù)庫(kù)中,只要
21、用戶輸入想查詢的人名就可以了,這種情況就像是數(shù)據(jù)庫(kù)在等待填空一樣。 在JDBC中預(yù)查詢是用“?”來(lái)替代未知條件,那么上面的SQL語(yǔ)句就可以實(shí)現(xiàn)為: select 姓名,學(xué)號(hào),專業(yè),籍貫 from student where 姓名 = ?,11.3 小結(jié),通過(guò)這一章的講述,使讀者能使我們的應(yīng)用程序與數(shù)據(jù)庫(kù)有機(jī)的結(jié)合起來(lái),在這一章中,筆者通過(guò)示例示范了連接不同數(shù)據(jù)庫(kù)的方法,并分別講述了數(shù)據(jù)庫(kù)的相關(guān)操作,希望讀者在實(shí)際應(yīng)用中仔細(xì)體會(huì)。盡管現(xiàn)在JDBC對(duì)于某些功能的支持不是太好,但隨著JDBC2的應(yīng)用與發(fā)展,會(huì)有很大的轉(zhuǎn)變,在JDBC2中也會(huì)有更新的功能與改變體現(xiàn)出來(lái),讀者可以查看Sun公司關(guān)于JDBC2設(shè)計(jì)規(guī)范。,
- 溫馨提示:
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. 裝配圖網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 初中生物對(duì)照實(shí)驗(yàn)專題復(fù)習(xí)課件
- 初中物理資源九年級(jí)第十五單元課件串并聯(lián)識(shí)別
- 咯血與嘔血課件
- What's_your_number_課件
- 外研版七下Module3Unit1(教育精品)
- 浙美版三年級(jí)上冊(cè)美術(shù)第15課-剪雪花教學(xué)ppt課件
- 蘇教版六年級(jí)下冊(cè)數(shù)學(xué)正比例和反比例的意義課件
- 蘇教版五下《單式折線統(tǒng)計(jì)圖》教研課件
- 固態(tài)相變概論
- 三角形全等的判定復(fù)習(xí)-課件2
- 太陽(yáng)能發(fā)展趨勢(shì)課件
- 道路工程監(jiān)理最新規(guī)劃范本課件
- SPC及CPK教程(理論篇)課件
- Travel-Plan旅行計(jì)劃-PPT
- 新冠肺炎疫情期間醫(yī)務(wù)人員防護(hù)技術(shù)指南