




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、jdbO課流程第一課 JDBC概述和基本數(shù)據(jù)庫操作JDBC (java database connectivity)用于在java程序中實(shí)現(xiàn)數(shù)據(jù)庫操作的數(shù)據(jù)庫編程接口,支持基本的SQL語句,為應(yīng)用程序和數(shù)據(jù)庫之間提供了橋梁java程序和數(shù)據(jù)庫之間的關(guān)系如下圖:護(hù)A應(yīng)用程序JDBC API驅(qū)動(dòng)程序管理器JDBC FOR OTHER DBORACLESQL SERVEROTHERS DBJDBC的版本:介紹java中和操作數(shù)據(jù)庫相關(guān)的 API ,解釋這些API都是未實(shí)現(xiàn)的,真正實(shí)現(xiàn)操作的是數(shù)據(jù)庫廠 家提供的類庫 開始數(shù)據(jù)庫編程:(別忘先導(dǎo)入包)第一步加載數(shù)據(jù)庫驅(qū)動(dòng)程序這是利用反射注冊(cè)一個(gè)數(shù)據(jù)庫驅(qū)動(dòng)
2、或者用驅(qū)動(dòng)管理器也可以注冊(cè)數(shù)據(jù)庫驅(qū)動(dòng)第二步創(chuàng)建數(shù)據(jù)庫連接對(duì)象String user = "scott"String pwd = "tiger"Connection conn = (url,user,pwd);其中dhc表示的是數(shù)據(jù)庫名或域名而并非是服務(wù)名DriverManager 類存有已注冊(cè)的 Driver類的清單。當(dāng)調(diào)用方法 getConnection 時(shí),它將檢查清 單中的每個(gè)驅(qū)動(dòng)程序,直到找到可與 URL中指定的數(shù)據(jù)庫進(jìn)行連接的驅(qū)動(dòng)程序?yàn)橹?。如果改成用OCI形式連接,url字符串改為類似以下語句:String url = "jdbc:o
3、racle:oci8:scott/tigerdhc"或者String url = "jdbc:oracle:oci:scott/tigerdhc"第三步創(chuàng)建SQL語句載體對(duì)象第四步 執(zhí)行SQL語句返回結(jié)果集對(duì)象第五步遍歷結(jié)果集返回?cái)?shù)據(jù)while在這一步講解結(jié)果集指針的概念,默認(rèn)狀態(tài)下游標(biāo)只能向下移動(dòng) 需要注意getXXX方法的數(shù)據(jù)類型要和表中字段的數(shù)據(jù)類型兼容。講解getXXX ()括號(hào)中的參數(shù)既可以是列索引,也可以是列名,如果使用列名并且結(jié)果集中有 多個(gè)列的名字是相同的,那么返回第一列的的列值,一般用列索引效率會(huì)高一些 介紹方法,當(dāng)前最后一次 getXXX()返
4、回的列值是否為 null,需要注意的是如果 get方法以數(shù)字的形式獲取列值且返回的列值為null,得到的結(jié)果會(huì)自動(dòng)的轉(zhuǎn)換為0或別忘記在下面介紹java的數(shù)據(jù)類型和SQL的數(shù)據(jù)類型之間的映射關(guān)系第六步關(guān)閉對(duì)象釋放資源采取逆向關(guān)閉對(duì)象的順序在關(guān)閉stmt對(duì)象或利用stmt對(duì)象重新執(zhí)行其他 SQL語句時(shí)時(shí)會(huì)自動(dòng)關(guān)閉rs對(duì)象。解講數(shù)據(jù)類型之間的映射關(guān)系SQL色JAVA類型CHARStringREALFloatDATALINKREFRefSTRUCTStructDISTINCTMappingofunderlyingtypeARRAYArrayBLOBBlobCLOBClobTIMESTAMPTIMEDA
5、TELONGVARBINARYbyte口VARBINARYbyte口BINARYbyte口DOUBLEdoubleFLOATdoubleVARCHARStringLONGVARCHARString以上操作的完整代碼:public class JDBC1 public static void main(String口 args) throws SQLException xecuteQuery( 9);while“nn n catch (SQLException e) finally try if (rs != null )if (stmt !=null) catch (Exception e)
6、綜合練習(xí):查詢job_history 表中所有數(shù)據(jù),將數(shù)據(jù)寫入到文本文件中,一條記錄一行,列值之間用 | 隔開importimportpublic class Test7 public static void main(String args) Connection conn = null ;Statement stmt = null ;ResultSet rs = null ;FileWriter fw =null ;BufferedWriter bw =null ;try ( newString url = "jdbc:oracle:thin:localhost:1521:dhc
7、"String user = "scott" ;String pwd = "tiger" ;conn = (url, user, pwd);stmt = ();"select * from job_history");fw =new FileWriter();bw =new BufferedWriter(fw);while"|""|""|""|" catch(SQLException e) catch(IOException e) finally
8、 try if (bw !=null)if (rs !=null)if (stmt !=null)if (conn !=null) catch (Exception e) if (conn !=null)第二課數(shù)據(jù)增刪改和可滾動(dòng)結(jié)果集講述Statement對(duì)象執(zhí)行SQL語句的三種方法:executeQuery() 執(zhí)行查詢單個(gè)結(jié)果集的語句,該語句返回單個(gè)ResultSet 對(duì)象executeUpdate() 執(zhí)行給定SQL 語句,該語句可能為INSERT、 UPDATE 或 DELETE 語句,或者不返回任何內(nèi)容的SQL 語句(如SQL DDL 語句) ,該語句返回影響的行數(shù),如果是DDL 語
9、句則返回0execute() 執(zhí)行給定的SQL 語句, 這個(gè) SQL 語句可能實(shí)現(xiàn)并不知道是查詢還是增刪改,返回值是布爾值,如果是查詢語句返回結(jié)果則為true,可以用getResultSet得到ResultSet結(jié)果創(chuàng)建一個(gè)學(xué)生表做數(shù)據(jù)增刪改試驗(yàn):create table Student(sid number ,sname varchar2 (50), addDate date);演示增加學(xué)生數(shù)據(jù)public class Test8 public static void main(String args) Connection conn = null;Statement stmt = null
10、; try String url = "jdbc:oracle:thin:localhost:1521:dhc"String user = "scott"String pwd = "tiger" int i = stmt.executeUpdate("insert into Student values (101,'tom',to_date('2008-3-1','yyyy-mm-dd')"); catch (SQLException e) finally try i
11、f (stmt != null)if (conn != null) catch (Exception e) 演示修改學(xué)生數(shù)據(jù): int i = stmt.executeUpdate( "update Student set);sname='jack',addDate=to_date('2007-3-1','yyyy-mm-dd') where sid=101"" 操作了 " + i +" 行 " );學(xué)生自己動(dòng)手改成刪除101 學(xué)生數(shù)據(jù):int i = stmt .executeUpda
12、te( "delete from Student where sid=101");" 操作了 " + i +" 行 " );學(xué)生試驗(yàn)執(zhí)行DDL 語句刪除表:int i = stmt.executeUpdate("drop table Student");學(xué)生練習(xí):提供一個(gè)原始文本文件,將文本文件中的數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫中的表中101,tom,2008-3-1 102,jack,2008-3-2 103,rose,2008-3-3 104,smith,2008-3-4 105,john,2008-3-5 106,zhan
13、g,2008-3-6 107,li,2008-3-7 importimportpublic class Test10 public static voidConnection conn =main(String args)throws Exception Statement stmt =null ;null ;ResultSet rs =null ;( newString url =String user =String pwd ="jdbc:oracle:thin:localhost:1521:dhc""scott""tiger"c
14、onn = (url, user, pwd);TYPESCROLLINSENSITIVEFileReader fr =newBufferedReader br =FileReader();new BufferedReader(fr);while (s != null"," );"insert into Student values ("+ rows0 +I! II!+ rows1+ "',to_date('"+ rows2 + "','yyyy-mm-dd')");講解可滾動(dòng)
15、的結(jié)果集游標(biāo)指針Connection對(duì)象創(chuàng)建 Statement對(duì)象有兩種形式:一種是用createStatement()無參方法,這種方法創(chuàng)建的Statement對(duì)象執(zhí)行的查詢的結(jié)果集指針只能向下移動(dòng)另一種方法是用 createStatement(int resultSetType, int resultSetConcurrency)有參方法,這種方法創(chuàng)建的Statement對(duì)象執(zhí)行的查詢結(jié)果集的指針是可以任意移動(dòng)的后一種方法有兩個(gè)參數(shù):分別是結(jié)果集游標(biāo)類型和 結(jié)果集是否可更新結(jié)果集游標(biāo)類型有三個(gè)設(shè)置值:1. 指針只能向下移動(dòng)(默認(rèn))2. 指針可任意滾動(dòng),但結(jié)果集中被更新的行不可視3. 指針
16、可任意滾動(dòng),結(jié)果集中被更新的行可視結(jié)果集是否可更新有兩個(gè)設(shè)置值:1. 只讀(默認(rèn))2. 可更新記錄關(guān)于指針移動(dòng)的方法:默認(rèn)打開結(jié)果集的時(shí)候指針位于第一行記錄的上面next() 下一行previous() 上一行first() 第一行l(wèi)ast() 最后一行absolute(n) 定位到第n 條relative(n) 相對(duì)于當(dāng)前指針位置定位到第n 條, n 為正數(shù)下移,n 為負(fù)數(shù)上移beforeFirst() 第一條的前面afterLast() 最后一條的后面getRow() 獲得當(dāng)前行的行號(hào)學(xué)生練習(xí):查詢出工資排名在第6 位到第 10 位的員工編號(hào),姓名和工資TYPE_SCROLL_INSENS
17、ITIVE);"select * from employees order by salary desc iffor ( int i = 6; i <= 10; i+) + ":t""/""/"ifbreak ;學(xué)生練習(xí)2(選做):每次執(zhí)行程序都隨機(jī)查詢出1 個(gè)員工的編號(hào)和姓名作為中獎(jiǎng)名單,以前已經(jīng)中過獎(jiǎng)的員工不在抽獎(jiǎng)的范圍內(nèi)創(chuàng)建一個(gè)臨時(shí)表存放中過獎(jiǎng)的員工編號(hào)create table award(employee_id number );代碼片斷TYPE_SCROLL_INSENSITIVE , ;xecuteQuer
18、y( "select * from employees where employee_id not in (select employee_id from award)");xecuteQuery( "select * from employees where employee_id not in (select employee_id from award)");Conn5 月 10 日 repareStatement("select employee_id,last_name,salary,hire_date,department_id f
19、rom employees where department_id between and ");Calendar calendar = new GregorianCalendar();講述已存儲(chǔ)過程(CallableStatement)CallableStatement 對(duì)象為所有的DBMS 提供了一種以標(biāo)準(zhǔn)形式調(diào)用已儲(chǔ)存過程的方法。已儲(chǔ)存過程儲(chǔ)存在數(shù)據(jù)庫中。對(duì)已儲(chǔ)存過程的調(diào)用是CallableStatement 對(duì)象所含的內(nèi)容。這種調(diào)用是用一種換碼語法來寫的,有兩種形式:一種形式帶結(jié)果參,另一種形式不帶結(jié)果參數(shù)。結(jié)果參數(shù)是一種輸出(OUT) 參數(shù), 是已儲(chǔ)存過程的返回值。兩種形式
20、都可帶有數(shù)量可變的輸入( IN 參數(shù)) 、輸出( OUT 參數(shù))或輸入和輸出(INOUT 參數(shù))的參數(shù)。問號(hào)將用作參數(shù)的占位符。使用已存儲(chǔ)過程的好處是存儲(chǔ)過程在數(shù)據(jù)庫中就已經(jīng)編譯了,執(zhí)行速度相對(duì)會(huì)快一些。調(diào)用無返回值存儲(chǔ)過程的語法:Cal“call 過程名 (, , .) ”);調(diào)用有返回值存儲(chǔ)過程(函數(shù))的語法Cal“ = call 過程名 (, , .) ”);演示調(diào)用無返回值的存儲(chǔ)過程:在oralce中創(chuàng)建存儲(chǔ)過程add_salary,傳入員工編號(hào)和給員工漲的工資金額進(jìn)行工資更新 create or replace procedure add_salary(p_empid number
21、,p_money number ) is beginupdate employees set salary=salary+p_money where employee_id=p_empid;end;java 代碼public class Test20 public static void main(String args) Connection conn = null;CallableStatement cstmt = null; try String url = "jdbc:oracle:thin:localhost:1521:dhc"String user = &quo
22、t;scott"String pwd = "tiger" catch (ClassNotFoundException e) catch (SQLException e) finally try if (cstmt != null)if (conn != null) catch (Exception e) 修改存儲(chǔ)過程add_salary 為存儲(chǔ)函數(shù),更新員工工資后返回員工的姓名和員工的新工資create or replace function add_salary(p_empid number ,p_money number ,p_salary out numbe
23、r ) return varchar2isv_name varchar2 (50);beginupdate employees set salary=salary+p_moneywhere employee_id=p_empid;select last_name,salary into v_name,p_salary from employeeswhere employee_id=p_empid;return v_name;end;java 代碼 urrentTimeMillis ();setAutoCommit 設(shè)置是否自動(dòng)提交,默認(rèn)是true為了試驗(yàn)數(shù)據(jù)庫事務(wù),首先先創(chuàng)建兩個(gè)員工表和部門表
24、的備份,然后給部門表增加觸發(fā)器,在中午 11 點(diǎn)到 13 點(diǎn)之間不允許增刪改部門表中的數(shù)據(jù)。數(shù)據(jù)庫腳本:create table empcopyasselect * from employees;create table deptcopyasselect * from departments;create or replace trigger dept_dml_tribeforeinsert or update or delete on deptcopybeginif to_char(sysdate,'hh24') between 11 and 12 thenraise_application_error(-20001,' 在此時(shí)間不能對(duì)數(shù)據(jù)進(jìn)行操作!');end if;end;編寫 java 程序傳入部門編號(hào)刪除指定的部門信息和員工信息先演示沒有做事務(wù)處理的情況,如果部門刪除不了,當(dāng)員工
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 助動(dòng)車維修技術(shù)交流考核試卷
- 機(jī)器視覺與圖像處理技術(shù)考核試卷
- 智能儀器儀表項(xiàng)目規(guī)劃考核試卷
- 醫(yī)用針灸貼的種類和使用建議考核試卷
- 供應(yīng)鏈數(shù)字化轉(zhuǎn)型案例與啟示考核試卷
- 木紋設(shè)計(jì)與加工考核試卷
- 苗圃白蟻防治合同范本
- 留置權(quán)合同范本
- 業(yè)擴(kuò)報(bào)裝培訓(xùn)課件
- 8.3 摩擦力(共28張) 2024-2025學(xué)年人教版物理八年級(jí)下冊(cè)
- 中國思想史馬工程課件第一篇 先秦
- HY/T 081-2005紅樹林生態(tài)監(jiān)測(cè)技術(shù)規(guī)程
- Unit 3 Reading and Thinking 課件 【知識(shí)導(dǎo)航+拓展遷移】 高中英語人教版(2019)選擇性必修第二冊(cè)
- 幼兒園中班“建構(gòu)室”活動(dòng)安排表(上學(xué)期和下學(xué)期)
- 農(nóng)村常用法律法規(guī)知識(shí)講座(適用村干部)專題培訓(xùn)課課件
- 部編版四年級(jí)語文下冊(cè)第13課《貓》課件
- 應(yīng)急投入及資源保障制度
- 壓裂評(píng)價(jià)中常見曲線分析
- (新版)網(wǎng)絡(luò)攻防知識(shí)考試題庫(含答案)
- 2023年湖北省技能高考文化綜合試題及答案
- 自然辯證法概論課件:第一章馬克思主義自然觀
評(píng)論
0/150
提交評(píng)論