天天看點

第15篇-JAVA JDBC程式設計

第15篇-JAVA JDBC程式設計

  • 每篇一句 :對于勇敢者,嘗試是一條嶄新的生活之路
  • 初學心得: 但對于坎坷與泥濘,能以平常之心視之,就非常不容易
  • (筆者:JEEP/711)[JAVA筆記 | 時間:2017-05-08| JAVA JDBC程式設計 ]

1.JDBC概述

  • 通過使用JDBC API,Java程式可以非常友善地操作各種主流資料庫,這是是Java語言的巨大魅力所在
  • 由于Java語言的跨平台特性,是以使用JDBC API所編寫的程式不僅可以實作跨資料庫,還可以跨平台,具有非常優秀的可移植性
  • 程式使用JDBC API以統一的方式來連接配接不同的資料庫,然後通過Statement對象來執行标準SQL語句,并可以獲得SQL語句通路資料庫的結果

2.JDBC驅動程式類型

  • 1.JDBC驅動:稱為JDBC–ODBC橋,這種驅動是最早實作的JDBC驅動程式,主要目的是為了快速推廣JDBC。這種驅動程式将JDBC API映射到ODBC API。JDBC-ODBC也需要驅動,這種驅動由Sun公司提供實作
  • 2.JDBC驅動:直接将JDBC API映射成資料庫特定的用戶端API。這種驅動程式包含特定資料庫的本地代碼,用于通路特定資料庫的用戶端
  • 3.JDBC驅動:支援三層結構的JDBC通路方式。主要用于Applet階段,通過Applet通路資料庫
  • 4.JDBC驅動:是純Java的,直接與資料庫執行個體互動。這種驅動是智能的,它知道資料庫使用的底層協定,這種驅動是目前最流行的JDBC驅動

3.安裝MySQL資料庫

  • (1)下載下傳MySQL安裝檔案
  • (2)開始安裝MySQL後,在出現的對話框中單擊“Next”按鈕
  • (3)單擊對話框的“Next”按鈕,将出現選擇安裝元件和安裝路徑的對話框。
  • (4)單擊對話框中的“Next”按鈕,将可開始安裝MySQL資料庫系統,安裝成功後,系統還要求配置MySQL資料庫
  • (5)配置資料庫時注意選擇合适的字元集,并設定密碼

4.MySQL的常見指令

1.- 查詢資料庫:show databases;
2.- 删除資料庫:drop database 資料庫名;
3.- 進入資料庫:use 資料庫名
4.- 顯示建立庫名的所有資料:show tables;
5.- 輸出表名:desc 表名
6.SQL語句四大部分 
7.- 資料定義語言(DDL):drop、create、alter
8.- 資料操作語言(DML):insert、update、delete
9.- 資料查詢語言(DQL):select、from、where、group by
10.- 資料控制語言(DCL):grant、revoke、commit、rollback      

5.JDBC常用接口和類

  • DriverManager
  • Connection
  • Statement
  • PreparedStatement
  • ResultSet

6.JDBC程式設計步驟

  • (1)加載資料庫驅動
  • (2)通過DriverManager擷取資料庫連接配接
  • (3)通過Connection對象建立Statement對象
  • (4)使用Statement執行SQL語句。所有Statement都有如下三個方法來執行SQL語句
  • (5)操作結果集。如果執行的SQL語句是查詢語句,執行結果将傳回一個ResultSet對象,該對象裡儲存了SQL語句查詢的結果。程式可以通過操作該ResultSet對象來取出查詢結果

7.JDBC執行SQL語句的方式

  • 使用executeUpdate執行DDL和DML語句
  • 使用execute方法執行SQL語句
  • 使用executeQuery方法執行查詢語句

8.資料庫連接配接池

資料庫連接配接池的解決方案是:當應用程式啟動時,系統主動建立足夠的資料庫連接配接,并将這些連接配接組成一個連接配接池 

每次應用程式請求資料庫連接配接時,無需重新打開連接配接,而是從池中取出已有的連接配接使用,使用完後,不再關閉資料庫連接配接,而是直接将該連接配接歸還給連接配接池。通過使用連接配接池,将大大提高程式運作效率

資料庫連接配接池的常用參數有如下:

  • 資料庫的初始連接配接數
  • 連接配接池的最大連接配接數
  • 連接配接池的最小連接配接數
  • 連接配接池的每次增加的容量

9.兩種開源資料源

  • DBCP:是Apache軟體基金組織下的開源連接配接池實作,該連接配接池依賴該組織下的另一個開源系統:common-pool
  • C3P0:資料源性能更勝一籌,Hibernate就推薦使用該連接配接池 

    C3P0連接配接池不僅可自動清理不再使用的Connection,還可以自動清理Statement和ResultSet

10.JDBC連接配接驅動執行個體

