Java語言課件:第5章 Java數(shù)據(jù)庫編程_第1頁
Java語言課件:第5章 Java數(shù)據(jù)庫編程_第2頁
Java語言課件:第5章 Java數(shù)據(jù)庫編程_第3頁
Java語言課件:第5章 Java數(shù)據(jù)庫編程_第4頁
Java語言課件:第5章 Java數(shù)據(jù)庫編程_第5頁
已閱讀5頁,還剩42頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第5章 Java數(shù)據(jù)庫編程主要內(nèi)容: 5.1. 數(shù)據(jù)庫編程基礎5.2. JDBC5.3. 數(shù)據(jù)庫編程15.1. 數(shù)據(jù)庫編程基礎1. 數(shù)據(jù)庫(Database,簡稱DB)是在計算機系統(tǒng)中按照一定的數(shù)據(jù)結構(模型)組織、存儲在計算機存儲器中的相互聯(lián)系的數(shù)據(jù)集合。數(shù)據(jù)庫可以供多種用戶共享,具有較小的冗余度和較高的數(shù)據(jù)獨立性。2. 數(shù)據(jù)庫管理系統(tǒng)(Database Management System, 簡稱DBMS)是位于用戶與操作系統(tǒng)之間的一層數(shù)據(jù)管理軟件,是數(shù)據(jù)庫系統(tǒng)的重要組成部分,對數(shù)據(jù)庫的所有操作和控制都是通過它來進行的。2關系數(shù)據(jù)庫模型把數(shù)據(jù)用表的集合來表示.數(shù)據(jù)表由一個或多個相關的數(shù)據(jù)項組

2、成表視 圖. 訂單 客戶 產(chǎn)品 記 錄關系數(shù)據(jù)庫模型5.1. 數(shù)據(jù)庫編程基礎31. 數(shù)據(jù)庫的概念關系數(shù)據(jù)庫可以由多個表組成,表與表之間可以用不同的方式相互關聯(lián).例如: 學生表: 成績表:703892951成績學號劉三3李二2張一1姓名學號劉三703姓名成績學號關系數(shù)據(jù)庫模型5.1. 數(shù)據(jù)庫編程基礎41. 數(shù)據(jù)庫的概念表、記錄、行列關系:課程編號課程名稱學時學期平均成績A001Java編程基礎32179A003C語言48185B004信號與系統(tǒng)32267C001通信原理32266屬性行(記錄)列關系數(shù)據(jù)庫模型5.1. 數(shù)據(jù)庫編程基礎5結構化查詢語言(SQL)SQL是結構化查詢語言(Structu

3、red Query Language)的簡稱。SQL語言是IBM公司在20世紀70年代所開發(fā)的一種數(shù)據(jù)庫操作語言。它是一個綜合的、功能強大的關系型數(shù)據(jù)庫語言,能實現(xiàn)數(shù)據(jù)庫的創(chuàng)建、更新、刪除、數(shù)據(jù)定義、文本限制、出現(xiàn)控制等操作,被公認為是數(shù)據(jù)庫操作不可缺少的工具。SQL現(xiàn)在已經(jīng)成為關系數(shù)據(jù)庫的標準語言。美國國家標準協(xié)會(ANSI)和國際標準化組織(ISO)制定了一系列的SQL標準。5.1. 數(shù)據(jù)庫編程基礎6SELECT語句數(shù)據(jù)查詢是數(shù)據(jù)庫的常用、核心的操作。SQL語言提供了SELECT語句進行數(shù)據(jù)庫查詢。SELECT語句例子: Select 學號,姓名,成績 From 學生表,成績表 Where

4、 成績60結構化查詢語言(SQL)5.1. 數(shù)據(jù)庫編程基礎7更新記錄INSERTInsert語句用于向數(shù)據(jù)庫的某個表中插入新的記錄.INSERT語句例子: Insert into 學生表(學號,姓名) Values(041201,張三)結構化查詢語言(SQL)5.1. 數(shù)據(jù)庫編程基礎8更新記錄UPDATEUPDATE語句用于數(shù)據(jù)修改。UPDATE語句示例: update 成績表 set 成績=80 where 學號=041201結構化查詢語言(SQL)5.1. 數(shù)據(jù)庫編程基礎9更新記錄DELETEDELETE語句進行數(shù)據(jù)刪除。DELETE語句示例: DELETE FROM 學生表 WHERE

