第12章 JAVA數(shù)據(jù)庫編程_第1頁
第12章 JAVA數(shù)據(jù)庫編程_第2頁
第12章 JAVA數(shù)據(jù)庫編程_第3頁
第12章 JAVA數(shù)據(jù)庫編程_第4頁
第12章 JAVA數(shù)據(jù)庫編程_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論