JAVA課件第12章_第1頁
JAVA課件第12章_第2頁
JAVA課件第12章_第3頁
JAVA課件第12章_第4頁
JAVA課件第12章_第5頁
已閱讀5頁,還剩28頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、JDBC目標(biāo)目標(biāo)深刻理解深刻理解JDBC的概念及的概念及JDBC API主主要內(nèi)容要內(nèi)容熟練掌握熟練掌握J(rèn)DBC應(yīng)用程序開發(fā)流程應(yīng)用程序開發(fā)流程熟練掌握應(yīng)用熟練掌握應(yīng)用JDBC實(shí)現(xiàn)數(shù)據(jù)庫記錄的實(shí)現(xiàn)數(shù)據(jù)庫記錄的插入、刪除和修改操作插入、刪除和修改操作熟練掌握應(yīng)用熟練掌握應(yīng)用JDBC查詢數(shù)據(jù)庫記錄查詢數(shù)據(jù)庫記錄 JDBC基礎(chǔ)基礎(chǔ)lJDBC概述概述 在兩層模型中,在兩層模型中,Java applet 或應(yīng)或應(yīng)用程序?qū)⒅苯优c數(shù)用程序?qū)⒅苯优c數(shù)據(jù)庫進(jìn)行對話據(jù)庫進(jìn)行對話 圖13.1 JDBC數(shù)據(jù)庫訪問兩層模型 在三層模型中,命令先是被發(fā)送到服務(wù)的在三層模型中,命令先是被發(fā)送到服務(wù)的“中中間層間層”,然后由

2、它將,然后由它將 SQL 語句發(fā)送給數(shù)據(jù)庫語句發(fā)送給數(shù)據(jù)庫 JDBC數(shù)據(jù)庫訪問三層模型 l使用使用JDBC與數(shù)據(jù)庫建立連接與數(shù)據(jù)庫建立連接JDBC是一種底層是一種底層API,它可以直接調(diào)用,它可以直接調(diào)用SQL語句,語句,也是構(gòu)造高級也是構(gòu)造高級API和數(shù)據(jù)庫開發(fā)工具的基礎(chǔ)。和數(shù)據(jù)庫開發(fā)工具的基礎(chǔ)。JDBC2.0中的類和接口包括如表中的類和接口包括如表11.1所示所示 表11.1 JDBC2.0類和接口類/接口名類/接口功能java.sql.Connection完成對某一個(gè)指定數(shù)據(jù)庫的連接功能完成對某一個(gè)指定數(shù)據(jù)庫的連接功能java.sql.Statement在一個(gè)給定的連接中作為在一個(gè)給定的

3、連接中作為SQL語句執(zhí)行的容器語句執(zhí)行的容器java.sql.PreparedStatement用于執(zhí)行預(yù)編譯的用于執(zhí)行預(yù)編譯的SQL語句語句java.sql.CallableStatement用于返回執(zhí)行數(shù)據(jù)庫中存儲過程調(diào)用用于返回執(zhí)行數(shù)據(jù)庫中存儲過程調(diào)用java.sql.ResultSet查詢語句返回的結(jié)果集查詢語句返回的結(jié)果集DriverManager類類DriverManager 類是類是 JDBC 的管理層,作用的管理層,作用于用戶和驅(qū)動程序之間。它跟蹤可用的驅(qū)動程于用戶和驅(qū)動程序之間。它跟蹤可用的驅(qū)動程序,并在數(shù)據(jù)庫和相應(yīng)驅(qū)動程序之間建立連接。序,并在數(shù)據(jù)庫和相應(yīng)驅(qū)動程序之間建立連

4、接。使用使用JDBC-ODBC 橋驅(qū)動程序建立連接的語句橋驅(qū)動程序建立連接的語句如下:如下: Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); String url = jdbc:odbc:happychat;DriverManager.getConnection(url, sa, );Connection類類Connection 對象代表與數(shù)據(jù)庫的連接。連接過程對象代表與數(shù)據(jù)庫的連接。連接過程包括所執(zhí)行的包括所執(zhí)行的 SQL 語句和在該連接上所返回的結(jié)語句和在該連接上所返回的結(jié)果。一個(gè)應(yīng)用程序可與單個(gè)數(shù)據(jù)庫有一個(gè)或多個(gè)果。一個(gè)應(yīng)用程序可與單個(gè)數(shù)據(jù)庫有一