5、姓名=張三 結構化查詢語言(SQL)5.1. 數(shù)據(jù)庫編程基礎105.2. JDBCJDBC是個商標名而不是縮寫。但經(jīng)常被認為是Java Database Connectivity的縮寫。即Java數(shù)據(jù)庫連接API。JDBC是由一組用Java語言編寫的類和接口組成。JDBC為開發(fā)人員提供了一個標準的API,允許用戶從Java應用程序中訪問任何表格數(shù)據(jù)源。JDBC支持SQL工業(yè)標準.JDBC有兩個重要的組件:驅動程序管理器和JDBC-ODBC橋.11JDBC技術簡介驅動程序管理器: JAVA應用程序平臺與數(shù)據(jù)庫無關性是通過驅動程序管理器實現(xiàn)的.在開發(fā)過程中需要為不同的數(shù)據(jù)庫使用不同的JDBC驅動程

6、序,這些驅動程序的選擇由驅動程序管理器完成.JDBC-ODBC橋 Microsoft提供了一個ODBC(開放式數(shù)據(jù)庫互連)的技術,使windows應用程序能訪問不同的數(shù)據(jù)庫.Java程序不能直接與ODBC驅動器通信.SUN公司提供了由JDBC訪問ODBC數(shù)據(jù)源的驅動器JDBC-ODBC橋接器.5.2. JDBC12JDBC API為Java開發(fā)者使用數(shù)據(jù)庫提供了統(tǒng)一的編程接口。即JDBC建立了一種不依賴具體DBMS編程的機制,使開發(fā)人員不必考慮所用的具體數(shù)據(jù)庫,就能編寫出客戶端/服務器數(shù)據(jù)庫應用程序.JDBC 30版本 :java.sqljavax.sql5.2. JDBCJDBC技術簡介13

7、java.sql 這個包中的類和接口主要針對基本的數(shù)據(jù)庫編程服務,如生成連接、執(zhí)行語句以及準備語句和運行批處理查詢等。同時也有一些高級的處理,比如批處理更新、事務隔離和可滾動結果集等。javax.sql 它主要為數(shù)據(jù)庫方面的高級操作提供了接口和類。如為連接管理、分布式事務和舊有的連接提供了更好的抽象,它引入了容器管理的連接池、分布式事務和行集等。 5.2. JDBCJDBC 30版本 :14JDBC能夠提供以下功能 1)與數(shù)據(jù)庫建立連接 2)向數(shù)據(jù)庫發(fā)送SQL語句 3)處理數(shù)據(jù)庫返回的結果5.2. JDBCJDBC技術簡介151)與數(shù)據(jù)庫建立連接在JAVA應用程序中要對數(shù)據(jù)庫中的數(shù)據(jù)進行操作,

8、首先就要與數(shù)據(jù)庫進行連接.與數(shù)據(jù)庫連接一般分為兩個步驟:1.裝入驅動器:所有的與數(shù)據(jù)庫交互操作都是借助于DBMS特定的驅動器而發(fā)生的.所以,進行數(shù)據(jù)處理之前,需要確定DBMS廠商提供的驅動器并裝入它.2.連接到數(shù)據(jù)庫:在裝入DBMS特定驅動器后,就可以連接需要操作的數(shù)據(jù)庫.5.2. JDBC16裝入數(shù)據(jù)庫驅動程序為了建立與數(shù)據(jù)庫的連接,需要調(diào)用Class類的forName()方法來裝入數(shù)據(jù)庫特定的驅動器.如果用JDBC-ODBC橋接器來與數(shù)據(jù)庫通信,則用語句: Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”)如果用JDBC Driver(JDBC驅動器

9、)與數(shù)據(jù)庫通信,則根據(jù)不同的數(shù)據(jù)庫使用下面的語句: 裝載MS SQL Server驅動 Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”) 裝載Oracle JDBC驅動 Class.forName(oracle.jdbc.driver.OracleDriver)5.2. JDBC17 在裝入JDBC驅動器時可能發(fā)生異常,因此要捕獲這個異常try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); catch (ClassNotFoundException e) System.out.

