版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
2023/1/151第12章JAVA數(shù)據(jù)庫操作了解JDBC的概念及必要性理解JDBC程序的結(jié)構(gòu)運用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ū)動JDBC2023/1/154JDBC體系結(jié)構(gòu)2
應(yīng)用層DriverStatementResultSetConnection各接口驅(qū)動層2023/1/155JDBCAPI-DriverManagerJDBC的管理層,用于把Java應(yīng)用程序連接到正確的JDBC驅(qū)動程序上,然后即退出。加載驅(qū)動程序時自動調(diào)用其registerDriver方法Class.forName("com.mysql.jdbc.Driver");System.setProperty("jdbc.drivers", "com.mysql.jdbc.Driver");建立連接:通過DriverManager.getConnection(URL)方法提供的URL檢查已注冊的驅(qū)動程序,建立與數(shù)據(jù)庫的連接。2023/1/156JDBCAPI-ConnectionConnection對象代表與數(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類存有已注冊的Driver類的清單。當(dāng)調(diào)用方法getConnection時,它將檢查清單中的每個驅(qū)動程序,直到找到可與URL中指定的數(shù)據(jù)庫進(jìn)行連接的驅(qū)動程序為止。Driver的方法connect使用這個URL來建立實際的連接。2023/1/158JDBCAPI-Statement(1)Statement用于發(fā)送簡單的SQL語句通過CONNECTION對象的createStatement方法創(chuàng)建PreparedStatement用于發(fā)送一個或多個輸入?yún)?shù)的SQL語句通過CONNECTION對象的prepareStatement方法創(chuàng)建繼承于Statement,并提供一組方法設(shè)置輸入?yún)?shù)CallableStatement用于處理SQL存儲過程通過CONNECTION對象的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方法用于移動到ResultSet中的下一行,使下一行成為當(dāng)前行。2023/1/1511JDBCAPI-ResultSet(2)結(jié)果集一般是一個表,其中有查詢所返回的列標(biāo)題及相應(yīng)的值如果查詢語句為SELECTstuNo,stuName,stuDeptfromStudent,則結(jié)果集如下:stuNostuNamestuDept__________________06001張一材料06002張二計算機06003張三外國語………2023/1/1512JDBCAPI-SqlExceptionSQLException…try{
此處為相關(guān)數(shù)據(jù)庫操作;}catch(SQLExceptionex){System.out.println(“已捕獲一個SQLException異常!”);System.out.println(“消息:“+ex.getMessage());System.out.println(“錯誤代碼:“+ex.getErrorCode());} …2023/1/1513JDBC程序訪問數(shù)據(jù)庫的步驟開始導(dǎo)入java.sql包加載并注冊驅(qū)動程序創(chuàng)建一個Connection對象創(chuàng)建一個Statement對象執(zhí)行語句關(guān)閉ResultSet對象關(guān)閉Statement對象關(guān)閉連接結(jié)束使用ResultSet對象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ū)動程序(mysql-connector-java-5.1.5-bin.jar)放在當(dāng)前系統(tǒng)路徑下;加載驅(qū)動方法:方法一System.setProperty("jdbc.drivers","com.mysql.jdbc.Driver");方法二try{Class.forName("com.mysql.jdbc.Driver");
}catch(ClassNotFoundExceptionce){System.out.println(ce);}加載并注冊驅(qū)動程序2023/1/1516JDBC程序訪問數(shù)據(jù)庫的步驟
2-2裝載JDBC-ODBC驅(qū)動程序(不需要注冊)Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);裝載并注冊SqlServer驅(qū)動程序Class.forName(“com.microsoft.jdbc.sqlserver.SqlServerDriver”);DriverManager.registerDriver(newcom.microsoft.jdbc.sqlserver.SqlServerDriver());裝載并注冊O(shè)racle驅(qū)動程序Class.forName(“Oracle.jdbc.driver.OracleDriver”);DriverManager.registerDriver(newOracle.jdbc.driver.OracleDriver());加載并注冊驅(qū)動程序2023/1/1517JDBC程序訪問數(shù)據(jù)庫的步驟
2-3程序操作數(shù)據(jù)庫之前必須先建立與數(shù)據(jù)庫的連接連接數(shù)據(jù)庫必須提供的信息有:數(shù)據(jù)庫服務(wù)器在網(wǎng)絡(luò)中的IP及端口號該數(shù)據(jù)庫服務(wù)器上某一數(shù)據(jù)庫名稱數(shù)據(jù)庫用戶名與口令等信息參考代碼(以MYSQL數(shù)據(jù)庫為例)Stringurl="jdbc:mysql://localhost:3306/testdb"DriverManager.getConnection(url,"root","root");創(chuàng)建一個Connection對象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)建一個Connection對象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)建一個Statement對象執(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對象2023/1/1521JDBC程序訪問數(shù)據(jù)庫的步驟
2-7依次關(guān)閉ResultSet、Statement和Connection對象
rs.close(); stmt.close(); con.close();釋放資源2023/1/1522應(yīng)用實例-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;/**這個類演示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;/**這個類演示INSERT語句的用法.*@version1.0,2005年8月26日*@authorBen*/classJdbctest3{/**構(gòu)造方法*/protectedJdbctest3(){}JDBC插入數(shù)據(jù)實現(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刪除和修改實現(xiàn)它演示SQL中各種命令的用法演示:示例4/***Jdbc2*/importjava.sql.SQLException;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.Statement;/**這這個類演示
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
用于提高運行時效率執(zhí)行PreparedStatement對象比執(zhí)行Statement對象快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;/**這個類演示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)的錯誤跟蹤:"+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對象完全依賴于Statement對象和Connection對象每次執(zhí)行SQL語句時,都會用新的結(jié)果重寫結(jié)果集當(dāng)相關(guān)的Statement關(guān)閉時,Resu
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 太陽能利用與光伏儀器考核試卷
- 衛(wèi)浴產(chǎn)品設(shè)計人體工程學(xué)應(yīng)用考核試卷
- 保險公估市場競爭與策略考核試卷
- 樂器品牌故事挖掘與傳播考核試卷
- 直流vm可逆調(diào)速系統(tǒng)課程設(shè)計
- 簡易時鐘課程設(shè)計
- 二零二五年擔(dān)保公司項目法律意見書(影視娛樂行業(yè))3篇
- 選礦廠設(shè)計課程設(shè)計
- 問卷星微課程設(shè)計
- 英語詞匯課程設(shè)計
- GB/T 24478-2023電梯曳引機
- 油田酸化工藝技術(shù)
- 食堂經(jīng)營方案(技術(shù)標(biāo))
- 代收實收資本三方協(xié)議范本
- 人教版八年級英語下冊全冊課件【完整版】
- 乒乓球比賽表格
- 商務(wù)接待表格
- 腸梗阻導(dǎo)管治療
- word小報模板:優(yōu)美企業(yè)報刊報紙排版設(shè)計
- 漢語教學(xué) 《成功之路+進(jìn)步篇+2》第17課課件
- 三十頌之格助詞【精品課件】-A3演示文稿設(shè)計與制作【微能力認(rèn)證優(yōu)秀作業(yè)】
評論
0/150
提交評論