5、個(gè)或多個(gè)連接,也可以與多個(gè)數(shù)據(jù)庫有連接連接,也可以與多個(gè)數(shù)據(jù)庫有連接下面的語句打開一個(gè)與位于下面的語句打開一個(gè)與位于 URL jdbc:odbc:happychat 的數(shù)據(jù)庫的連接。所用的用戶的數(shù)據(jù)庫的連接。所用的用戶標(biāo)識符為標(biāo)識符為 sa ,口令為,口令為 。 String url = jdbc:odbc:happychat;Connection conn = DriverManager.getConnection(url, sa, ); Statement類類Statement 接口提供了三種執(zhí)行接口提供了三種執(zhí)行 SQL 語句的方法:語句的方法:executeQuery、executeU

6、pdate 和和 execute,使用,使用哪一個(gè)方法由哪一個(gè)方法由 SQL 語句所產(chǎn)生的內(nèi)容決定。語句所產(chǎn)生的內(nèi)容決定。方法方法executeQuery 用于產(chǎn)生單個(gè)結(jié)果集的語句,例如用于產(chǎn)生單個(gè)結(jié)果集的語句,例如 SELECT 語句。語句。方法方法executeUpdate 用于執(zhí)行用于執(zhí)行 INSERT、UPDATE 或或 DELETE 語句以及語句以及 SQL DDL(數(shù)據(jù)定義語言)語句。(數(shù)據(jù)定義語言)語句。例如例如 CREATE TABLE 和和 DROP TABLE。INSERT、UPDATE 或或 DELETE 語句的效果是修改表中零行或多行中的一列或多列。語句的效果是修改表中

7、零行或多行中的一列或多列。executeUpdate 的返回值是一個(gè)整數(shù),指示受影響的行數(shù)(即更的返回值是一個(gè)整數(shù),指示受影響的行數(shù)(即更新計(jì)數(shù))。對于新計(jì)數(shù))。對于 CREATE TABLE 或或 DROP TABLE 等不操作行等不操作行的語句,的語句,executeUpdate 的返回值總為零。的返回值總為零。方法方法execute 用于執(zhí)行返回多個(gè)結(jié)果集、多個(gè)更新計(jì)數(shù)或二者用于執(zhí)行返回多個(gè)結(jié)果集、多個(gè)更新計(jì)數(shù)或二者組合的語句組合的語句 ResultSet類類用于獲得查詢結(jié)果用于獲得查詢結(jié)果ResultSet.next 方法用于移動到方法用于移動到 ResultSet 中中的下一行,使下

8、一行成為當(dāng)前行。結(jié)果集一般是的下一行,使下一行成為當(dāng)前行。結(jié)果集一般是一個(gè)表,其中有查詢所返回的列標(biāo)題及相應(yīng)的值。一個(gè)表,其中有查詢所返回的列標(biāo)題及相應(yīng)的值。執(zhí)行執(zhí)行 SQL 語句并輸出結(jié)果集的語句如下:語句并輸出結(jié)果集的語句如下: Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery(SELECT u_name, u_pass FROM users);while (rs.next() / 打印當(dāng)前行的值。打印當(dāng)前行的值。 String name = r.getString(u_name); Strin

9、g pass = r.getString(u_pass); System.out.println(name + + pass); 數(shù)據(jù)庫操作過程數(shù)據(jù)庫操作過程 加載驅(qū)動程序加載驅(qū)動程序 通過通過DriverManager得到一個(gè)與數(shù)據(jù)庫得到一個(gè)與數(shù)據(jù)庫連接的句柄連接的句柄 通過連接句柄綁定要執(zhí)行的語句通過連接句柄綁定要執(zhí)行的語句 接收執(zhí)行結(jié)果接收執(zhí)行結(jié)果 可選的對結(jié)果的處理可選的對結(jié)果的處理 關(guān)閉數(shù)據(jù)庫連接關(guān)閉數(shù)據(jù)庫連接l SQL Server 2000 Driver For JDBC驅(qū)驅(qū)動程序動程序 Microsoft SQL Server 2000 Driver for JDBC 是一種用

10、以面向企業(yè)級是一種用以面向企業(yè)級Java環(huán)境提供具備環(huán)境提供具備高度可伸縮性與可靠性連通能力的高度可伸縮性與可靠性連通能力的Type 4 JDBC驅(qū)動程序。這種驅(qū)動程序?yàn)轵?qū)動程序。這種驅(qū)動程序?yàn)镴DBC提供了通提供了通過具備過具備Java支持能力的支持能力的applet、應(yīng)用程序或應(yīng)用、應(yīng)用程序或應(yīng)用服務(wù)器訪問服務(wù)器訪問SQL Server 2000的能力?,F(xiàn)在,的能力?,F(xiàn)在,Java開發(fā)人員可以利用這種能夠通過開發(fā)人員可以利用這種能夠通過Internet與與企業(yè)內(nèi)部網(wǎng)絡(luò)提供高性能點(diǎn)對點(diǎn)企業(yè)內(nèi)部網(wǎng)絡(luò)提供高性能點(diǎn)對點(diǎn)n層層SQL Server 2000訪問能力的驅(qū)動程序來充分享受訪問能力的驅(qū)動程

