6-JDBC編程.ppt_第1頁
6-JDBC編程.ppt_第2頁
6-JDBC編程.ppt_第3頁
6-JDBC編程.ppt_第4頁
6-JDBC編程.ppt_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、第6章,JDBC 基礎知識,2,本章目標,了解JDBC的概念及必要性 了解JDBC驅(qū)動程序類型 理解JDBC 程序的結(jié)構(gòu) 運用JDBC進行數(shù)據(jù)庫編程,3,數(shù)據(jù)庫訪問技術簡介,客戶機/服務器 應用程序,數(shù)據(jù)庫編程,ODBC,JDBC,兩個常用的API,數(shù)據(jù)庫,執(zhí)行 SQL 語句,檢索查詢結(jié)果,4,數(shù)據(jù)庫,ODBC,客戶機/服務器 GUI應用程序,ODBC (開放式數(shù)據(jù)庫連接) (Microsoft 提供),插 入,刪 除,修 改,應用程序編程接口,查詢,5,JDBC,JDBC (Java 數(shù)據(jù)庫連接) (sun公司提供),Java 應用程序編程接口,Java應用程序,數(shù)據(jù)庫,插 入,修 改,刪

2、除,查詢,6,JDBC 驅(qū)動程序的類型,JDBC 驅(qū)動程序 的類型,JDBC-ODBC橋驅(qū)動程序及ODBC驅(qū)動程序,本地API部分Java驅(qū)動程序,JDBC-Net 純Java驅(qū)動程序,本地協(xié)議純Java驅(qū)動程序,7,JDBC 體系結(jié)構(gòu) 2-1,Java 程序,JDBC 驅(qū)動程序,數(shù)據(jù)庫,SQL 命令,結(jié)果,8,JDBC 體系結(jié)構(gòu) 2-2,應用層,Driver,Statement,ResultSet,Connection,各接口,驅(qū)動層,9,java.sql 包 3-1,10,java.sql 包 3-2,11,java.sql 包 3-3,SQLException,/* * fooBar *

3、/ public void foobar() throws SQLException throw new SQLException(“剛引發(fā)了一個 SQLException ”); , try fooBar(); catch(SQLException ex) System.out.println(“已捕獲一個 SQLException 異常!”); System.out.println(“消息: “ + ex.getMessage(); System.out.println(“錯誤代碼: “ + ex.getErrorCode(); ,調(diào)用 fooBar,12,JDBC 程序訪問數(shù)據(jù)庫的步驟

4、2-1,開 始,導入 java.sql包,加載并注冊驅(qū)動程序,創(chuàng)建一個 Connection 對象,創(chuàng)建一個 Statement 對象,執(zhí)行語句,關閉ResultSet 對象,關閉Statement對象,關閉連接,結(jié) 束,使用ResultSet對象,13,Friends 表的結(jié)構(gòu),JDBC 程序訪問數(shù)據(jù)庫的步驟 2-2,它演示訪問數(shù)據(jù)庫的各個步驟 在執(zhí)行示例 1 中的程序之前,SQL Server 中應該存在一個 名為 friends 的表,演示:示例 1,/* 2005 Aptech Limited * 版權所有 */ import java.sql.SQLException; import