10、println(Driver not found);5.2. JDBC裝入數(shù)據(jù)庫驅動程序18連接到數(shù)據(jù)庫用 DriverManager(驅動程序管理器)類中的getConnection方法建立與數(shù)據(jù)庫的連接. 例如: Connection conn = DriverManager.getConnection(“jdbc:odbc:數(shù)據(jù)源名”,”數(shù)據(jù)源訪問用戶名”,”數(shù)據(jù)源訪問密碼”); conn是Connection類的對象,代表了與數(shù)據(jù)庫的連接.在應用程序中可以使用多個Connection對象與一個或多個數(shù)據(jù)庫連接.5.2. JDBC19DriverManager獲得數(shù)據(jù)庫連接 Driver

11、Manager.getConnection(parameter ) 重載方法:static Connection getConnection(String url) static Connection getConnection(String url,Properties info) static Connection getConnection(String url,String user,String password) 5.2. JDBC20DriverManagerURL的語法如下:jdbc: 協(xié)議 jdbc子協(xié)議 子名 數(shù)據(jù)庫名 驅動程序URLJDBC-ODBCsun.jdbc.od

12、bc.JdbcOdbcDriverjdbc:odbc:odbcsourceOracle thin Driveroracle.jdbc.driver.OracleDriverjdbc:oracle:thin:ip:port:sidMySQLorg.gjt.mm.mysql.Driverjdbc:mysql:/ip/database5.2. JDBC212)向數(shù)據(jù)庫發(fā)送SQL語句要將應用程序對數(shù)據(jù)庫操作的SQL語句發(fā)送給DBMS,要執(zhí)行如下兩步操作: 1) 首先使用已經(jīng)建立好的Connection對象的createStatement()方法創(chuàng)建一個Statement對象. Statement st

13、mt = conn.createStatement(); 2) 然后定義一個變量存放要發(fā)送的SQL語句。如:String strS = “select * from student”; String strI = “Insert into 學生表(學號,姓名) Values(041201,張三)”;如果是一般的SELECT查詢語句要發(fā)送,則使用executeQuery(strS)方法。 如果是insert、update或delete修改語句,則使用executeUpdate(strI)方法。5.2. JDBC223)處理數(shù)據(jù)庫返回的結果利用Statement對象的executQuery()方法

14、發(fā)送的SQL查詢語句,會返回一個ResultSet對象,存放結果集。ResultSet對象包含了訪問結果集中數(shù)據(jù)的很多方法。典型的有:getString(int n)getInt(int n)getFloat(int n)getDate(int n)next() 等.5.2. JDBC23ResultSet對象常用方法next()方法: 把當前的指針向下移動一位。最初它位于第一行之前,因此第一次調(diào)用next將把指針置于第一行上,使它成為當前行。隨著每次調(diào)用next導致指針向下移動,按照從上至下的次序 獲取ResultSet行。5.2. JDBC24ResultSet結果集的取得ResultSe

15、t的使用 . . . ResultSet rst = stmt.executeQuery(Select * from User_Info);while (rst.next() System.out.println(rst.getString(userName);System.out.println(rst.getDate(regDate);System.out.println(rst.getString(4);System.out.println(rst.getInt(age); . . .5.2. JDBC255.3. 數(shù)據(jù)庫編程在Java程序中要操作數(shù)據(jù)庫,一般應該通過如下幾步:1)導入與

16、數(shù)據(jù)庫相關的類 import java.sql.*;2)加載數(shù)據(jù)庫驅動程序 Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver);3)建立數(shù)據(jù)庫連接 Connection conn = DriverManager.getConnection(jdbc:microsoft:sqlserver:/localhost:1433; DatabaseName=db_library;“,”sa”,”); 4)創(chuàng)建Statement對象 Statement stmt = conn.createStatement(); 26Java程序中要操作

17、數(shù)據(jù)庫步驟:5)執(zhí)行查詢語句 ResultSet rs = stmt.executeQuery(SELECT id,name FROM student); 6)取值 while (rs.next() .7)關閉Stamtement stmt.close();8)關閉連接conn.close(); 見p195例子5.3. 數(shù)據(jù)庫編程27數(shù)據(jù)庫舉例import java.sql.*;public class DBDemo public static void main(String args) String strurl =jdbc:odbc:stu; Connection conn =null;