11、序來充分享受SQL Server 2000所提供的豐富功能與強(qiáng)壯特性。所提供的豐富功能與強(qiáng)壯特性。獲得程序獲得程序從微軟的網(wǎng)站上下載驅(qū)動程序:從微軟的網(wǎng)站上下載驅(qū)動程序:SQLServer2000ForJDBC驅(qū)動程序,然后將它安裝好。驅(qū)動程序,然后將它安裝好。(比如安裝目錄是比如安裝目錄是D:SQLDriver For JDBC。)配置環(huán)境配置環(huán)境修改環(huán)境變量中的修改環(huán)境變量中的CLASSPATH,把,把SQL Server 2000 For JDBC 驅(qū)動程序安裝目錄下的如下目錄追加到驅(qū)動程序安裝目錄下的如下目錄追加到CLASSPATH中去。中去。D:SQLDriverForJDBClib

12、msbase.jar;D:SQLDriverForJDBClibmssqlserver.jar;D:SQLDriverForJDBCmsutil.jar;一旦一旦SQL Server 2000 Driver For JDBC驅(qū)動程序驅(qū)動程序安裝配置好,即可用于安裝配置好,即可用于SQL Server 2000的數(shù)據(jù)庫訪的數(shù)據(jù)庫訪問。問。JDBC的查詢發(fā)送機(jī)制的查詢發(fā)送機(jī)制lStatement接口接口Statement接口用于執(zhí)行不帶參數(shù)的簡單接口用于執(zhí)行不帶參數(shù)的簡單SQL語句。語句。ReparedStatement接口和接口和Callablestatement接口都是繼承了接口都是繼承了St

13、atement接口。接口。創(chuàng)建一個(gè)創(chuàng)建一個(gè)Statement類的實(shí)例的方法很簡單,只需調(diào)用類類的實(shí)例的方法很簡單,只需調(diào)用類Connection中的方法中的方法createStatement()就可以了。一般形式如下:就可以了。一般形式如下:Connection con=DriverManager.getConnection(URL,user,password)Statement sm=con.createStatement();創(chuàng)建了創(chuàng)建了Statement類的實(shí)例后,可調(diào)用其中的方法執(zhí)行類的實(shí)例后,可調(diào)用其中的方法執(zhí)行SQL語語句,句,JDBC中提供了三種執(zhí)行方法,它們是中提供了三種執(zhí)行方

14、法,它們是execute(),executeQuery(),executeUpdate() lPreparedStatement接口接口PreparedStatement類是類是Statement類的子類,它直接類的子類,它直接繼承并重載了繼承并重載了Statement的方法,的方法,PrepardStatement類有兩大特點(diǎn):類有兩大特點(diǎn):一個(gè)一個(gè)PreparedStatement的對象中包含的的對象中包含的SQL語句是預(yù)編譯的,語句是預(yù)編譯的,因此當(dāng)需要多次執(zhí)行同一條因此當(dāng)需要多次執(zhí)行同一條SQL語句時(shí),利用語句時(shí),利用PreparedStatement傳送這條傳送這條SQL語句可以大大

15、應(yīng)用擴(kuò)展執(zhí)行語句可以大大應(yīng)用擴(kuò)展執(zhí)行效率。效率。PreparedStatement的對象所包含的的對象所包含的SQL語句中允許有一個(gè)或語句中允許有一個(gè)或多個(gè)輸入?yún)?shù)多個(gè)輸入?yún)?shù) 創(chuàng)建創(chuàng)建PreparedStatement對象對象創(chuàng)建一個(gè)創(chuàng)建一個(gè)PreparedStatement類的對象也只需在建立連接后,類的對象也只需在建立連接后,調(diào)用調(diào)用Connection類中的方法類中的方法prepareStatement()創(chuàng)建一個(gè)創(chuàng)建一個(gè)PreparedStatement的對象,其中包含一條帶參數(shù)的的對象,其中包含一條帶參數(shù)的SQL語句。語句。一般形式如下:一般形式如下:PreparedStateme

