1. 程式人生 > >初學JDBC的一些總結(一)

初學JDBC的一些總結(一)

1、關於JDBC的的個人理解:

  JDBC(Java Data Base Connectivity,java 資料庫連線)是用於執行 SQL 語句的 JavaAPI,可以為多種關係型資料庫提供統一的訪問方式,它由一組用 Java 語言編寫的類和介面組成。JDBC 提供了一種基準,據此可以構建更高階的工具和介面,使資料庫開發人員能夠編寫資料庫應用程式。虛線表示的地方就是我們現在需要學習的模組在整個系統中所處的位置,JDBC只是提供了一套標準的介面,沒有具體的功能實現,這些具體的實現都是由各個資料庫廠家按照這個標準實現的。也就是 JDBC 驅動實現類,Java 應用程式連線指定資料庫,需要使用廠家提供的 JDBC 驅動才能連線。(這裡其實就是 java 多型的一種體現,一個介面可以有很多具體的實現)。

2、資料庫驅動:

  資料庫安裝完成之後並不能直接使用,必須要通過相應的資料庫驅動程式,通過驅動程式去和資料庫打交道。其實也就是資料庫廠商的JDBC介面實現,即對Connection等介面的實現類的jar檔案。連線不同的資料庫需要使用相對應的資料庫驅動程式。

3、JDBC 連線資料庫 的實現過程(這裡指的是MySQL資料庫): 

  一、安裝資料庫並建立資料庫

  二、載入驅動(不同的資料庫載入驅動的方式不一樣!)

  比較常用的是:CLass.for(jdbcName);(推薦使用這種方法,不會對具體的驅動類產生依賴,當然了,其他的方法也是可以的)

  三、獲取資料庫連線的Connection介面:

    一般比較常用的方法就是使用DriverManager.getConnection(dbUrl, dbUserName, dbPassword),返回值為Connection的一個物件。

    dbUrl:指的是資料庫連線的地址,URL用於標識資料庫的位置,通過URL地址告訴JDBC程式連線哪個資料庫。

    dbUserName:指的是連線資料庫的是需要的使用者名稱

    dbPassword:指的是連結資料庫是指定使用者名稱所對應的密碼

    URL是由規定的寫法格式的,必須按照要求寫才能找到指定的資料庫:MySQL 資料庫的連線地址格式:jdbc:mysql://IP

地址:埠號/資料庫名稱
        jdbc 協議:JDBC URL 中的協議總是 jdbc
        子協議:驅動程式名或資料庫連線機制(這種機制可由一個或多個驅動程式支援)的名稱,如 mysql
        子名稱:一種標識資料庫的方法。必須遵循“//主機名:埠/子協議”的標準 URL 命名約定,如//localhost:3306/db_***;

 1 package com.java1234.jdbc.chap02.sec04;
 2 
 3 import java.sql.Connection;
 4 import java.sql.DriverManager;
 5 import java.sql.SQLException;
 6 
 7 public class Demo1 {
 8 
 9     // 資料庫連線地址
10     private static String dbUrl="jdbc:mysql://localhost:3306/db_book";
11     // 使用者名稱
12     private static String dbUserName="root";
13     // 密碼
14     private static String dbPassword="123456";
15     // 驅動名稱
16     private static String jdbcName="com.mysql.jdbc.Driver";
17             
18     public static void main(String[] args) {
19         try {
20             Class.forName(jdbcName);
21             System.out.println("載入驅動成功!");
22         } catch (ClassNotFoundException e) {
23             // TODO Auto-generated catch block
24             e.printStackTrace();
25             System.out.println("載入驅動失敗!");
26         }
27         Connection con=null;
28         try {
29             // 獲取資料庫連線
30             con=DriverManager.getConnection(dbUrl, dbUserName, dbPassword);
31             System.out.println("獲取資料庫連線成功!");
32             System.out.println("進行資料庫操作!");
33         } catch (SQLException e) {
34             // TODO Auto-generated catch block
35             e.printStackTrace();
36         }finally{
37             try {
38                 con.close();
39             } catch (SQLException e) {
40                 // TODO Auto-generated catch block
41                 e.printStackTrace();
42             }
43         }
44     }
45 }

 總的來說:JDBC的執行步驟就是載入驅動、建立資料庫連線、執行SQL語句、輸出並處理執行結果、關閉資料庫資源。