5、 java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; import java.sql.ResultSet; /* 這個類演示訪問數(shù)據(jù)庫需遵循的各個步驟. * version 1.0, 2005 年 8 月 26 日 * author Ben */ class Jdbctest /* 構(gòu)造方法 */ protected Jdbctest() ,/*這是 main 方法. */ public static void main(String args) try Class.forName(sun

6、.jdbc.odbc.JdbcOdbcDriver); catch (ClassNotFoundException ce) System.out.println(ce); try String url = jdbc:odbc:test; Connection con = DriverManager.getConnection(url); Statement s = con.createStatement(); ResultSet rs = s.executeQuery(select * from friends); while (rs.next() System.out.print(rs.ge

7、tString(1) + t); System.out.print(rs.getString(2) + t); System.out.print(rs.getInt(3) + t); System.out.print(rs.getDate(4) + t); System.out.println( ); rs.close(); s.close(); con.close(); catch (SQLException ce) System.out.println(ce); ,14,JDBC 查詢2-1,SQL 查詢字符串,executeQuery() 方法,作為參數(shù)傳遞,ResultSet,返回查詢

8、數(shù)據(jù),SELECT name, email, phone FROM colleagues;,使用 SQL 語句,查詢可編寫為:,String str = SELECT emp_id, lname, fname FROM colleagues; Statement stmt = con.createStatement(); ResultSet rset = stmt.executeQuery(str);,使用 JDBC 編寫此查詢,則代碼為:,Statement接口,15,JDBC 查詢2-2,它演示 SQL 中 sum( ) 方法的用法,演示:示例 2,/* * Jdbctest2 */ im

9、port java.sql.SQLException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; import java.sql.ResultSet; /* 這個類演示 SQL 中 sum() 方法的用法 * version 1.0, 2005 年 8 月 26 日 * author Ben */ class Jdbctest2 /* 構(gòu)造方法*/ protected Jdbctest2() ,/* 這是 main 方法*/ public static void m

10、ain(String args) try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); catch (ClassNotFoundException ce) System.out.println(ce); try String url = jdbc:odbc:test; Connection con = DriverManager.getConnection(url); Statement s = con.createStatement(); ResultSet rs = s.executeQuery( select hiredate, sum(sal

11、ary) from friends group by hiredate); 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 (SQLException ce) System.out.println(ce); ,16,演示:示例 3,它演示 SQL 中 INSERT 語句的用法,/* * Jdbctest3 */ import java.sq

12、l.SQLException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; import java.sql.ResultSet; /* 這個類演示 INSERT 語句的用法. * version 1.0, 2005 年 8 月 26 日 * author Ben */ class Jdbctest3 /* 構(gòu)造方法 */ protected Jdbctest3() ,JDBC 插入數(shù)據(jù)實現(xiàn),/* 這是 main 方法*/ public static void main

13、(String args) try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); catch (ClassNotFoundException ce) System.out.println(ce); try String url = jdbc:odbc:test; String str = INSERT INTO “ + “friends(name,address,salary)“ + VALUES(朱八,深圳 ,25690); Connection con = DriverManager.getConnection(url); Statement s

14、 = con.createStatement(); int rowcount = s.executeUpdate(str); String str1 = select name, sum(salary) “ + ” from friends + group by name;,ResultSet rs = 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()

15、; s.close(); con.close(); catch (SQLException ce) System.out.println(ce); ,17,JDBC 刪除和修改實現(xiàn),它演示 SQL 中各種命令的用法,演示:示例 4,/* * Jdbc2 */ import java.sql.SQLException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; /* 這這個類演示 SQL 中命令的用法. * version 1.0, 2005 年 8 月 26 日 *

16、 author Ben */ class Jdbc2 /* 構(gòu)造方法.*/ protected Jdbc2() ,public static void main(String args) Connection con; Statement stmt; String url; String sql; try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); catch (ClassNotFoundException ce) System.out.println(ce); try url = jdbc:odbc:test; con = DriverManag

17、er.getConnection(url); sql = Delete from friends where rtrim(name)like張三 ; System.out.println( ); stmt = con.createStatement(); stmt.executeUpdate(sql); System.out.println(張三 的記錄已刪除“); stmt.close(); con.close();,con = DriverManager.getConnection(url); sql = Update friends set address=青島 where “ + rt

18、rim(name) like 李四; ; System.out.println( ); stmt = con.createStatement(); stmt.executeUpdate(sql); stmt.close(); con.close(); System.out.println(李四的記錄已更新); catch (SQLException ce) System.out.println(ce); ,18,PreparedStatement接口 3-1,PreparedStatement接口 (預編譯的 SQL 語句),PreparedStatement 用于提高運行時效率,執(zhí)行 Pre

19、paredStatement 對象比執(zhí)行 Statement 對象快,Statement 接口,19,PreparedStatement接口 3-2,它演示了PreparedStatement 的用法,演示:示例 5,/* * CourseAppl */ import java.sql.SQLException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; import java.sql.ResultSet; import java.sql.PreparedState

