版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第11章 Java的數(shù)據(jù)庫編程主要內(nèi)容 關(guān)系型數(shù)據(jù)庫概述 JDBC簡介 JDBC的使用11.1數(shù)據(jù)庫概念 數(shù)據(jù)庫數(shù)據(jù)的集合,它由一個或多個表組成。每一個表中都存儲了對一類對象的數(shù)據(jù)描繪 關(guān)系數(shù)據(jù)庫將數(shù)據(jù)表示為表的集合,通過建立簡單表之間的關(guān)系來定義構(gòu)造的一種數(shù)據(jù)庫 11.1.1關(guān)系型數(shù)據(jù)庫 一個關(guān)系數(shù)據(jù)庫根本上包括一系列互相關(guān)連的表,在每一個表中存有一類與應(yīng)用系統(tǒng)相關(guān)的數(shù)據(jù)。例如一個學(xué)生管理的數(shù)據(jù)庫中,可能有關(guān)于學(xué)生學(xué)號、姓名、住址、 號碼以及系別等方面的表 StudentNoFirstNameLastNameBirthdayGender021010飛張1980-1-1M021111杰劉198
2、1-2-2F11.1.2 SQL語言SQLSequence Query Language,構(gòu)造化查詢語言是支配數(shù)據(jù)庫的規(guī)范語言。非過程化語言:SQL是一種非過程化語言,它一次處置的是一個記錄集合,對數(shù)據(jù)提供自動導(dǎo)航。SQL允許用戶在高層的數(shù)據(jù)構(gòu)造上工作,而不對單個記錄進(jìn)展操作。SQL不要求用戶指定對數(shù)據(jù)的存取方法,SQL語句使用查詢優(yōu)化器,由系統(tǒng)決定對指定數(shù)據(jù)存取的最快速手段。當(dāng)關(guān)系的設(shè)計(jì)者在關(guān)系表上定義了索引,系統(tǒng)會自動地利用索引進(jìn)展快速檢索,用戶不需曉得表上是否有索引、表有什么類型的索引等細(xì)節(jié)。 統(tǒng)一語言:統(tǒng)一語言 SQL可用于所有用戶的數(shù)據(jù)庫活動類型,包括數(shù)據(jù)庫系統(tǒng)管理員、程序員等,它操
3、作簡單,使用方便。 關(guān)系數(shù)據(jù)庫的公共語言:用戶可將使用SQL的技能從一個RDBMS很容易地轉(zhuǎn)到另一個系統(tǒng),所有用SQL語言寫的程序都具有可移植性。常用SQL語句(1)創(chuàng)建表CREATE TABLE STUDENT(studentno CHAR(8) NOT NULL,firstname CHAR(10) NOT NULL,lastname CHAR(10) NOT NULL,birthday DATE,gender CHAR(1) DEFAULT M); 常用SQL語句(2)插入數(shù)據(jù)當(dāng)一個表新建成時,它里面沒有數(shù)據(jù),通過向表中插入數(shù)據(jù),建成表的實(shí)例。語句句法:INSERT INTO 表名(列名
4、1,) VALUES(值1,值2,,值n) 子查詢;將新學(xué)生劉備增加到Student表中,并依照表的構(gòu)造將信息添加完好,需要如下語句:INSERT INTO STUDENT VALUES(020005, 聰,何,1982-2-23,M); 常用SQL語句(3)修改數(shù)據(jù)對表中已有數(shù)據(jù)進(jìn)展修改,語句句法:UPDATE 表名 SET 列名1表達(dá)式1,列名2表達(dá)式2, WHERE 條件;例如,將學(xué)號為021010的名字改為宇飛,應(yīng)該執(zhí)行以下語句:UPDATE STUDENT SET firstname=宇文 WHERE StudentNO=021010;常用SQL語句(4)刪除數(shù)據(jù) 刪除表中已經(jīng)存在的
5、數(shù)據(jù),注意:不能刪除不存在的數(shù)據(jù)。語句句法:DELETE FROM 表名 WHERE 條件;例如:對Student表進(jìn)展刪除,要刪除其中學(xué)號為021111的學(xué)生;DELETE FROM STUDENT WHERE Studentno021111; 常用SQL語句(5)查詢語句1.查詢學(xué)號為021900的學(xué)生:SELECT * FROM STUDENT WHERE StudentNo=021900;2.查詢所有姓名以A開頭的學(xué)生的姓名;SELECT STUDENT.FirstName, STUDENT.LastName FROM STUDENT WHERE LastName LIKE A%;3.
6、將所有學(xué)生按學(xué)號順序升序排列;SELECT * FROM STUDENT ORDER BY StudentNo DESC;4.將所有學(xué)生按學(xué)號順序升序排列;SELECT * FROM STUDENT ORDER BY StudentNo ASC;11.2 JDBC JDBC (Java DataBase Connectivity)是用是用于執(zhí)行于執(zhí)行SQL語句的語句的Java應(yīng)用程序接口,由應(yīng)用程序接口,由一組用一組用Java語言編寫的類與接口組成。語言編寫的類與接口組成。 JDBC是一種規(guī)范,它讓各數(shù)據(jù)庫廠商為是一種規(guī)范,它讓各數(shù)據(jù)庫廠商為Java程序員提供規(guī)范的數(shù)據(jù)庫訪問類和接程序員提供規(guī)
7、范的數(shù)據(jù)庫訪問類和接口,這樣就使得獨(dú)立于口,這樣就使得獨(dú)立于DBMS的的Java應(yīng)用應(yīng)用程序的開發(fā)工具和產(chǎn)品成為可能。程序的開發(fā)工具和產(chǎn)品成為可能。11.3 JDBC的主要接口方法說明acceptURL()返回一個boolen值,說明數(shù)據(jù)庫驅(qū)動程序是否可以連接到指定的URLconnect()建立數(shù)據(jù)庫連接,返回應(yīng)用程序中所用的Connection對象getMajorVersion()讀取數(shù)據(jù)庫驅(qū)動程序的主版本號getMinorVersion()讀取數(shù)據(jù)庫驅(qū)動程序的次版本號getPropertyInfo()利用當(dāng)前的數(shù)據(jù)庫驅(qū)動建立連接時,需要用戶提供的基本屬性(用戶、口令等)jdbcCompli
8、ant()返回一個boolean值,說明當(dāng)前Driver對象是否與JDBC兼容11.3.1數(shù)據(jù)庫驅(qū)動相關(guān)的接口定義1、java.sql.Driver2、java.sql.DriverManager方法說明deregisterDriver()從驅(qū)動器表中刪除某個D river對象getConnection()建立連接getDriver()查找將要連接到URL上的Driver對象getDrivers()返回當(dāng)前管理器中注冊的所有Driver對象數(shù)組getLoginTimout()返回驅(qū)動器等待連接的時間(按秒計(jì)算)println()向當(dāng)前日志流發(fā)送指定字符串registerDriver()在管理器
9、中注冊Driver對象setLoginTimeout()設(shè)置驅(qū)動器等待連接的最長時間(按秒計(jì)算)setLogStream()設(shè)置Driver對象的日志流11.3.2數(shù)據(jù)庫連接接口定義java.sql.Connection方法說明close()斷開數(shù)據(jù)庫連接createStatement()創(chuàng)建用于執(zhí)行SQL語句的Statement對象getCatalog()返回包含當(dāng)前數(shù)據(jù)庫連接目錄的字符串getMetaData()返回用于確定數(shù)據(jù)庫特性的DataBaseMetaData對象getTransactionIsolation()返回與Connection對象相關(guān)的事務(wù)的當(dāng)前隔離狀態(tài)isClosed
10、()判斷是否已經(jīng)斷開連接nativeSQL()JDBC驅(qū)動器向數(shù)據(jù)庫提交SQL語句,返回該語句prepareStatement()返回執(zhí)行動態(tài)SQL語句的PrepareStatement對象rollback()回滾數(shù)據(jù)庫事務(wù)11.3.3查詢和結(jié)果表示接口定義1、java.sql.Statement方法方法說明說明close()關(guān)閉當(dāng)前的Statement對象execute()執(zhí)行Statement對象,主要執(zhí)行返回多個結(jié)果集的SQL語句executeQuery()執(zhí)行SQL Select命令executerUpdate()執(zhí)行SQL更新的命令,包括Update,Delete,Insert等ge
11、tMoreResults()移到Statement對象的下一個結(jié)果處getQueryTimeout()返回JDBC驅(qū)動器等待Statement執(zhí)行SQL的延遲時間(秒計(jì)算)getResultSet()返回查詢結(jié)果集2、java.sql.ResultSet方法說明close()關(guān)閉ResultSet對象getBoolean()將指定列名或列索引的數(shù)據(jù)作為Boolean類型變量返回getInt()將指定列名或列索引的數(shù)據(jù)作為Int類型變量返回getString()將指定列名或列索引的數(shù)據(jù)作為String類型變量返回getDate()將指定列名或列索引的數(shù)據(jù)作為java.sql.Date類型變量返回
12、getDouble()將指定列名或列索引的數(shù)據(jù)作為Double類型變量返回getObject()將指定列名或列索引的數(shù)據(jù)作為Object類型變量返回getMetaData()得到結(jié)果集的元數(shù)據(jù)11.4 JDBC 的應(yīng)用JDBC和JDBC/ODBC處置方案ODBC ODBC,是開放式數(shù)據(jù)庫互連,是開放式數(shù)據(jù)庫互連Open Database Connectivity的縮寫的縮寫 這是一組這是一組API。它主要與數(shù)據(jù)庫打交道。就是說。它主要與數(shù)據(jù)庫打交道。就是說,利用利用ODBC API,你可通過統(tǒng)一界面和各種數(shù)據(jù)庫打交道。你可通過統(tǒng)一界面和各種數(shù)據(jù)庫打交道。 通過通過ODBC訪問數(shù)據(jù)庫由四個組成部
13、分訪問數(shù)據(jù)庫由四個組成部分: 應(yīng)用程序應(yīng)用程序(Application,你的程序,你的程序) ODBC 管理器管理器(ODBC manager) ODBC 驅(qū)動程序驅(qū)動程序(ODBC Drivers) 數(shù)據(jù)源數(shù)據(jù)源(Data Sources,數(shù)據(jù)庫數(shù)據(jù)庫) 訪問數(shù)據(jù)庫的形式訪問數(shù)據(jù)庫的形式 你的程序你的程序 ODBC管理器管理器 ODBC驅(qū)動程序驅(qū)動程序 數(shù)據(jù)數(shù)據(jù)庫庫11.4.1 ODBC的設(shè)置在Windows資源管理器控制面板管理工具ODBC數(shù)據(jù)源(可能操作系統(tǒng)的不同會有差別)。然后單擊用戶DSN頁。在這里,可以選擇一個已經(jīng)存在的數(shù)據(jù)源對它進(jìn)展修改,或者添加一個新的。這里選擇添加。 ODBC
14、的設(shè)置2接下來,系統(tǒng)會提示選擇驅(qū)動程序,采用Microsoft Access Driver,也可以根據(jù)詳細(xì)的條件選擇。 ODBC的設(shè)置3裝置一個ODBC數(shù)據(jù)源 ODBC的設(shè)置4假如新建數(shù)據(jù)源,就要選擇詳細(xì)數(shù)據(jù)庫的位置。假如在前一步選擇已經(jīng)存在的數(shù)據(jù)源,那么可以在這里對它進(jìn)展重新選取數(shù)據(jù)庫,修復(fù),壓縮等操作。同時還可以通過高級選項(xiàng)來定義用戶名,密碼等。 ODBC的設(shè)置5定義新建數(shù)據(jù)源的名字,對新建數(shù)據(jù)源進(jìn)展描繪 。至此,我們已經(jīng)完成了用戶DSN的設(shè)置,在用戶DSN里面多了一個名為javadb的數(shù)據(jù)源。 11.4.2 JDBC的使用1、裝載驅(qū)動程序裝載驅(qū)動程序只需要非常簡單的一行代碼。假如想要使用
15、JDBC/ODBC橋驅(qū)動程序,可以用以下代碼裝載它:Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);2、建立連接第二步就是用適當(dāng)?shù)腄river類與DBMS建立一個連接。以下代碼是一般的做法:Connection con = DriverManager.getConnection(url, Login, Password); 3、查詢數(shù)據(jù)庫為了下面的演示,我們使用Microsoft Access編輯剛剛建立的數(shù)據(jù)源javadb.使用設(shè)計(jì)向?qū)?chuàng)建一個名為student的表接著輸入一些測試數(shù)據(jù)。JDBC例如代碼public class JDBCDemo pub
16、lic static void main(String args) String driverClass = sun.jdbc.odbc.JdbcOdbcDriver;String url = jdbc:odbc:javadb;String columnNames = new Stringstudentno, lastname, firstname, gender, birthday;String displayNames = new String學(xué)號, 姓, 名, 性別, 生日;try /加載驅(qū)動程序Class.forName(driverClass); catch (ClassNotFou
17、ndException e) /驅(qū)動程序加載不勝利,打印錯誤信息并退出System.out.println(Can not find driver + driverClass);System.exit(-1);Connection con; JDBC例如代碼2try /獲得jdbc 連接con = DriverManager.getConnection(url);/創(chuàng)建Statement對象Statement stmt = con.createStatement();/得到查詢結(jié)果集ResultSet rs = stmt.executeQuery(select * from student);
18、/打印表頭for (int i = 0; i displayNames.length; i+) System.out.print(displayNamesi + t);System.out.println();/列印結(jié)果集while (rs.next() for (int i = 0; i columnNames.length; i+) System.out.print(rs.getString(columnNamesi) + t);System.out.println();stmt.close();JDBC例如代碼3 catch (SQLException sqe) sqe.printSta
19、ckTrace(); finally /關(guān)閉數(shù)據(jù)庫連接try con.close(); catch (Exception e) 編寫JDBC程序一般步驟加載驅(qū)動程序加載驅(qū)動程序Class.forName(driverClass);Class.forName(driverClass);獲得獲得jdbc jdbc 連接連接Connection con = Connection con = DriverManager.getConnection(url);DriverManager.getConnection(url);創(chuàng)建創(chuàng)建StatementStatement對象對象Statement stmt
20、 = con.createStatement();Statement stmt = con.createStatement();得到查詢結(jié)果集或者執(zhí)行得到查詢結(jié)果集或者執(zhí)行updateupdate等操作等操作ResultSet rs = stmt.executeQuery(select ResultSet rs = stmt.executeQuery(select * * from student);from student);關(guān)閉數(shù)據(jù)庫連接關(guān)閉數(shù)據(jù)庫連接try try con.close();con.close(); catch (Exception e) catch (Exception
21、e) 查詢數(shù)據(jù)庫import java.sql.*;class Querypublic static void main(String args)tryClass.forName(sun.jdbc.odbc.JdbcOdbcDriver);catch(ClassNotFoundException e)System.out.println(SQLException:+e.getMessage();tryConnection con=DriverManager.getConnection(jdbc:odbc:myDB1,yao,123456);Statement stmt=con.createSt
22、atement();ResultSet rs=stmt.executeQuery(select *from employee);while(rs.next() System.out.println( 編號:+rs.getString(1)+t+ 姓名:+rs.getString(2)+t+ 性別:+rs.getString(3)+t+ 工資:+rs.getString(4);rs.close();stmt.close();catch(SQLException e) System.out.println(SQLException:+e.getMessage();運(yùn)行結(jié)果插入記錄Connectio
23、n con=DriverManager.getConnection(jdbc:odbc:myDB1,yao,123456);Statement stmt=con.createStatement();String sqlstr=insert into employee values(6001,張兵,男,2400);stmt.executeUpdate(sqlstr);stmt.executeUpdate(insert into employee values(7001,李紅,女,2500);import java.sql.*;class Insert1public static void mai
24、n(String args)tryClass.forName(sun.jdbc.odbc.JdbcOdbcDriver);catch(ClassNotFoundException e)System.out.println(SQLException:+e.getMessage();tryConnection con=DriverManager.getConnection(jdbc:odbc:myDB1,yao,123456);Statement stmt=con.createStatement();String sqlstr=insert into employee values(6001,張兵
25、,男,2400);stmt.executeUpdate(sqlstr);stmt.executeUpdate(insert into employee values(7001,李紅,女,2500);stmt.close();con.close();catch(SQLException e) System.out.println(SQLException:+e.getMessage();修改記錄Connection con=DriverManager.getConnection(jdbc:odbc:myDB1,yao,123456);Statement stmt=con.createStatem
26、ent();String sql=update employee set no=3101 +where name=張兵;stmt.executeUpdate(sql);sql=update employee set salary=2500 where no=2019;stmt.executeUpdate(sql);刪除記錄Connection con=DriverManager.getConnection(jdbc:odbc:myDB1,yao,123456);Statement stmt=con.createStatement();String sql=delete from employee where
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 年度婚慶床品產(chǎn)業(yè)分析報(bào)告
- 2025版新能源汽車推廣使用合同范本一4篇
- 二零二五年度民政局離婚協(xié)議書2025版范本案例分享4篇
- 二零二五版辦公車輛租賃與車輛保養(yǎng)維修合同2篇
- 2024年09月江蘇蘇州銀行總行大數(shù)據(jù)管理部招考(114)號筆試歷年參考題庫附帶答案詳解
- 2025年度硫酸生產(chǎn)項(xiàng)目環(huán)境影響評價合同4篇
- 2024年09月上海2024年浦發(fā)銀行總行金融市場部校園招考筆試歷年參考題庫附帶答案詳解
- 加油站的油價政策解讀
- 2025年數(shù)字經(jīng)濟(jì)園區(qū)場地租賃及數(shù)字基礎(chǔ)設(shè)施建設(shè)合同3篇
- 物業(yè)民法典知識培訓(xùn)課件
- 2023年初中畢業(yè)生信息技術(shù)中考知識點(diǎn)詳解
- 2024-2025學(xué)年山東省德州市高中五校高二上學(xué)期期中考試地理試題(解析版)
- 《萬方數(shù)據(jù)資源介紹》課件
- 麻風(fēng)病病情分析
- 《急診科建設(shè)與設(shè)備配置標(biāo)準(zhǔn)》
- 第一章-地震工程學(xué)概論
- JJF(陜) 063-2021 漆膜沖擊器校準(zhǔn)規(guī)范
- 《中國糖尿病防治指南(2024版)》更新要點(diǎn)解讀
- TSGD7002-2023-壓力管道元件型式試驗(yàn)規(guī)則
- 2024年度家庭醫(yī)生簽約服務(wù)培訓(xùn)課件
評論
0/150
提交評論