4、利用JDBC操作資料庫實現簡單的新增、更新和刪除功能(說明一下:這裡不再展示Book模型和封裝了獲取資料庫連線的DbUtil類,因為前邊已經展示過了,這裡使用只是把它它封裝進一個工具類,便於使用罷了):  

  一、向資料庫中新增圖書

 1  1 package com.java1234.jdbc.chap03.sec02;
 2  2 
 3  3 import java.sql.Connection;
 4  4 import java.sql.Statement;
 5  5 
 6  6 import com.java1234.jdbc.model.Book;
 7  7 import com.java1234.jdbc.util.DbUtil;
 8  8 
 9  9 public class Demo2 {
10 10 
11 11     private static DbUtil dbUtil=new DbUtil();
12 12     
13 13     /**
14 14      * 新增圖書2
15 15      * @param book
16 16      * @return
17 17      * @throws Exception
18 18      */
19 19     private static int addBook2(Book book)throws Exception{
20 20         Connection con=dbUtil.getCon();  // 獲取連線
21 21         String sql="insert into t_book values(null,'"+book.getBookName()+"',"+book.getPrice()+",'"+book.getAuthor()+"',"+book.getBookTypeId()+")";
22 22         Statement stmt=con.createStatement(); // 建立Statement
23 23         int result=stmt.executeUpdate(sql);
24 24         dbUtil.close(stmt, con);  // 關閉Statement和連線
25 25         return result;
26 26     }
27 27     
28 28     /**
29 29      * 新增圖書
30 30      * @param bookName
31 31      * @param price
32 32      * @param author
33 33      * @param bookTypeId
34 34      * @return
35 35      * @throws Exception
36 36      */
37 37     private static int addBook(String bookName,float price,String author,int bookTypeId)throws Exception{
38 38         Connection con=dbUtil.getCon();  // 獲取連線
39 39         String sql="insert into t_book values(null,'"+bookName+"',"+price+",'"+author+"',"+bookTypeId+")";
40 40         Statement stmt=con.createStatement(); // 建立Statement
41 41         int result=stmt.executeUpdate(sql);
42 42         dbUtil.close(stmt, con);  // 關閉Statement和連線
43 43         return result;
44 44     }
45 45     
46 46     public static void main(String[] args) throws Exception{
47 47         /*int result=addBook("Java核心技術(上)", 98, "不知道", 1);
48 48         if(result==1){
49 49             System.out.println("新增成功!");
50 50         }else{
51 51             System.out.println("新增失敗!");
52 52         }*/   
53 53         // 多行註釋  ctrl+shift+/
54 54         Book book=new Book("Java核心技術(下)", 98, "不知道", 2);
55 55         int result=addBook2(book);
56 56         if(result==1){
57 57             System.out.println("新增成功!");
58 58         }else{
59 59             System.out.println("新增失敗!");
60 60         }
61 61     }
62 62 }
View Code

  二、通過圖書編號更新資料庫中某一本圖書的資訊

package com.java1234.jdbc.chap03.sec03;

import java.sql.Connection;
import java.sql.Statement;

import com.java1234.jdbc.model.Book;
import com.java1234.jdbc.util.DbUtil;

public class Demo1 {

    private static DbUtil dbUtil = new DbUtil();

    /**
     * 更新圖書
     * @param book
     * @return
     * @throws Exception
     */
    private static int updateBook(Book book) throws Exception {
        Connection con = dbUtil.getCon(); // 獲取連線
        //這種拼接SQL語句的方法真的不提倡使用,太麻煩而且還容易出錯
        String sql = "update t_book set bookName='" + book.getBookName()
                + "',price=" + book.getPrice() + ",author='" + book.getAuthor()
                + "',bookTypeId=" + book.getBookTypeId() + " where id="
                + book.getId();  // ctrl+a 全選  ctrl+shift+F 格式化程式碼
        Statement stmt = con.createStatement(); // 建立Statement
        int result = stmt.executeUpdate(sql);
        dbUtil.close(stmt, con); // 關閉Statement和連線
        return result;
    }

    public static void main(String[] args) throws Exception{
        Book book=new Book(3,"Java***", 121, "厲害了大兄弟", 1);
        int result=updateBook(book);
        if(result==1){
            System.out.println("更新成功!");
        }else{
            System.out.println("更新敗!");
        }
        
    }
}
View Code

  三、通過圖書編號刪除資料庫中指定的圖書

 1 package com.java1234.jdbc.chap03.sec04;
 2 
 3 import java.sql.Connection;
 4 import java.sql.Statement;
 5 
 6 import com.java1234.jdbc.util.DbUtil;
 7 
 8 public class Demo1 {
 9 
10     private static DbUtil dbUtil=new DbUtil();
11     
12     /**
13      * 刪除圖書
14      * @param id
15      * @return
16      * @throws Exception
17      */
18     private static int deleteBook(int id)throws Exception{
19         Connection con = dbUtil.getCon(); // 獲取連線
20         String sql ="delete from t_book where id="+id;
21         Statement stmt = con.createStatement(); // 建立Statement
22         int result = stmt.executeUpdate(sql); //執行SQL語句
23         dbUtil.close(stmt, con); // 關閉Statement和連線
24         return result;
25     }
26     
27     public static void main(String[] args) throws Exception{
28         int result=deleteBook(3);
29         if(result==1){
30             System.out.println("刪除成功!");
31         }else{
32             System.out.println("刪除失敗!");
33         }
34     }
35 }
View Code

  總結一下:通過JDBC執行SQL語句的大致步驟就是在建立完資料庫連線之後,先按照要求編寫滿足題意的SQL語句,然後通過Connection物件的具體方法獲得一個用於向資料庫傳送SQL語句的Statement物件,這個物件能將SQL語句傳送給資料庫,並且返回的是一個int 型的結果,可以利用返回結果判斷語句是否執行成功。SQL語句執行完畢一定要關閉資料庫連線和Statement物件,這些資源比較稀缺,不能等著系統自動關閉。另外,這兩個物件關閉的時候也是又先後順序的,我們是先建立資料庫連線在建立資料庫傳送SQL語句的Statement物件的,關閉的時候要先關Statement物件,然後再關Connection物件,這就好比進門和出門,進門先進外邊的大門(Connection物件),然後再進裡邊的小門(Statement物件),然後出來的順序剛好相反。

常用Statement方法:

  • execute(String sql):執行語句,返回是否有結果集
  • executeQuery(String sql):執行select語句,返回ResultSet結果集。
  • executeUpdate(String sql):執行insert/update/delete操作,返回更新的行數。
  • addBatch(String sql) :把多條sql語句放到一個批處理中。
  • executeBatch():向資料庫傳送一批sql語句執行。