16、nt psm=con.prepareStatement(INSERT INTO users(u_name,u_pass) VALUES(?,?); 輸入?yún)?shù)的賦值輸入?yún)?shù)的賦值對上例,如果將第一個(gè)參數(shù)設(shè)為對上例,如果將第一個(gè)參數(shù)設(shè)為zhao,第二個(gè)參數(shù)設(shè)為,第二個(gè)參數(shù)設(shè)為zhao0212,就會在,就會在“users”表中插入的記錄一條新的記錄,表中插入的記錄一條新的記錄,實(shí)現(xiàn)該功能的語句為:實(shí)現(xiàn)該功能的語句為:psm.setString(1,“zhao”);psm.setString(2,“zhao0212”);應(yīng)用實(shí)例應(yīng)用實(shí)例l 建立數(shù)據(jù)庫建立數(shù)據(jù)庫Users表:保存用戶注冊信息。包括用戶名

17、表:保存用戶注冊信息。包括用戶名(U_Name)、用戶密碼()、用戶密碼(U_Pass)、性別)、性別(U_Gender)、年齡()、年齡(U_Age)和電子郵件地址)和電子郵件地址(U_Email)。)。History表:保存用戶聊天信息。包括聊天編號表:保存用戶聊天信息。包括聊天編號(H_No)、聊天用戶()、聊天用戶(H_User)、聊天時(shí)間)、聊天時(shí)間(H_Time)和聊天內(nèi)容()和聊天內(nèi)容(U_Content) 創(chuàng)建數(shù)據(jù)庫和表的腳本如下創(chuàng)建數(shù)據(jù)庫和表的腳本如下:CREATE DATABASE HappyChatGOUSE HappyChatCREATE TABLE users(U_N

18、ame VARCHAR(16) PRIMARY KEY,U_Pass VARCHAR(16) NOT NULL,U_Gender CHAR(2) NOT NULL,U_Age INT NOT NULL,U_Email VARCHAR(20) NOT NULL)CREATE TABLE history(H_No INT IDENTITY(1,1),H_User VARCHAR(16) NOT NULL,H_Time DATETIME NOT NULL,U_Content VARCHAR(60)CREATE PROC delRecordname CHAR(16)ASDELETE FROM User

19、s WHERE U_name=namel插入、修改和刪除操作插入、修改和刪除操作JDBC插入、修改和刪除數(shù)據(jù)庫數(shù)據(jù)插入、修改和刪除數(shù)據(jù)庫數(shù)據(jù)/JDBC插入、修改和刪除演示程序插入、修改和刪除演示程序import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.io.*;import java.sql.*;public class JdbcModifyDemo extends JFrame implements ActionListenerJPanel pnlMain;JLabel lblName,lblPa

20、ss;JTextField txtName,txtPass;JButton btnInsert,btnSave,btnUpdate,btnDelete;public JdbcModifyDemo()super(JDBC插入、修改和刪除演示插入、修改和刪除演示);pnlMain=new JPanel();lblName=new JLabel(用戶名用戶名:) lblPass=new JLabel(密碼密碼:);txtName=new JTextField(16);txtPass=new JTextField(16);btnInsert=new JButton(插入插入);btnInsert.ad

21、dActionListener(this);btnSave=new JButton(保存保存);btnSave.setEnabled(false);btnSave.addActionListener(this);btnUpdate=new JButton(修改修改);btnUpdate.addActionListener(this);btnDelete=new JButton(刪除刪除);btnDelete.addActionListener(this);pnlMain.add(lblName);pnlMain.add(txtName);pnlMain.add(lblPass);pnlMain

22、.add(txtPass);pnlMain.add(btnInsert);pnlMain.add(btnSave);pnlMain.add(btnUpdate);pnlMain.add(btnDelete);setContentPane(pnlMain);setSize(250,150);setVisible(true);public void actionPerformed(ActionEvent ae)if (ae.getSource()=btnInsert)initComponent();if (ae.getSource()=btnSave)saveRecord();if (ae.get

23、Source()=btnUpdate)updateRecord();if (ae.getSource()=btnDelete)int intChoice=JOptionPane.showConfirmDialog(null,真的要?jiǎng)h除該記錄嗎真的要?jiǎng)h除該記錄嗎?,確認(rèn)刪除確認(rèn)刪除,JOptionPane.YES_NO_OPTION);if (intChoice=JOptionPane.YES_OPTION)deleteRecord();public Connection openDatabase()String url = jdbc:odbc:HappyChat;tryClass.forNam