20、ment; /* 這個類演示 SQL 中 PreparedStatement 的用法*/ class CourseAppl private Connection con; private String url; private String serverName; private String portNumber; private String databaseName; private String userName; private String password; private String sql;,CourseAppl() url = jdbc:microsoft:sqlserv

21、er:/; serverName = “l(fā)ocalhost; portNumber = 1433; databaseName = “test; userName = “sa; password = “sa; private String getConnectionUrl() return url + serverName + : + portNumber + ;databaseName = + databaseName + ; private java.sql.Connection getConnection() try Class.forName(com.microsoft.jdbc.sql

22、server.SQLServerDriver); con = DriverManager.getConnection( getConnectionUrl(), userName, password); if (con != null) System.out.println(連接成功!); catch (Exception e) e.printStackTrace(); System.out.println(getConnection() 內(nèi)的錯誤跟蹤: + e.getMessage(); return con; ,public void display() try con = getConne

23、ction(); PreparedStatement pstmt = con.prepareStatement( UPDATE friends SET salary = ? WHERE name like ?); pstmt.setInt(1, 10000 ); pstmt.setString(2, 李四 ); pstmt.executeUpdate(); System.out.println(“記錄已更新!); Statement s = con.createStatement(); String sql = SELECT * FROM friends ; ResultSet rs = s.

24、executeQuery(sql); while (rs.next() System.out.println( ); System.out.print(rs.getInt(1) + ); System.out.println(rs.getInt(5); catch (SQLException ce) System.out.println(ce); public static void main(String args) CourseAppl retObj = new CourseAppl(); retObj.display(); ,20,PreparedStatement 接口 3-3,它演示

25、在基于條件的 SQL 查詢中如何使用 PreparedStatement,其中條件在 IN 參數(shù)中給出,演示:示例 6,import java.sql.SQLException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.PreparedStatement; /* 這個類演示在基于條件的 SQL 查詢中使用 PreparedStatement*/ class RetrieveRecords private Connection con

26、; private String url; private String serverName, portNumber, databaseName, userName; private String sql; RetrieveRecords() url = jdbc:microsoft:sqlserver:/; serverName = “l(fā)ocalhost; portNumber = 1433; databaseName = “test; userName = “sa; password = “sa; ,private String getConnectionUrl() return url

27、 + serverName + : + portNumber + ;databaseName = + databaseName + ; private java.sql.Connection getConnection() try Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver); con = DriverManager.getConnection( getConnectionUrl(), userName, password); if (con != null) System.out.println(連接成功!); cat

28、ch (Exception e) e.printStackTrace(); System.out.println(“getConnection() 內(nèi)的錯誤跟蹤: + e.getMessage(); return con; ,public void display() try con = getConnection(); sql = select * from Friends where Salary ?; PreparedStatement pstmt = con.prepareStatement( sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSe

29、t.CONCUR_UPDATABLE); pstmt.setInt(1, 5000); ResultSet rs = pstmt.executeQuery(); while (rs.next() System.out.print(rs.getString(1) + t); System.out.print(rs.getString(2) + t); System.out.print(rs.getInt(3) + t); System.out.print(rs.getDate(4) + t); System.out.print(rs.getInt(5) + t); System.out.prin

30、tln( ); rs.close(); pstmt.close(); con.close(); catch (SQLException ce) System.out.println(ce); /* 這是 main 方法*/ public static void main(String args) RetrieveRecords retRec = new RetrieveRecords(); retRec.display(); ,21,使用結(jié)果集 3-1,ResultSet 對象完全依賴于 Statement 對象和 Connection 對象 每次執(zhí)行 SQL 語句時,都會用新的結(jié)果重寫結(jié)果集 當相關的 Statement 關閉時,ResultSet 對象會自動關閉,Next( ),get(),此方法將光標從 當前位置下移一行,從 ResultSet 對象返回數(shù)據(jù),22,使用結(jié)果集 3-2,它演示對當前行的處理 使用 next() 方法時,記錄是按順序處理的 必須按照數(shù)據(jù)返回的順序處理每行中的數(shù)據(jù), ResultSet rset = stmt.getResultSet(); while(rset.next() String dept_name = rset.getString(1); ,23,使用結(jié)果集

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論