版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第5章 Java數(shù)據(jù)庫(kù)編程主要內(nèi)容: 5.1. 數(shù)據(jù)庫(kù)編程基礎(chǔ)5.2. JDBC5.3. 數(shù)據(jù)庫(kù)編程15.1. 數(shù)據(jù)庫(kù)編程基礎(chǔ)1. 數(shù)據(jù)庫(kù)(Database,簡(jiǎn)稱DB)是在計(jì)算機(jī)系統(tǒng)中按照一定的數(shù)據(jù)結(jié)構(gòu)(模型)組織、存儲(chǔ)在計(jì)算機(jī)存儲(chǔ)器中的相互聯(lián)系的數(shù)據(jù)集合。數(shù)據(jù)庫(kù)可以供多種用戶共享,具有較小的冗余度和較高的數(shù)據(jù)獨(dú)立性。2. 數(shù)據(jù)庫(kù)管理系統(tǒng)(Database Management System, 簡(jiǎn)稱DBMS)是位于用戶與操作系統(tǒng)之間的一層數(shù)據(jù)管理軟件,是數(shù)據(jù)庫(kù)系統(tǒng)的重要組成部分,對(duì)數(shù)據(jù)庫(kù)的所有操作和控制都是通過(guò)它來(lái)進(jìn)行的。2關(guān)系數(shù)據(jù)庫(kù)模型把數(shù)據(jù)用表的集合來(lái)表示.數(shù)據(jù)表由一個(gè)或多個(gè)相關(guān)的數(shù)據(jù)項(xiàng)組
2、成表視 圖. 訂單 客戶 產(chǎn)品 記 錄關(guān)系數(shù)據(jù)庫(kù)模型5.1. 數(shù)據(jù)庫(kù)編程基礎(chǔ)31. 數(shù)據(jù)庫(kù)的概念關(guān)系數(shù)據(jù)庫(kù)可以由多個(gè)表組成,表與表之間可以用不同的方式相互關(guān)聯(lián).例如: 學(xué)生表: 成績(jī)表:703892951成績(jī)學(xué)號(hào)劉三3李二2張一1姓名學(xué)號(hào)劉三703姓名成績(jī)學(xué)號(hào)關(guān)系數(shù)據(jù)庫(kù)模型5.1. 數(shù)據(jù)庫(kù)編程基礎(chǔ)41. 數(shù)據(jù)庫(kù)的概念表、記錄、行列關(guān)系:課程編號(hào)課程名稱學(xué)時(shí)學(xué)期平均成績(jī)A001Java編程基礎(chǔ)32179A003C語(yǔ)言48185B004信號(hào)與系統(tǒng)32267C001通信原理32266屬性行(記錄)列關(guān)系數(shù)據(jù)庫(kù)模型5.1. 數(shù)據(jù)庫(kù)編程基礎(chǔ)5結(jié)構(gòu)化查詢語(yǔ)言(SQL)SQL是結(jié)構(gòu)化查詢語(yǔ)言(Structu
3、red Query Language)的簡(jiǎn)稱。SQL語(yǔ)言是IBM公司在20世紀(jì)70年代所開發(fā)的一種數(shù)據(jù)庫(kù)操作語(yǔ)言。它是一個(gè)綜合的、功能強(qiáng)大的關(guān)系型數(shù)據(jù)庫(kù)語(yǔ)言,能實(shí)現(xiàn)數(shù)據(jù)庫(kù)的創(chuàng)建、更新、刪除、數(shù)據(jù)定義、文本限制、出現(xiàn)控制等操作,被公認(rèn)為是數(shù)據(jù)庫(kù)操作不可缺少的工具。SQL現(xiàn)在已經(jīng)成為關(guān)系數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)語(yǔ)言。美國(guó)國(guó)家標(biāo)準(zhǔn)協(xié)會(huì)(ANSI)和國(guó)際標(biāo)準(zhǔn)化組織(ISO)制定了一系列的SQL標(biāo)準(zhǔn)。5.1. 數(shù)據(jù)庫(kù)編程基礎(chǔ)6SELECT語(yǔ)句數(shù)據(jù)查詢是數(shù)據(jù)庫(kù)的常用、核心的操作。SQL語(yǔ)言提供了SELECT語(yǔ)句進(jìn)行數(shù)據(jù)庫(kù)查詢。SELECT語(yǔ)句例子: Select 學(xué)號(hào),姓名,成績(jī) From 學(xué)生表,成績(jī)表 Where
4、 成績(jī)60結(jié)構(gòu)化查詢語(yǔ)言(SQL)5.1. 數(shù)據(jù)庫(kù)編程基礎(chǔ)7更新記錄INSERTInsert語(yǔ)句用于向數(shù)據(jù)庫(kù)的某個(gè)表中插入新的記錄.INSERT語(yǔ)句例子: Insert into 學(xué)生表(學(xué)號(hào),姓名) Values(041201,張三)結(jié)構(gòu)化查詢語(yǔ)言(SQL)5.1. 數(shù)據(jù)庫(kù)編程基礎(chǔ)8更新記錄UPDATEUPDATE語(yǔ)句用于數(shù)據(jù)修改。UPDATE語(yǔ)句示例: update 成績(jī)表 set 成績(jī)=80 where 學(xué)號(hào)=041201結(jié)構(gòu)化查詢語(yǔ)言(SQL)5.1. 數(shù)據(jù)庫(kù)編程基礎(chǔ)9更新記錄DELETEDELETE語(yǔ)句進(jìn)行數(shù)據(jù)刪除。DELETE語(yǔ)句示例: DELETE FROM 學(xué)生表 WHERE
5、姓名=張三 結(jié)構(gòu)化查詢語(yǔ)言(SQL)5.1. 數(shù)據(jù)庫(kù)編程基礎(chǔ)105.2. JDBCJDBC是個(gè)商標(biāo)名而不是縮寫。但經(jīng)常被認(rèn)為是Java Database Connectivity的縮寫。即Java數(shù)據(jù)庫(kù)連接API。JDBC是由一組用Java語(yǔ)言編寫的類和接口組成。JDBC為開發(fā)人員提供了一個(gè)標(biāo)準(zhǔn)的API,允許用戶從Java應(yīng)用程序中訪問(wèn)任何表格數(shù)據(jù)源。JDBC支持SQL工業(yè)標(biāo)準(zhǔn).JDBC有兩個(gè)重要的組件:驅(qū)動(dòng)程序管理器和JDBC-ODBC橋.11JDBC技術(shù)簡(jiǎn)介驅(qū)動(dòng)程序管理器: JAVA應(yīng)用程序平臺(tái)與數(shù)據(jù)庫(kù)無(wú)關(guān)性是通過(guò)驅(qū)動(dòng)程序管理器實(shí)現(xiàn)的.在開發(fā)過(guò)程中需要為不同的數(shù)據(jù)庫(kù)使用不同的JDBC驅(qū)動(dòng)程
6、序,這些驅(qū)動(dòng)程序的選擇由驅(qū)動(dòng)程序管理器完成.JDBC-ODBC橋 Microsoft提供了一個(gè)ODBC(開放式數(shù)據(jù)庫(kù)互連)的技術(shù),使windows應(yīng)用程序能訪問(wèn)不同的數(shù)據(jù)庫(kù).Java程序不能直接與ODBC驅(qū)動(dòng)器通信.SUN公司提供了由JDBC訪問(wèn)ODBC數(shù)據(jù)源的驅(qū)動(dòng)器JDBC-ODBC橋接器.5.2. JDBC12JDBC API為Java開發(fā)者使用數(shù)據(jù)庫(kù)提供了統(tǒng)一的編程接口。即JDBC建立了一種不依賴具體DBMS編程的機(jī)制,使開發(fā)人員不必考慮所用的具體數(shù)據(jù)庫(kù),就能編寫出客戶端/服務(wù)器數(shù)據(jù)庫(kù)應(yīng)用程序.JDBC 30版本 :java.sqljavax.sql5.2. JDBCJDBC技術(shù)簡(jiǎn)介13
7、java.sql 這個(gè)包中的類和接口主要針對(duì)基本的數(shù)據(jù)庫(kù)編程服務(wù),如生成連接、執(zhí)行語(yǔ)句以及準(zhǔn)備語(yǔ)句和運(yùn)行批處理查詢等。同時(shí)也有一些高級(jí)的處理,比如批處理更新、事務(wù)隔離和可滾動(dòng)結(jié)果集等。javax.sql 它主要為數(shù)據(jù)庫(kù)方面的高級(jí)操作提供了接口和類。如為連接管理、分布式事務(wù)和舊有的連接提供了更好的抽象,它引入了容器管理的連接池、分布式事務(wù)和行集等。 5.2. JDBCJDBC 30版本 :14JDBC能夠提供以下功能 1)與數(shù)據(jù)庫(kù)建立連接 2)向數(shù)據(jù)庫(kù)發(fā)送SQL語(yǔ)句 3)處理數(shù)據(jù)庫(kù)返回的結(jié)果5.2. JDBCJDBC技術(shù)簡(jiǎn)介151)與數(shù)據(jù)庫(kù)建立連接在JAVA應(yīng)用程序中要對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行操作,
8、首先就要與數(shù)據(jù)庫(kù)進(jìn)行連接.與數(shù)據(jù)庫(kù)連接一般分為兩個(gè)步驟:1.裝入驅(qū)動(dòng)器:所有的與數(shù)據(jù)庫(kù)交互操作都是借助于DBMS特定的驅(qū)動(dòng)器而發(fā)生的.所以,進(jìn)行數(shù)據(jù)處理之前,需要確定DBMS廠商提供的驅(qū)動(dòng)器并裝入它.2.連接到數(shù)據(jù)庫(kù):在裝入DBMS特定驅(qū)動(dòng)器后,就可以連接需要操作的數(shù)據(jù)庫(kù).5.2. JDBC16裝入數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序?yàn)榱私⑴c數(shù)據(jù)庫(kù)的連接,需要調(diào)用Class類的forName()方法來(lái)裝入數(shù)據(jù)庫(kù)特定的驅(qū)動(dòng)器.如果用JDBC-ODBC橋接器來(lái)與數(shù)據(jù)庫(kù)通信,則用語(yǔ)句: Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”)如果用JDBC Driver(JDBC驅(qū)動(dòng)器
9、)與數(shù)據(jù)庫(kù)通信,則根據(jù)不同的數(shù)據(jù)庫(kù)使用下面的語(yǔ)句: 裝載MS SQL Server驅(qū)動(dòng) Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”) 裝載Oracle JDBC驅(qū)動(dòng) Class.forName(oracle.jdbc.driver.OracleDriver)5.2. JDBC17 在裝入JDBC驅(qū)動(dòng)器時(shí)可能發(fā)生異常,因此要捕獲這個(gè)異常try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); catch (ClassNotFoundException e) System.out.
10、println(Driver not found);5.2. JDBC裝入數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序18連接到數(shù)據(jù)庫(kù)用 DriverManager(驅(qū)動(dòng)程序管理器)類中的getConnection方法建立與數(shù)據(jù)庫(kù)的連接. 例如: Connection conn = DriverManager.getConnection(“jdbc:odbc:數(shù)據(jù)源名”,”數(shù)據(jù)源訪問(wèn)用戶名”,”數(shù)據(jù)源訪問(wèn)密碼”); conn是Connection類的對(duì)象,代表了與數(shù)據(jù)庫(kù)的連接.在應(yīng)用程序中可以使用多個(gè)Connection對(duì)象與一個(gè)或多個(gè)數(shù)據(jù)庫(kù)連接.5.2. JDBC19DriverManager獲得數(shù)據(jù)庫(kù)連接 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的語(yǔ)法如下:jdbc: 協(xié)議 jdbc子協(xié)議 子名 數(shù)據(jù)庫(kù)名 驅(qū)動(dòng)程序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ù)庫(kù)發(fā)送SQL語(yǔ)句要將應(yīng)用程序?qū)?shù)據(jù)庫(kù)操作的SQL語(yǔ)句發(fā)送給DBMS,要執(zhí)行如下兩步操作: 1) 首先使用已經(jīng)建立好的Connection對(duì)象的createStatement()方法創(chuàng)建一個(gè)Statement對(duì)象. Statement st
13、mt = conn.createStatement(); 2) 然后定義一個(gè)變量存放要發(fā)送的SQL語(yǔ)句。如:String strS = “select * from student”; String strI = “Insert into 學(xué)生表(學(xué)號(hào),姓名) Values(041201,張三)”;如果是一般的SELECT查詢語(yǔ)句要發(fā)送,則使用executeQuery(strS)方法。 如果是insert、update或delete修改語(yǔ)句,則使用executeUpdate(strI)方法。5.2. JDBC223)處理數(shù)據(jù)庫(kù)返回的結(jié)果利用Statement對(duì)象的executQuery()方法
14、發(fā)送的SQL查詢語(yǔ)句,會(huì)返回一個(gè)ResultSet對(duì)象,存放結(jié)果集。ResultSet對(duì)象包含了訪問(wèn)結(jié)果集中數(shù)據(jù)的很多方法。典型的有:getString(int n)getInt(int n)getFloat(int n)getDate(int n)next() 等.5.2. JDBC23ResultSet對(duì)象常用方法next()方法: 把當(dāng)前的指針向下移動(dòng)一位。最初它位于第一行之前,因此第一次調(diào)用next將把指針置于第一行上,使它成為當(dāng)前行。隨著每次調(diào)用next導(dǎo)致指針向下移動(dòng),按照從上至下的次序 獲取ResultSet行。5.2. JDBC24ResultSet結(jié)果集的取得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ù)庫(kù)編程在Java程序中要操作數(shù)據(jù)庫(kù),一般應(yīng)該通過(guò)如下幾步:1)導(dǎo)入與
16、數(shù)據(jù)庫(kù)相關(guān)的類 import java.sql.*;2)加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序 Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver);3)建立數(shù)據(jù)庫(kù)連接 Connection conn = DriverManager.getConnection(jdbc:microsoft:sqlserver:/localhost:1433; DatabaseName=db_library;“,”sa”,”); 4)創(chuàng)建Statement對(duì)象 Statement stmt = conn.createStatement(); 26Java程序中要操作
17、數(shù)據(jù)庫(kù)步驟:5)執(zhí)行查詢語(yǔ)句 ResultSet rs = stmt.executeQuery(SELECT id,name FROM student); 6)取值 while (rs.next() .7)關(guān)閉Stamtement stmt.close();8)關(guān)閉連接conn.close(); 見p195例子5.3. 數(shù)據(jù)庫(kù)編程27數(shù)據(jù)庫(kù)舉例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 學(xué)生); 5.3. 數(shù)據(jù)庫(kù)編程28 while (rs.next() System.out.println(學(xué)號(hào):+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ù)庫(kù)編程數(shù)據(jù)庫(kù)舉例29處理帶參數(shù)的查詢?cè)诤芏鄳?yīng)用中,要查詢的內(nèi)容或更新的內(nèi)容是運(yùn)行時(shí)由用戶輸入來(lái)確定的.此時(shí),在編寫應(yīng)用程
20、序時(shí),就不能確定SQL語(yǔ)句中有些項(xiàng)的值.像這樣的查詢,Java提供了一個(gè)PreparedStatement對(duì)象來(lái)處理。PreparedStatement對(duì)象允許執(zhí)行帶參數(shù)的查詢,如:select * from student where 學(xué)號(hào)=?用Connection對(duì)象的PreparedStatement()方法來(lái)創(chuàng)建PreparedStatement對(duì)象。5.3. 數(shù)據(jù)庫(kù)編程30方法如下:String url=“jdbc:odbc:MydataSource”;Connection conn=DriverManager.getConnection(“url”,”la”,”1234”);Pre
21、paredStatement stat;String s=“select * from student where 學(xué)號(hào)=?”;stat=conn.prepareStatement(s);在執(zhí)行PreparedStaatement 對(duì)象之前,必須設(shè)置每個(gè)?參數(shù)的值??梢酝ㄟ^(guò)調(diào)用PreparedStatement對(duì)象的setXxx()方法來(lái)設(shè)置,如:stat.setString(1,textDept.getText();表示用textDept文本框中用戶輸入的內(nèi)容來(lái)設(shè)置參數(shù)值。5.3. 數(shù)據(jù)庫(kù)編程處理帶參數(shù)的查詢31本實(shí)例運(yùn)用前面介紹的知識(shí)能對(duì)圖書管理系統(tǒng)中的借閱進(jìn)行管理,步驟如下 (1)功能設(shè)
22、計(jì) (2)數(shù)據(jù)庫(kù)設(shè)計(jì) (3)建立數(shù)據(jù)庫(kù)操作類: (4)設(shè)計(jì)圖書信息管理相關(guān)類 (5)設(shè)計(jì)借閱管理相關(guān)類 (6)設(shè)計(jì)圖書查詢類 (7)設(shè)計(jì)用戶信息管理相關(guān)類Java實(shí)用編程技術(shù)圖書借閱管理軟件實(shí)例32(1)功能設(shè)計(jì)33(2)數(shù)據(jù)庫(kù)設(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ì)數(shù)據(jù)庫(kù)操作相關(guān)的類Dao.建立數(shù)據(jù)庫(kù)連接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è)務(wù).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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 藝術(shù)與社會(huì)責(zé)任研究-洞察分析
- 系統(tǒng)安全性分析-洞察分析
- 心搏驟停急救設(shè)備研發(fā)-洞察分析
- 虛擬現(xiàn)實(shí)與旅游文化體驗(yàn)-洞察分析
- 南寧市三好學(xué)生主要事跡(8篇)
- 虛擬現(xiàn)實(shí)技術(shù)在游樂(lè)園的應(yīng)用-洞察分析
- 體育用品零售市場(chǎng)現(xiàn)狀分析-洞察分析
- 原子分子反應(yīng)動(dòng)力學(xué)-洞察分析
- 天然氣水合物形成機(jī)制及其資源評(píng)價(jià)研究-洞察分析
- 胸部疾病影像智能識(shí)別-洞察分析
- DB41T2781-2024公路大厚度水泥穩(wěn)定碎石基層施工技術(shù)規(guī)程
- 小學(xué)體育新課標(biāo)培訓(xùn)
- Python試題庫(kù)(附參考答案)
- 殘疾學(xué)生送教上門記錄
- 藍(lán)橋物流平臺(tái)操作手冊(cè)范本
- 銀行IT外包服務(wù)中斷組織級(jí)應(yīng)急響應(yīng)預(yù)案模版
- 能源計(jì)量網(wǎng)絡(luò)圖范例電力計(jì)量網(wǎng)絡(luò)圖
- 半導(dǎo)體物理第五章習(xí)題答案
- 2022年重慶市中考道德與法治B卷試題及答案解析
- 水泵與水泵站(水利)
- 《從百草園到三味書屋》閱讀理解題
評(píng)論
0/150
提交評(píng)論