24、e(sun.jdbc.odbc.JdbcOdbcDriver);Connection conn=DriverManager.getConnection(url,sa,);return conn;catch(Exception e)JOptionPane.showMessageDialog(null,連接數(shù)據(jù)庫失敗連接數(shù)據(jù)庫失敗!);return null;public void initComponent()txtName.setText();txtPass.setText();btnSave.setEnabled(true);public void saveRecord()tryPrepar

25、edStatement psm=openDatabase().prepareStatement(Insert users(U_Name,U_Pass) values(?,?);psm.setString(1,txtName.getText();psm.setString(2,txtPass.getText();psm.executeUpdate();JOptionPane.showMessageDialog(null,記錄保存成功記錄保存成功!);psm.close();catch(Exception e)JOptionPane.showMessageDialog(null,記錄插入失敗記錄插

26、入失敗!);public void updateRecord()tryStatement sm=openDatabase().createStatement();String strUpdate=update users set U_pass=+txtPass.getText()+ where U_name=+txtName.getText()+;sm.executeUpdate(strUpdate);JOptionPane.showMessageDialog(null,記錄修改成功記錄修改成功!);sm.close();catch(Exception e)JOptionPane.showMe

27、ssageDialog(null,記錄修改失敗記錄修改失敗!);public void deleteRecord()tryCallableStatement csm=openDatabase().prepareCall(call delRecord(?);csm.setString(1,txtName.getText();csm.execute();JOptionPane.showMessageDialog(null,記錄刪除成功記錄刪除成功!);csm.close();catch(Exception e)JOptionPane.showMessageDialog(null,記錄刪除失敗記錄刪

28、除失敗!);public static void main(String args)new JdbcModifyDemo();l查詢數(shù)據(jù)庫查詢數(shù)據(jù)庫使用使用JDBC查詢數(shù)據(jù)庫內(nèi)容。查詢數(shù)據(jù)庫內(nèi)容。/JDBC查詢數(shù)據(jù)庫演示程序查詢數(shù)據(jù)庫演示程序import java.awt.*;import java.awt.event.*;import java.sql.*;import javax.swing.*;public class JdbcQueryDemo extends Frame implements ActionListenerJLabel lblName;JTextArea taResul

29、t; JPanel pnlMain; JTextField txtName; JButton btnQuery;public JdbcQueryDemo()setLayout(new BorderLayout(); lblName=new JLabel(用戶名用戶名:);taResult=new JTextArea(); btnQuery=new JButton(查詢查詢);txtName=new JTextField(12); pnlMain=new JPanel(); pnlMain.setBackground(Color.ORANGE);pnlMain.add(lblName); pnl

30、Main.add(txtName);pnlMain.add(btnQuery); add(North,pnlMain);add(Center,taResult); taResult.setEditable(false);btnQuery.addActionListener(this); addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e)System.exit(0); );setSize(300,200);setTitle(聊天信息查詢聊天信息查詢);setVisible(true);pub

31、lic void actionPerformed(ActionEvent evt) if(evt.getSource()=btnQuery)taResult.setFont(new Font(宋體宋體,Font.PLAIN,14);taResult.setText(-查詢結(jié)果查詢結(jié)果-); taResult.append(n+編號編號+ 姓名姓名 + 聊天時(shí)間聊天時(shí)間+ 聊天內(nèi)容聊天內(nèi)容+n);taResult.append(-+n);trydispalyHistory(); catch(SQLException e) JOptionPane.showMessageDialog(null,數(shù)據(jù)

32、查詢數(shù)據(jù)查詢錯(cuò)誤錯(cuò)誤!);public void dispalyHistory() throws SQLException String bh,yhm,ltsj,ltnr; String strQuery;tryClass.forName(sun.jdbc.odbc.JdbcOdbcDriver);catch(ClassNotFoundException e) JOptionPane.showMessageDialog(null,驅(qū)動程序錯(cuò)誤驅(qū)動程序錯(cuò)誤!);return;Connection con=DriverManager.getConnection(jdbc:odbc:HappyChat);Statement sql=con.createStatement();strQuery=select * from history where H_user=+txtName.getText().trim()+;ResultSet rs=sql.executeQuery(strQuery); while(rs.next() bh=rs.getString(H_No);yhm=rs.getString(H_User);ltsj=rs.getString(H_Time).substr

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論