




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
2023/1/151第12章JAVA數(shù)據(jù)庫操作了解JDBC的概念及必要性理解JDBC程序的結(jié)構(gòu)運(yùn)用JDBC進(jìn)行數(shù)據(jù)庫編程2023/1/152JDBCJDBC(Java數(shù)據(jù)庫連接)(sun公司提供)Java應(yīng)用程序編程接口Java應(yīng)用程序數(shù)據(jù)庫插入修改刪除查詢2023/1/153JDBC體系結(jié)構(gòu)
應(yīng)用程序DBDBDB應(yīng)用程序應(yīng)用程序JDBCAPIJDBCDriverManager數(shù)據(jù)庫驅(qū)動(dòng)JDBC2023/1/154JDBC體系結(jié)構(gòu)2
應(yīng)用層DriverStatementResultSetConnection各接口驅(qū)動(dòng)層2023/1/155JDBCAPI-DriverManagerJDBC的管理層,用于把Java應(yīng)用程序連接到正確的JDBC驅(qū)動(dòng)程序上,然后即退出。加載驅(qū)動(dòng)程序時(shí)自動(dòng)調(diào)用其registerDriver方法Class.forName("com.mysql.jdbc.Driver");System.setProperty("jdbc.drivers", "com.mysql.jdbc.Driver");建立連接:通過DriverManager.getConnection(URL)方法提供的URL檢查已注冊(cè)的驅(qū)動(dòng)程序,建立與數(shù)據(jù)庫的連接。2023/1/156JDBCAPI-ConnectionConnection對(duì)象代表與數(shù)據(jù)庫的連接獲取連接的方法:DriverManager.getConnection(URL,user,pwd)JDBCURL的標(biāo)準(zhǔn)語法如下所示:jdbc:<子協(xié)議>:<子名稱>。例如:Stringurl="jdbc:mysql://localhost:3306/testdb“Stringurl=“jdbc:odbc:testDS”2023/1/157JDBCAPI-ConnectionDriverManager類存有已注冊(cè)的Driver類的清單。當(dāng)調(diào)用方法getConnection時(shí),它將檢查清單中的每個(gè)驅(qū)動(dòng)程序,直到找到可與URL中指定的數(shù)據(jù)庫進(jìn)行連接的驅(qū)動(dòng)程序?yàn)橹?。Driver的方法connect使用這個(gè)URL來建立實(shí)際的連接。2023/1/158JDBCAPI-Statement(1)Statement用于發(fā)送簡(jiǎn)單的SQL語句通過CONNECTION對(duì)象的createStatement方法創(chuàng)建PreparedStatement用于發(fā)送一個(gè)或多個(gè)輸入?yún)?shù)的SQL語句通過CONNECTION對(duì)象的prepareStatement方法創(chuàng)建繼承于Statement,并提供一組方法設(shè)置輸入?yún)?shù)CallableStatement用于處理SQL存儲(chǔ)過程通過CONNECTION對(duì)象的prepareCall方法創(chuàng)建繼承于PreparedStatement,并提供一組方法處理輸入、輸出參數(shù)2023/1/159JDBCAPI-Statement(2)執(zhí)行語句方法舉例:StatementPreparedStatementCallableStatementexecuteQuery()executeUpdate()execute()Connectioncon= DriverManager.getConnection(url,"sunny","");Statementstmt=con.createStatement(“select*…");ResultSetrs= stmt.executeQuery("SELECTa,b,cFROMTable2");2023/1/1510JDBCAPI-ResultSet(1)ResultSet包含符合SQL語句中條件的所有行集它通過一套get<type>方法訪問當(dāng)前行中不同列next方法用于移動(dòng)到ResultSet中的下一行,使下一行成為當(dāng)前行。2023/1/1511JDBCAPI-ResultSet(2)結(jié)果集一般是一個(gè)表,其中有查詢所返回的列標(biāo)題及相應(yīng)的值如果查詢語句為SELECTstuNo,stuName,stuDeptfromStudent,則結(jié)果集如下:stuNostuNamestuDept__________________06001張一材料06002張二計(jì)算機(jī)06003張三外國語………2023/1/1512JDBCAPI-SqlExceptionSQLException…try{
此處為相關(guān)數(shù)據(jù)庫操作;}catch(SQLExceptionex){System.out.println(“已捕獲一個(gè)SQLException異常!”);System.out.println(“消息:“+ex.getMessage());System.out.println(“錯(cuò)誤代碼:“+ex.getErrorCode());} …2023/1/1513JDBC程序訪問數(shù)據(jù)庫的步驟開始導(dǎo)入java.sql包加載并注冊(cè)驅(qū)動(dòng)程序創(chuàng)建一個(gè)Connection對(duì)象創(chuàng)建一個(gè)Statement對(duì)象執(zhí)行語句關(guān)閉ResultSet對(duì)象關(guān)閉Statement對(duì)象關(guān)閉連接結(jié)束使用ResultSet對(duì)象2023/1/1514JDBC程序訪問數(shù)據(jù)庫的步驟
2-1importjava.sql.SQLException;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.Statement;importjava.sql.ResultSet;導(dǎo)入java.sql包2023/1/1515JDBC程序訪問數(shù)據(jù)庫的步驟
2-2假設(shè)當(dāng)前應(yīng)用系統(tǒng)使用MYSQL數(shù)據(jù)庫,首先將該數(shù)據(jù)庫驅(qū)動(dòng)程序(mysql-connector-java-5.1.5-bin.jar)放在當(dāng)前系統(tǒng)路徑下;加載驅(qū)動(dòng)方法:方法一System.setProperty("jdbc.drivers","com.mysql.jdbc.Driver");方法二try{Class.forName("com.mysql.jdbc.Driver");
}catch(ClassNotFoundExceptionce){System.out.println(ce);}加載并注冊(cè)驅(qū)動(dòng)程序2023/1/1516JDBC程序訪問數(shù)據(jù)庫的步驟
2-2裝載JDBC-ODBC驅(qū)動(dòng)程序(不需要注冊(cè))Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);裝載并注冊(cè)SqlServer驅(qū)動(dòng)程序Class.forName(“com.microsoft.jdbc.sqlserver.SqlServerDriver”);DriverManager.registerDriver(newcom.microsoft.jdbc.sqlserver.SqlServerDriver());裝載并注冊(cè)O(shè)racle驅(qū)動(dòng)程序Class.forName(“Oracle.jdbc.driver.OracleDriver”);DriverManager.registerDriver(newOracle.jdbc.driver.OracleDriver());加載并注冊(cè)驅(qū)動(dòng)程序2023/1/1517JDBC程序訪問數(shù)據(jù)庫的步驟
2-3程序操作數(shù)據(jù)庫之前必須先建立與數(shù)據(jù)庫的連接連接數(shù)據(jù)庫必須提供的信息有:數(shù)據(jù)庫服務(wù)器在網(wǎng)絡(luò)中的IP及端口號(hào)該數(shù)據(jù)庫服務(wù)器上某一數(shù)據(jù)庫名稱數(shù)據(jù)庫用戶名與口令等信息參考代碼(以MYSQL數(shù)據(jù)庫為例)Stringurl="jdbc:mysql://localhost:3306/testdb"DriverManager.getConnection(url,"root","root");創(chuàng)建一個(gè)Connection對(duì)象2023/1/1518JDBC程序訪問數(shù)據(jù)庫的步驟
2-3常用數(shù)據(jù)庫的JDBCURL形式:JDBC-ODBCDriverStringurl=“jdbc:odbc:dsName”DriverManager.getConnection(url)Oracle數(shù)據(jù)庫Stringurl=“jdbc:oracle:thin@localhost:1512:sid”DriverManager.getConnection(url,”user”,”pwd”)SQLServer數(shù)據(jù)庫Stringurl=“jdbc:microsoft:sqlserver://localhost:1433: DatabaseName=pubs”DriverManager.getConnection(url,”user”,”pwd”)創(chuàng)建一個(gè)Connection對(duì)象2023/1/1519JDBC程序訪問數(shù)據(jù)庫的步驟
2-4,5Statementstmt=conn.createStatement();Stringsql=“selectid,name,title,pricefrombooks wherename=“Tom”andprice=40”;ResultSetrs=stmt.executeQuery(sql);創(chuàng)建一個(gè)Statement對(duì)象執(zhí)行SQL語句2023/1/1520JDBC程序訪問數(shù)據(jù)庫的步驟
2-6訪問ResultSet中的記錄集While(rs.next()){ Stringcol1=rs.getString(1); Stringcol2=rs.getString(“name”); Stringcol3=rs.getString(“3”); floatcol4=rs.getFloat(“price”); System.out.println(“id=“+col1+” name=“+col2+“title=“+col3+”price=“+col4);}使用ResultSet對(duì)象2023/1/1521JDBC程序訪問數(shù)據(jù)庫的步驟
2-7依次關(guān)閉ResultSet、Statement和Connection對(duì)象
rs.close(); stmt.close(); con.close();釋放資源2023/1/1522應(yīng)用實(shí)例-1已知MYSQL數(shù)據(jù)庫服務(wù)器IP地址為:192.168.1.10,數(shù)據(jù)庫名testdb,用戶名為root,口令為root,其中books表結(jié)構(gòu)如下:
打印出該表中所有的記錄,然后添加一條記錄,信息如下(‘999’,’Tom’,’jdbcBible’,49.8),再將新增的記錄刪除。columnidnametitlepricetypevarcharvarcharvarcharfloat2023/1/1523publicstaticvoidmain(String[]args){try{Class.forName("com.mysql.jdbc.Driver
");}catch(ClassNotFoundExceptionce){System.out.println(ce);}try{Stringurl="jdbc:mysql://192.168.1.10:3306/testdb
";Connectioncon=DriverManager.getConnection(url,”root”,”root”);Statementstmt=con.createStatement();Stringsql=
"selectid,name,title,pricefrombooks"
;ResultSetrs=s.executeQuery(sql)while(rs.next()){
Stringcol1=rs.getString(1); Stringcol2=rs.getString(“name”); Stringcol3=rs.getString(“3”); floatcol4=rs.getFloat(“price”); System.out.println(“id=“+col1+”name=“+col2+ “title=“+col3+”price=“+col4);
}
2023/1/1524sql="insertintobooks(id,name,title,price)VALUES(‘999’,’Tom’,’jdbc Bible’,49.8)frombooks"
stmt.executeUpdate(sql);stmt.executeUpdate(“deletefrombookswhereid=‘999’”);rs.close;stmt.close();con.close();}catch(SQLExceptionce){System.out.println(ce);}//endtry}//endmain2023/1/1525JDBC查詢2-1SQL查詢字符串executeQuery()方法作為參數(shù)傳遞ResultSet返回查詢數(shù)據(jù)SELECTname,email,phoneFROMcolleagues;使用SQL語句,查詢可編寫為:Stringstr="SELECTemp_id,lname,fnameFROMcolleagues";Statementstmt=con.createStatement();ResultSetrset=stmt.executeQuery(str);使用JDBC編寫此查詢,則代碼為:Statement接口2023/1/1526JDBC查詢2-2演示SQL中sum()方法的用法/***Jdbctest2*/importjava.sql.SQLException;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.Statement;importjava.sql.ResultSet;/**這個(gè)類演示SQL中sum()方法的用法**/classJdbctest2{/**構(gòu)造方法*/protectedJdbctest2(){}2023/1/1527JDBC查詢2-2演示SQL中sum()方法的用法/**這是main方法*/publicstaticvoidmain(String[]args){try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}catch(ClassNotFoundExceptionce){System.out.println(ce);}try{Stringurl="jdbc:odbc:test";Connectioncon=DriverManager.getConnection(url);Statements=con.createStatement();ResultSetrs=s.executeQuery("selecthiredate,sum(salary)fromfriendsgroupbyhiredate");while(rs.next()){System.out.print(rs.getDate(1)+"\t");
System.out.print(rs.getInt(2)+"\t");System.out.println("");}rs.close;s.close();con.close();}catch(SQLExceptionce){System.out.println(ce);}
}}2023/1/1528演示:示例3它演示SQL中INSERT語句的用法/***Jdbctest3*/importjava.sql.SQLException;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.Statement;importjava.sql.ResultSet;/**這個(gè)類演示INSERT語句的用法.*@version1.0,2005年8月26日*@authorBen*/classJdbctest3{/**構(gòu)造方法*/protectedJdbctest3(){}JDBC插入數(shù)據(jù)實(shí)現(xiàn)/**這是main方法*/publicstaticvoidmain(String[]args){try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}catch(ClassNotFoundExceptionce){System.out.println(ce);}try{Stringurl="jdbc:odbc:test";Stringstr="INSERTINTO“+friends(name,address,salary)“
+"VALUES(‘朱八‘,’深圳‘,25690)";Connectioncon=DriverManager.getConnection(url);Statements=con.createStatement();introwcount=s.executeUpdate(str);Stringstr1="selectname,sum(salary)“+fromfriends"+"groupbyname";
ResultSetrs=s.executeQuery(str1);while(rs.next()){System.out.print(rs.getString(1)+"\t");
System.out.print(rs.getInt(2)+"\t");System.out.println("");}rs.close();s.close();con.close();}catch(SQLExceptionce){System.out.println(ce);}}}2023/1/1529JDBC刪除和修改實(shí)現(xiàn)它演示SQL中各種命令的用法演示:示例4/***Jdbc2*/importjava.sql.SQLException;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.Statement;/**這這個(gè)類演示
SQL
中命令的用法.*@version1.0,2005年8月26日
*@authorBen*/classJdbc2{/**構(gòu)造方法.*/protectedJdbc2(){}publicstaticvoidmain(String[]args){Connectioncon;Statementstmt;Stringurl;Stringsql;try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}catch(ClassNotFoundExceptionce){System.out.println(ce);}try{url="jdbc:odbc:test";con=DriverManager.getConnection(url);sql="Deletefromfriendswherertrim(name)like\'張三\';";System.out.println("");stmt=con.createStatement();
stmt.executeUpdate(sql);System.out.println("張三的記錄已刪除“);stmt.close();con.close();con=DriverManager.getConnection(url);sql="Updatefriendssetaddress=\'青島\'where“+"rtrim(name)like\'李四\';";System.out.println("");stmt=con.createStatement();stmt.executeUpdate(sql);stmt.close();con.close();System.out.println("李四的記錄已更新");
}catch(SQLExceptionce){System.out.println(ce);}}}2023/1/1530PreparedStatement接口
3-1
PreparedStatement接口(預(yù)編譯的SQL語句)PreparedStatement
用于提高運(yùn)行時(shí)效率執(zhí)行PreparedStatement對(duì)象比執(zhí)行Statement對(duì)象快Statement接口2023/1/1531PreparedStatement接口
3-2
它演示了PreparedStatement的用法演示:示例5/**?*CourseAppl*/importjava.sql.SQLException;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.Statement;importjava.sql.ResultSet;importjava.sql.PreparedStatement;/**這個(gè)類演示SQL中PreparedStatement的用法*/classCourseAppl{privateConnectioncon;privateStringurl;privateStringserverName;privateStringportNumber;privateStringdatabaseName;privateStringuserName;privateStringpassword;privateStringsql;CourseAppl(){url="jdbc:microsoft:sqlserver://";serverName=“l(fā)ocalhost";portNumber="1433";databaseName=“test";userName=“sa";password=“sa";}privateStringgetConnectionUrl(){returnurl+serverName+":"+portNumber+";databaseName="+databaseName+";";}privatejava.sql.ConnectiongetConnection(){try{Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");con=DriverManager.getConnection(getConnectionUrl(),userName,password);if(con!=null){System.out.println("連接成功!");}}catch(Exceptione){e.printStackTrace();System.out.println("getConnection()內(nèi)的錯(cuò)誤跟蹤:"+e.getMessage());}returncon;}publicvoiddisplay(){try{con=getConnection();PreparedStatementpstmt=con.prepareStatement("UPDATEfriendsSETsalary=?WHEREnamelike?");pstmt.setInt(1,10000);pstmt.setString(2,"李四");pstmt.executeUpdate();System.out.println(“記錄已更新!");Statements=con.createStatement();Stringsql="SELECT*FROMfriends";ResultSetrs=s.executeQuery(sql);while(rs.next()){System.out.println("");System.out.print(rs.getInt(1)+"");
System.out.println(rs.getInt(5));}}catch(SQLExceptionce){System.out.println(ce);}}publicstaticvoidmain(String[]args){CourseApplretObj=newCourseAppl();retObj.display();}}2023/1/1532使用結(jié)果集
3-1
ResultSet對(duì)象完全依賴于Statement對(duì)象和Connection對(duì)象每次執(zhí)行SQL語句時(shí),都會(huì)用新的結(jié)果重寫結(jié)果集當(dāng)相關(guān)的Statement關(guān)閉時(shí),Resu
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2025學(xué)年廣西部分學(xué)校高一上學(xué)期12月階段性考試化學(xué)試卷
- 2025年度物聯(lián)網(wǎng)技術(shù)應(yīng)用投資入股合作協(xié)議
- 2025年度客服工作計(jì)劃范文(四)
- 中國化纖紡機(jī)配件行業(yè)發(fā)展監(jiān)測(cè)及投資戰(zhàn)略規(guī)劃報(bào)告
- 中國眼鏡制造行業(yè)市場(chǎng)發(fā)展監(jiān)測(cè)及投資戰(zhàn)略規(guī)劃報(bào)告
- 2025年度住宅小區(qū)物業(yè)服務(wù)費(fèi)結(jié)算與支付合同
- 中國半導(dǎo)復(fù)合材料行業(yè)市場(chǎng)運(yùn)營態(tài)勢(shì)分析及投資前景預(yù)測(cè)報(bào)告
- 2025年度電子商務(wù)數(shù)據(jù)泄露預(yù)警與應(yīng)急響應(yīng)服務(wù)協(xié)議
- ct保修合同范本
- 中國開關(guān)磁阻電動(dòng)機(jī)行業(yè)市場(chǎng)發(fā)展監(jiān)測(cè)及投資戰(zhàn)略咨詢報(bào)告
- 市場(chǎng)消防安全課件
- 名師工作室建設(shè)課件
- 2025-2025學(xué)年度人教版小學(xué)五年級(jí)美術(shù)下冊(cè)教學(xué)計(jì)劃
- 《電力建設(shè)工程施工安全管理導(dǎo)則》(NB∕T 10096-2018)
- 2024-2025學(xué)年廣東省部分學(xué)校高一(上)第一次聯(lián)合考試物理試卷(含答案)
- 《黃色新聞的泛濫》課件
- 2024年山東省公務(wù)員考試《行測(cè)》真題及答案解析
- 化工原理Ⅱ?qū)W習(xí)通超星期末考試答案章節(jié)答案2024年
- 2024-2025學(xué)年初中體育與健康九年級(jí)全一冊(cè)人教版(2024)教學(xué)設(shè)計(jì)合集
- 環(huán)保產(chǎn)業(yè)政策及市場(chǎng)發(fā)展趨勢(shì)分析研究
- 2024年河南省高考對(duì)口升學(xué)語文英語試題
評(píng)論
0/150
提交評(píng)論