1.package cn.jdbc;
2.import java.sql.Connection;
3.import java.sql.DriverManager;
4.import java.sql.SQLException;
5./**
6. * 建立初始化并擷取
7. */
8.public class MyJdBc {
9.  private static Connection cot = null;//聲明
10.  //靜态代碼塊
11.  static{
12.      try {
13.          Class.forName("com.mysql.jdbc.Driver");
14.          //資料庫名稱,使用者名,密碼
15.          cot = DriverManager.getConnection("jdbc:mysql://localhost:3306/sqltestdb","root","root");
16.          if(!cot.isClosed()){
17.              System.out.println("資料連接配接成功");
18.          }
19.      } catch (ClassNotFoundException e) {
20.          e.printStackTrace();
21.      }catch(SQLException e){
22.          e.printStackTrace();
23.      }
24.  }
25.  public static Connection getInstace(){
26.      return cot;//傳回對象
27.  }
28.}      
1.package cn.jdbc;
2.import java.sql.Connection;
3.import java.sql.ResultSet;
4.import java.sql.SQLException;
5.import java.sql.Statement;
6.import java.text.DateFormat;
7.import java.text.ParseException;
8.import java.text.SimpleDateFormat;
9.import java.util.Date;
10.import com.mysql.jdbc.PreparedStatement;
11./**
12. * JAVA連接配接JDBC驅動器
13. * @author JEEP-711
14. *
15. */
16.public class JdBc {
17.  @SuppressWarnings("unused")
18.  public static void main(String[] args) throws SQLException, ParseException {        
19.          Connection cot = MyJdBc.getInstace();//連接配接
20.          Statement st = cot.createStatement();//建立Statement類對象,來執行SQL語句
21.          String sql = "select * from emp";//要執行的SQL語句
22.          ResultSet rs = st.executeQuery(sql);//ResultSet類,用來存放擷取結果集
23.          System.out.println("-----------------------------------------------");
24.          System.out.println("------------------執行結果如下所示------------------");
25.          System.out.println("-----------------------------------------------");
26.          System.out.println("ID"+"\t"+"姓名"+"\t"+"職稱"+"\t"+"\t時期"+"\t"+"資金");
27.          System.out.println("-----------------------------------------------");
28.          /**
29.           * 查詢
30.           */
31.          String job = null;//職位
32.          String names = null;//姓名
33.          String empon = null;//id号
34.          String hiredate = null;//時期
35.          String sal = null;//資金
36.          while(rs.next()){
37.              job = rs.getString("job");//擷取表中過得字段職稱st列資料
38.              names = rs.getString("ename");//擷取姓名資料
39.              empon = rs.getString("empon");//擷取ID号
40.              hiredate  = rs.getString("hiredate");//擷取時間時期
41.              sal = rs.getString("sal");//擷取資金
42.              System.out.println(empon+"\t"+names+"\t"+job+"\t"+hiredate+"\t"+sal);//輸出結果
43.          /**
44.           * 添加資料 
45.           */
46.          PreparedStatement pl;
47.          ResultSet res;
48.          //預處理添加資料,其中有兩個參數--"?"
49.          pl = (PreparedStatement) cot.prepareStatement("insert into emp (empon,ename,job,hiredate,sal)"+
50.          "values(?,?,?,?,?)");
51.          pl.setInt(1, 3211);//設定參數為1,id為3212
52.          pl.setString(2, "王剛");//設定參數為2,name為王剛
53.          pl.setString(3, "總裁");//設定參數3,職位為總裁
54.          DateFormat df2 = new SimpleDateFormat("yyy-MM-dd");
55.          Date myDate2 = df2.parse("2010-09-13");
56.          pl.setDate(4, new java.sql.Date(myDate2.getTime()));
57.          pl.setFloat(5, (float)2000.3);
58.          pl.executeUpdate();//實行更新
59.          /**
60.           * 更新資料
61.           */
62.          //PreparedStatement gx;
63.          //預處理更新(修改)資料,将王剛的sal修改為5000.00
64.          pl = (PreparedStatement) cot.prepareStatement("update emp set sal = ? where ename = ?");
65.          pl.setFloat(1,(float) 5000.00);
66.          pl.setString(2, "王剛");
67.          pl.executeUpdate();//實行修改
68.          /**
69.           * 删除資料
70.           */
71.          //PreparedStatement sc;
72.          //預處理删除資料
73.          pl = (PreparedStatement) cot.prepareStatement("delete from emp where sal > ?");
74.          pl.setFloat(1, 4500);
75.          pl.executeUpdate();//實行删除
76.          pl.close();//關閉
77.          }
78.          rs.close();//關閉
79.          cot.close();//關閉
80.      } catch (ClassNotFoundException e) {
81.          System.out.println("資料庫驅動異常");//資料庫驅動類異常處理
82.          e.printStackTrace();
83.      } catch (SQLException e) {
84.          System.out.println("資料庫連接配接失敗");//資料庫連接配接失敗異常處理
85.          e.printStackTrace();
86.      } catch (Exception e) {
87.          e.printStackTrace();
88.      }finally{
89.          System.out.println("資料庫資料成功擷取!");
90.      }
91.  }
92.}      

初學(JAVA JDBC程式設計 進階階段) 難點: ★★★★★

希望每一篇文章都能夠對讀者們提供幫助與提升,這乃是每一位筆者的初衷

感謝您的閱讀 歡迎您的留言與建議

  • FaceBook:JEEP SevenEleven
  • Twitter:@JEEP7ll
  • 新浪官方微網誌: @JEEP-711
  • Github部落格: https://github.com/jeep711/jeep711.github.io
  • Blog Garden:http://www.cnblogs.com/JEEP711/
  • W3C/Blog:http://www.w3cschool.cn/jeep711blog/
  • CSDN/Blog:http://blog.csdn.net/jeep911
  • 51CTO/Blog:http://jeep711.blog.51cto.com/
  • 碼雲:http://git.oschina.net/JEEP711/jeep711.github.io