版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第13章 Java與數(shù)據(jù)庫(kù)JDBC,姓名 性別 出生日期 職務(wù),王紅 女 75/03/05 工程師,張強(qiáng) 男 70/06/15 講師,李剛 男 70/07/09 工人,王芳 女 65/10/09 工程師,字段(列),記錄 (行),表文件,示例: 表文件與二維表對(duì)應(yīng),1、創(chuàng)建新表 student,2、追加新記錄命令格式: INSERT INTO 表名(字段名1,字段名2.) VALUES(表達(dá)式1,表達(dá)式2),功能: 在表尾追加一個(gè)新記錄,并直接饋入數(shù)據(jù)。 說(shuō)明:1.表不必是打開(kāi)的,字段與表達(dá)式的類(lèi)型必須相同。 2.如果字段名全部缺省,就必須按字段順序填寫(xiě) values子句的所有表達(dá)式。,例:為
2、剛建立學(xué)生信息表student(姓名,性別,年齡)填加數(shù)據(jù),insert into student values(白雪公主,女,16) insert into student (年齡,姓名) values (23,白馬王子),INSERT INTO 表名(字段名1,字段名2.) VALUES(表達(dá)式1,表達(dá)式2),3、用Select-SQL命令直接查詢(xún)簡(jiǎn)化 Select-SQL命令格式:SELECT* / , . FROM 表名 WHERE AND ,例1:在學(xué)生表student中,查找所有學(xué)生的姓名,select 姓名 from student,例:在學(xué)生表student(姓名,性別,年齡)
3、中,查找所有學(xué)生的記錄,select * from student,SELECT * / , . FROM 表名WHERE AND ,Where子句指定查詢(xún)條件:列名、比較運(yùn)算符、列名于常數(shù) 常用的比較運(yùn)算符: =、=、 between and、and、or、not,例2:在學(xué)生表student中,查詢(xún)所有年齡大于20的男同學(xué)的正確的SQL語(yǔ)句是,Select * from student where 年齡20 and 性別=男,SELECT * / , . FROM 表名WHERE AND ,例3:在學(xué)生表student中,查詢(xún)年齡在20至23歲之間的學(xué)生姓名和年齡正確的SQL語(yǔ)句是,Sel
4、ect 姓名,年齡 from student where 年齡=20 and 年齡=23 Select 姓名,年齡 from student where 年齡 between 20 and 23,SELECT * / , . FROM 表名WHERE AND ,4、更新記錄命令格式: Update 表名 set 字段名1=表達(dá)式1 ,字段名2=表達(dá)式2 .) where 聯(lián)結(jié)條件,例: update student set 年齡=20 where 姓名=賈寶玉,5、刪除記錄命令格式: delete * from 表名 where 聯(lián)結(jié)條件,例: delete from student wher
5、e 姓名=賈寶玉,JDBC,1996年夏,Sun公司推出了Java數(shù)據(jù)庫(kù)連接(Java Database Connectivity,JDBC)工具包的第一個(gè)版本。 該工具包使得程序員可以使用結(jié)構(gòu)化查詢(xún)語(yǔ)言(SQL)連接到一個(gè)數(shù)據(jù)庫(kù),對(duì)數(shù)據(jù)庫(kù)進(jìn)行查詢(xún),或者對(duì)數(shù)據(jù)庫(kù)進(jìn)行更新。 JDBC使得Java不僅能夠和遠(yuǎn)程數(shù)據(jù)通信,也能夠在各種不同得數(shù)據(jù)源之間通信,從而擴(kuò)大了Java這種跨平臺(tái)編程語(yǔ)言的應(yīng)用范圍,提高了它的應(yīng)用價(jià)值。 JDBC是Java程序連接和存取數(shù)據(jù)庫(kù)的應(yīng)用程序接口(API),它是Java核心API的一部分。,13.1.1 JDBC數(shù)據(jù)庫(kù)應(yīng)用模型,JDBC由兩層組成,上面一層是JDBC A
6、PI,下面一層是JDBC驅(qū)動(dòng)程序API 。,JDBC驅(qū)動(dòng)程序,JDBC驅(qū)動(dòng)程序按照連接方式的不同可以分為四種類(lèi)型: Type 1:JDBC-ODBC Bridge Type 2:Native API Bridge Type 3:JDBC-Middleware Type 4:Pure JDBC Driver,JDBC的用途是什么?,簡(jiǎn)單地說(shuō),JDBC可做三件事: 與數(shù)據(jù)庫(kù)建立連接; 發(fā)送SQL語(yǔ)句, 處理結(jié)果。 JDBC API在java.sql包中定義,其中包括JDBC API用到的所有類(lèi)、接口和方法,利用JDBC開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用的一般步驟,(1)建立與數(shù)據(jù)庫(kù)的連接 (2)執(zhí)行SQL語(yǔ)句 (3)
7、處理結(jié)果集 (4)關(guān)閉數(shù)據(jù)庫(kù)的連接,使用JDBC連接到數(shù)據(jù)庫(kù)步驟,(1)建立與數(shù)據(jù)庫(kù)的連接 A、加載JDBC驅(qū)動(dòng)程序 在使用JDBC驅(qū)動(dòng)程序之前,先加載并注冊(cè)此驅(qū)動(dòng)程序,若使用JDBC-ODBC橋,則為: Class.forName(“sun.jdbc.odbc.jdbcodbcDriver”); Class.forName(“oracle.jdbc.driver.OracleDriver”);,(1)建立與數(shù)據(jù)庫(kù)的連接 B、連接到數(shù)據(jù)庫(kù) 使用DriverManager的getConnection()來(lái)連接到指定的數(shù)據(jù)庫(kù),由于可能會(huì)同時(shí)使用不同的JDBC驅(qū)動(dòng)程序,DriverManager會(huì)從
8、已注冊(cè)的JDBC驅(qū)動(dòng)程序中搜索合適的驅(qū)動(dòng)程序并連接到數(shù)據(jù)庫(kù),若是使用JDBC-ODBC橋,則為: String url= “jdbc:oracle:student” Connection con = DriverManager.getConnection(url, “ ”, “”),使用JDBC連接到數(shù)據(jù)庫(kù)步驟,數(shù)據(jù)庫(kù)URL的格式為: jdbc: 子協(xié)議odbc表示對(duì)ODBC數(shù)據(jù)源的訪問(wèn),其格式為: jdbc:odbc: 例如:String url = jdbc:odbc:people;,使用JDBC連接到數(shù)據(jù)庫(kù)步驟,DriverManager類(lèi)的getConnection方法用于建立與某個(gè)數(shù)
9、據(jù)源的連接。若與由URL指定的數(shù)據(jù)源建立連接成功,則返回一個(gè)Connection類(lèi)的對(duì)象。以后對(duì)于這個(gè)數(shù)據(jù)源的操作都是基于這個(gè)對(duì)象。getConnection方法是DriverManager類(lèi)中的靜態(tài)方法。 其中,getConnection()的第1個(gè)參數(shù)是數(shù)據(jù)庫(kù)URL,第2個(gè)為用戶(hù)名字,第3個(gè)為密碼。 例如:Connection con = DriverManager.getConnection(url, “sa”, “”),使用JDBC連接到數(shù)據(jù)庫(kù)步驟,(2)將SQL語(yǔ)句送至數(shù)據(jù)庫(kù),執(zhí)行SQL語(yǔ)句 A、創(chuàng)建Statement對(duì)象 建立了到特定數(shù)據(jù)庫(kù)的連接之后,就可用該連接發(fā)送SQL語(yǔ)句。S
10、tatement對(duì)象用Connection的方法createStatement創(chuàng)建,如下列代碼段中所示:Connectioncon=DriverManager.getConnection(url,sunny,);Statementstmt=con.createStatement();,使用JDBC連接到數(shù)據(jù)庫(kù)步驟,(2)將SQL語(yǔ)句送至數(shù)據(jù)庫(kù),執(zhí)行SQL語(yǔ)句 B、發(fā)送Statement對(duì)象SQL語(yǔ)句 為了執(zhí)行Statement對(duì)象,被發(fā)送到數(shù)據(jù)庫(kù)的SQL語(yǔ)句將被作為參數(shù)提供給Statement的方法:ResultSetrs=stmt.executeQuery(“SELECT姓名,性別,年齡FR
11、OMstudent);,使用JDBC連接到數(shù)據(jù)庫(kù)步驟,(2)將SQL語(yǔ)句送至數(shù)據(jù)庫(kù),執(zhí)行SQL語(yǔ)句 C、使用Statement對(duì)象執(zhí)行語(yǔ)句 Statement接口提供了三種執(zhí)行SQL語(yǔ)句的方法:executeQuery、executeUpdate和execute。 使用哪一個(gè)方法由SQL語(yǔ)句所產(chǎn)生的內(nèi)容決定。 方法executeQuery用于產(chǎn)生單個(gè)結(jié)果集的語(yǔ)句, 例如SELECT語(yǔ)句。,使用JDBC連接到數(shù)據(jù)庫(kù)步驟,(2)將SQL語(yǔ)句送至數(shù)據(jù)庫(kù),執(zhí)行SQL語(yǔ)句 C、使用Statement對(duì)象執(zhí)行語(yǔ)句 方法executeUpdate用于執(zhí)行INSERT、UPDATE或DELETE語(yǔ)句以及SQL
12、DDL(數(shù)據(jù)定義語(yǔ)言)語(yǔ)句 方法execute用于執(zhí)行返回多個(gè)結(jié)果集、多個(gè)更新計(jì)數(shù)或二者組合的語(yǔ)句。,JDBC應(yīng)用,(2)將SQL語(yǔ)句送至數(shù)據(jù)庫(kù),執(zhí)行SQL語(yǔ)句 C、使用Statement對(duì)象執(zhí)行語(yǔ)句 執(zhí)行語(yǔ)句的所有方法都將關(guān)閉所調(diào)用的Statement對(duì)象的當(dāng)前打開(kāi)結(jié)果集(如果存在)。 這意味著在重新執(zhí)行Statement對(duì)象之前,需要完成對(duì)當(dāng)前ResultSet對(duì)象的處理。,使用JDBC連接到數(shù)據(jù)庫(kù)步驟,(2)將SQL語(yǔ)句送至數(shù)據(jù)庫(kù),執(zhí)行SQL語(yǔ)句 D、使用Statement對(duì)象執(zhí)行語(yǔ)句語(yǔ)句完成 對(duì)于返回一個(gè)結(jié)果集的executeQuery方法,在檢索完ResultSet對(duì)象的所有行時(shí)該語(yǔ)
13、句完成。 對(duì)于方法executeUpdate,當(dāng)它執(zhí)行時(shí)語(yǔ)句即完成。 但在少數(shù)調(diào)用方法execute的情況中,在檢索所有結(jié)果集或它生成的更新計(jì)數(shù)之后語(yǔ)句才完成。,使用JDBC連接到數(shù)據(jù)庫(kù)步驟,(3)處理結(jié)果集讀入數(shù)據(jù)庫(kù)返回的結(jié)果 結(jié)果集一般是一個(gè)表,其中有查詢(xún)所返回的列標(biāo)題及相應(yīng)的值。 例如,如果查詢(xún)?yōu)镾ELECT姓名,性別,年齡FROMstudent,則結(jié)果集將具有如下形式:,使用JDBC連接到數(shù)據(jù)庫(kù)步驟,(3)處理結(jié)果集讀入數(shù)據(jù)庫(kù)返回的結(jié)果 ResultSet: ResultSet包含符合SQL語(yǔ)句中條件的所有行,并且它通過(guò)一套get方法(這些get方法可以訪問(wèn)當(dāng)前行中的不同列)提供了對(duì)這
14、些行中數(shù)據(jù)的訪問(wèn)。 ResultSet.next方法用于移動(dòng)到ResultSet中的下一行,使下一行成為當(dāng)前行。,使用JDBC連接到數(shù)據(jù)庫(kù)步驟,(3)處理結(jié)果集行和光標(biāo) ResultSet維護(hù)指向其當(dāng)前數(shù)據(jù)行的光標(biāo)。每調(diào)用一次next方法,光標(biāo)向下移動(dòng)一行。 最初它位于第一行之前,因此第一次調(diào)用next將把光標(biāo)置于第一行上,使它成為當(dāng)前行。 隨著每次調(diào)用next導(dǎo)致光標(biāo)向下移動(dòng)一行,按照從上至下的次序獲取ResultSet行。 在ResultSet對(duì)象或其父輩Statement對(duì)象關(guān)閉之前,光標(biāo)一直保持有效,使用JDBC連接到數(shù)據(jù)庫(kù)步驟,(3)處理結(jié)果集列 方法getXXX提供了獲取當(dāng)前行中某
15、列值的途徑。在每一行內(nèi),可按任何次序獲取列值。但為了保證可移植性,應(yīng)該從左至右獲取列值,并且一次性地讀取列值。列名或列號(hào)可用于標(biāo)識(shí)要從中獲取數(shù)據(jù)的列。例如,如果ResultSet對(duì)象rs的第二列名為“性別”,并將值存儲(chǔ)為字符串,則下列任一代碼將獲取存儲(chǔ)在該列中的值:Strings=rs.getString(“性別);Strings=rs.getString(2);,使用JDBC連接到數(shù)據(jù)庫(kù)步驟,(3)處理結(jié)果集列 注意列是從左至右編號(hào)的,并且從列1開(kāi)始。同時(shí),用作getXXX方法的輸入的列名不區(qū)分大小寫(xiě)。提供使用列名這個(gè)選項(xiàng)的目的是為了讓在查詢(xún)中指定列名的用戶(hù)可使用相同的名字作為getXXX方
16、法的參數(shù)。,使用JDBC連接到數(shù)據(jù)庫(kù)步驟,(3)處理結(jié)果集讀入數(shù)據(jù)庫(kù)返回的結(jié)果 由于是進(jìn)行查詢(xún)的工作,因此會(huì)返回一個(gè)ResultSet對(duì)象,可使用while來(lái)讀出所返回的數(shù)據(jù). 例如: ResultSetrs=stmt.executeQuery(“SELECT姓名,性別,年齡FROMxs); While (rs.next() ,使用JDBC連接到數(shù)據(jù)庫(kù)步驟,(4)關(guān)閉數(shù)據(jù)庫(kù)的連接關(guān)閉Statement對(duì)象: Statement對(duì)象將由Java垃圾收集程序自動(dòng)關(guān)閉。 而作為一種好的編程風(fēng)格,應(yīng)在不需要Statement對(duì)象時(shí)顯式地關(guān)閉它們。 這將立即釋放DBMS資源,有助于避免潛在的內(nèi)存問(wèn)題,使
17、用JDBC連接到數(shù)據(jù)庫(kù)步驟,(4)關(guān)閉數(shù)據(jù)庫(kù)的連接 關(guān)閉 結(jié)果集; 關(guān)閉 Statement對(duì)象; 關(guān)閉 連接;,使用JDBC連接到數(shù)據(jù)庫(kù)步驟,下面的代碼段是執(zhí)行SQL語(yǔ)句的示例。 java.sql.Statementstmt=conn.createStatement();ResultSetr=stmt.executeQuery(“ SELECT姓名,性別,年齡FROMstudent ”);int i=0; while(r.next()i=i+1; /打印當(dāng)前行的值。Stringname=r.getString(姓名);Stringsex=r.getString(性別);floatage=r.
18、getInt(年齡);System.out.println(ROW=+i+ name + sex + age);,使用JDBC連接到數(shù)據(jù)庫(kù)步驟,實(shí)例:JDBCTest.java,import java.sql.*; public class JDBCTest public static void main(String args) String url = jdbc:odbc:mydatabase; String query = SELECT * FROM student; try Class.forName (sun.jdbc.odbc.JdbcOdbcDriver); catch(java
19、.lang.ClassNotFoundException e) System.err.print(ClassNotFoundException: ); System.err.println(e.getMessage(); ,加載JDBC-ODBC bridge 驅(qū)動(dòng)程序;使用Class.forName 方法顯式加載驅(qū)動(dòng)程序完成:,建立操作數(shù)據(jù)庫(kù)的SQL語(yǔ)句;,try Connection con = DriverManager.getConnection (url); Statement stmt = con.createStatement (); ResultSet r = stmt.exe
20、cuteQuery (query); while(r.next() String r1=r.getString(姓名); String r3=r.getString(性別); int r2=r.getInt(年齡); System.out.println(r1+ +r2+ +r3); r.close();stmt.close();con.close(); catch (SQLException ex) System.out.println (n* SQLException caught *n); ,實(shí)例:JDBCTest.java,String url = jdbc:odbc:mydataba
21、se;,創(chuàng)建statement對(duì)象,發(fā)送SQL語(yǔ)句,關(guān)閉,通過(guò)JDBC訪問(wèn)數(shù)據(jù)庫(kù)的基本流程,基本流程 1建立ODBC數(shù)據(jù)源(可選) 2裝入JDBC驅(qū)動(dòng)程序 3建立連接 4執(zhí)行SQL語(yǔ)句 5檢索結(jié)果 6關(guān)閉連接,建立ODBC數(shù)據(jù)源(可選),當(dāng)使用JDBC-ODBC Bridge來(lái)建立連接時(shí),必須先建立ODBC數(shù)據(jù)源。 ODBC數(shù)據(jù)源的配置步驟: 打開(kāi)Windows的“控制面板”,在“管理工具”中找到“數(shù)據(jù)源(ODBC)”,建立ODBC數(shù)據(jù)源(可選),在“用戶(hù)DNS”選項(xiàng)卡的“用戶(hù)數(shù)據(jù)源”列表中,單擊“添加”按鈕,彈出“創(chuàng)建新數(shù)據(jù)源”對(duì)話框,建立ODBC數(shù)據(jù)源(可選),選擇創(chuàng)建“Microsoft
22、 Access Driver”類(lèi)型的數(shù)據(jù)源,然后單擊“完成”按鈕,彈出“ODBC Microsoft Access安裝”對(duì)話框,建立ODBC數(shù)據(jù)源(可選),在此對(duì)話框中,輸入數(shù)據(jù)源名稱(chēng),并單擊“創(chuàng)建”按鈕,彈出“新數(shù)據(jù)庫(kù)”對(duì)話框。如果事先已經(jīng)建立了數(shù)據(jù)庫(kù),可以單擊“選擇”按鈕,并指明數(shù)據(jù)庫(kù)的存放路徑。,建立ODBC數(shù)據(jù)源(可選),在“新建數(shù)據(jù)庫(kù)”對(duì)話框中,輸入需要新建的數(shù)據(jù)庫(kù)名稱(chēng),選擇數(shù)據(jù)庫(kù)的保存路徑,然后單擊“確定”按鈕,返回“ODBC Microsoft Access安裝”對(duì)話框。 在“ODBC Microsoft Access安裝”對(duì)話框中單擊“確定”按鈕,返回“ODBC數(shù)據(jù)源管理器”對(duì)
23、話框,新添加的用戶(hù)數(shù)據(jù)源將出現(xiàn)在此對(duì)話框中。此時(shí),單擊“確定”按鈕,新用戶(hù)數(shù)據(jù)源創(chuàng)建完成。數(shù)據(jù)源創(chuàng)建完成之后,便可以對(duì)這個(gè)數(shù)據(jù)源進(jìn)行數(shù)據(jù)表的創(chuàng)建和修改,記錄的添加、修改和刪除等數(shù)據(jù)庫(kù)操作。,添加ODBC數(shù)據(jù)源,import java.sql.*; public class JDBCInsert public static void main(String args) String url = jdbc:odbc:mydatabase; try Class.forName (sun.jdbc.odbc.JdbcOdbcDriver); catch(java.lang.ClassNotFoundE
24、xception e) System.err.print(ClassNotFoundException: ); System.err.println(e.getMessage(); try stmt.executeQuery (insert into student values(美眉, 女, 18) ); stmt.close();con.close(); catch (SQLException ex) System.out.println (n* SQLException caught *n); ,實(shí)例:JDBCInsert.java,插入記錄,無(wú)返回結(jié)果 并注意單引號(hào)和雙引號(hào),思考此程序
25、哪里有問(wèn)題!,更新數(shù)據(jù),import java.sql.*; public class JDBCUpdate public static void main(String args) String url = jdbc:odbc:student; try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); Connection con = DriverManager.getConnection(url); Statement stmt = con.createStatement(); stmt.executeUpdate(update student se
26、t 年齡=80 where 姓名=美眉); stmt.close(); con.close(); catch (Exception e) e.printStackTrace(); ,刪除數(shù)據(jù),import java.sql.*; public class JDBCDelete public static void main (String args ) try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); Connection con = DriverManager.getConnection(jdbc:odbc:mydatabase); Statement stmt = con.createStatement ( ); stmt.executeU
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 沙發(fā)推廣活動(dòng)策劃方案(3篇)
- 拍攝植物活動(dòng)策劃方案(3篇)
- 水表閥門(mén)施工方案(3篇)
- 初級(jí)會(huì)計(jì)師經(jīng)濟(jì)法知識(shí)點(diǎn)速記
- 合山煙囪施工方案(3篇)
- 工地規(guī)范施工方案(3篇)
- 術(shù)后昏迷應(yīng)急預(yù)案(3篇)
- 物流售后活動(dòng)策劃方案(3篇)
- 砂石開(kāi)采施工方案(3篇)
- 積雪運(yùn)輸施工方案(3篇)
- 北京海淀中關(guān)村中學(xué)2026屆高二上數(shù)學(xué)期末調(diào)研試題含解析
- 2025版 全套200MW800MWh獨(dú)立儲(chǔ)能項(xiàng)目EPC工程概算表
- 順德家俱行業(yè)分析會(huì)報(bào)告
- 非煤地下礦山員工培訓(xùn)
- 保安法律法規(guī)及業(yè)務(wù)能力培訓(xùn)
- 班團(tuán)活動(dòng)設(shè)計(jì)
- GB/T 6109.1-2025漆包圓繞組線第1部分:一般規(guī)定
- 前縱隔占位患者的麻醉管理要點(diǎn)(PASF 2025年)
- 企業(yè)財(cái)務(wù)會(huì)計(jì)制度完整模板
- 銷(xiāo)售崗位個(gè)人簡(jiǎn)歷模板下載合集
- 雅馬哈DTX430K電子鼓中文說(shuō)明書(shū)
評(píng)論
0/150
提交評(píng)論