18、 Statement stmt =null; ResultSet rs=null; try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); conn=DriverManager.getConnection(strurl,null,null); stmt=conn.createStatement(); rs=stmt.executeQuery(select 姓名,年齡 from 學生); 5.3. 數(shù)據(jù)庫編程28 while (rs.next() System.out.println(學號:+rs.getString(1)+ 年齡:+rs.getInt(

19、2); catch (ClassNotFoundException e) e.printStackTrace(); catch(SQLException e) e.printStackTrace(); finally try if(stmt !=null) stmt.close(); if(conn !=null& !conn.isClosed() conn.close(); catch(SQLException e) e.printStackTrace(); 5.3. 數(shù)據(jù)庫編程數(shù)據(jù)庫舉例29處理帶參數(shù)的查詢在很多應用中,要查詢的內(nèi)容或更新的內(nèi)容是運行時由用戶輸入來確定的.此時,在編寫應用程

20、序時,就不能確定SQL語句中有些項的值.像這樣的查詢,Java提供了一個PreparedStatement對象來處理。PreparedStatement對象允許執(zhí)行帶參數(shù)的查詢,如:select * from student where 學號=?用Connection對象的PreparedStatement()方法來創(chuàng)建PreparedStatement對象。5.3. 數(shù)據(jù)庫編程30方法如下:String url=“jdbc:odbc:MydataSource”;Connection conn=DriverManager.getConnection(“url”,”la”,”1234”);Pre

21、paredStatement stat;String s=“select * from student where 學號=?”;stat=conn.prepareStatement(s);在執(zhí)行PreparedStaatement 對象之前,必須設置每個?參數(shù)的值。可以通過調(diào)用PreparedStatement對象的setXxx()方法來設置,如:stat.setString(1,textDept.getText();表示用textDept文本框中用戶輸入的內(nèi)容來設置參數(shù)值。5.3. 數(shù)據(jù)庫編程處理帶參數(shù)的查詢31本實例運用前面介紹的知識能對圖書管理系統(tǒng)中的借閱進行管理,步驟如下 (1)功能設

22、計 (2)數(shù)據(jù)庫設計 (3)建立數(shù)據(jù)庫操作類: (4)設計圖書信息管理相關類 (5)設計借閱管理相關類 (6)設計圖書查詢類 (7)設計用戶信息管理相關類Java實用編程技術圖書借閱管理軟件實例32(1)功能設計33(2)數(shù)據(jù)庫設計34public class Dao protected static String dbClassName = com.microsoft.jdbc.sqlserver.SQLServerDriver;protected static String dbUrl = jdbc:microsoft:sqlserver:/localhost:1433; + Databa

23、seName=db_library;SelectMethod=Cursor useunicode=true;characterEncoding=GB18030 ;protected static String dbUser = sa;protected static String dbPwd = ;protected static String second = null;private static Connection conn = null;private Dao() System.out.println(dbUrl);try if (conn = null) Class.forName

24、(dbClassName).newInstance();conn = DriverManager.getConnection(dbUrl, dbUser, dbPwd);elsereturn; catch (Exception ee) ee.printStackTrace();(3)設計數(shù)據(jù)庫操作相關的類Dao.建立數(shù)據(jù)庫連接35public static int Insertbook(String ISBN,String typeId,String bookname,String writer,String translator,String publisher,Date date,Doub

25、le price) int i=0; try String sql=insert into tb_bookInfo(ISBN,typeId,bookname,writer,translator,publisher,date,price) values(+ISBN+,+typeId+,+bookname+,+writer+,+translator+,+publisher+,+date+,+price+);/System.out.println(sql); i=Dao.executeUpdate(sql); catch(Exception e) System.out.println(e.getMe

26、ssage(); Dao.close(); return i; Dao類中插入圖書信息的方法36class addBookActionListener implements ActionListener / 添加按鈕的單擊事件監(jiān)聽器public void actionPerformed(final ActionEvent e) / 訂書業(yè)務.String ISBNs=ISBN.getText().trim();String bookTypes=item.getId();String translators=translator.getText().trim();String bookNames

27、=bookName.getText().trim();String writers=writer.getText().trim();String publishers=(String)publisher.getSelectedItem();String pubDates=pubDate.getText().trim();String prices=price.getText().trim();int i=Dao.Insertbook(ISBNs,bookTypes, bookNames, writers, translators, publishers, java.sql.Date.valueOf(pubDates),Double.parseDouble(prices);if(i=1) JOptionPane.showMessageDialog(null, 添加成功); doDefaultCloseAction();(4)

溫馨提示

  • 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

提交評論