JDBC連接MySQL數據庫及示例

jopen 10年前發布 | 30K 次閱讀 JDBC MySQL Java開發

JDBC是Sun公司制定的一個可以用Java語言連接數據庫的技術。

一、JDBC基礎知識        

        JDBC(Java Data Base Connectivity,java數據庫連接)是一種用于執行SQL語句的Java API,可以為多種關系數據庫提供統一訪問,它由一組用Java語言編寫的類和接口組成。JDBC為數據庫開發人員提供了一個標準的API,據此可以構建 更高級的工具和接口,使數據庫開發人員能夠用純 Java API 編寫數據庫應用程序,并且可跨平臺運行,并且不受數據庫供應商的限制。

1、跨平臺運行:這是繼承了Java語言的“一次編譯,到處運行”的特點;

2、不受數據庫供應商的限制:巧妙在于JDBC設有兩種接口,一個是面向應用程序層,其作用是使得開發人員通過 SQL調用數據庫和處理結果,而不需要考慮數據庫的提供商;另一個是驅動程序層,處理與具體驅動程序的交互,JDBC驅動程序可以利用JDBC API創建Java程序和數據源之間的橋梁。應用程序只需要編寫一次,便可以移到各種驅動程序上運行。Sun提供了一個驅動管理器,數據庫供應商——如 MySQL、Oracle,提供的驅動程序滿足驅動管理器的要求就可以被識別,就可以正常工作。所以JDBC不受數據庫供應商的限制。

 

        JDBC API可以作為連接Java應用程序與各種關系數據庫的紐帶,在帶來方便的同時也有負面影響,以下是JDBC的優、缺點。優點如下:

  • 操作便捷:JDBC使得開發人員不需要再使用復雜的驅動器調用命令和函數;

  • 可移植性強:JDBC支持不同的關系數據庫,所以可以使同一個應用程序支持多個數據庫的訪問,只要加載相應的驅動程序即可;

  • 通用性好:JDBC-ODBC橋接驅動器將JDBC函數換成ODBC;

  • 面向對象:可以將常用的JDBC數據庫連接封裝成一個類,在使用的時候直接調用即可。

        缺點如下:

  • 訪問數據記錄的速度受到一定程度的影響;

  • 更改數據源困難:JDBC可支持多種數據庫,各種數據庫之間的操作必有不同,這就給更改數據源帶來了很大的麻煩

 

二、JDBC連接數據庫的流程及其原理

1、在開發環境中加載指定數據庫的驅動程序。例如,接下來的實驗中,使用的數據庫是MySQL,所以需要去下載MySQL支持JDBC的驅動程序(最新的是:mysql-connector-java-5.1.18-bin.jar);而開發環境是MyEclipse,將下載得到的驅動程序加載進開發環境中(具體示例的時候會講解如何加載)。

 

2、在Java程序中加載驅動程序。在Java程序中,可以通過 “Class.forName(“指定數據庫的驅動程序”)” 方式來加載添加到開發環境中的驅動程序,例如加載MySQL的數據驅動程序的代碼為:  Class.forName(“com.mysql.jdbc.Driver”)

 

3、創建數據連接對象:通過DriverManager類創建數據庫連接對象ConnectionDriverManager類作用于Java程序和JDBC驅動程序之間,用于檢查所加載的驅動程序是否可以建立連接,然后通過它的getConnection方法,根據數據庫的URL、用戶名和密碼,創建一個JDBC Connection 對象。如:Connection connection =  DriverManager.geiConnection(“連接數據庫的URL", "用戶名", "密碼”)。其中,URL=協議名+IP地址(域名)+端口+數據庫名稱;用戶名和密碼是指登錄數據庫時所使用的用戶名和密碼。具體示例創建MySQL的數據庫連接代碼如下:

              Connection connectMySQL  =  DriverManager.geiConnection(“jdbc:mysql://localhost:3306/myuser","root" ,"root" );


4、創建Statement對象:Statement 類的主要是用于執行靜態 SQL 語句并返回它所生成結果的對象。通過Connection 對象的 createStatement()方法可以創建一個Statement對象。例如:Statement statament = connection.createStatement(); 具體示例創建Statement對象代碼如下:

             Statement statamentMySQL =connectMySQL.createStatement(); 


5、調用Statement對象的相關方法執行相對應的 SQL 語句:通過execuUpdate()方法用來數據的更新,包括插入和刪除等操作,例如向staff表中插入一條數據的代碼:

       statement.excuteUpdate( "INSERT INTO staff(name, age, sex,address, depart, worklen,wage)" + " VALUES ('Tom1', 321, 'M', 'china','Personnel','3','3000' ) ") ; 

通過調用Statement對象的executeQuery()方法進行數據的查詢,而查詢結果會得到 ResulSet對象,ResulSet表示執行查詢數據庫后返回的數據的集合,ResulSet對象具有可以指向當前數據行的指針。通過該對象的 next()方法,使得指針指向下一行,然后將數據以列號或者字段名取出。如果當next()方法返回null,則表示下一行中沒有數據存在。使用示例代 碼如下:

       ResultSet resultSel = statement.executeQuery( "select * from staff" );


6、關閉數據庫連接:使用完數據庫或者不需要訪問數據庫時,通過Connectionclose() 方法及時關閉數據連接。

 

三、JDBC應用示例實驗

實驗內容:使用phpMyAdmin在MySQL中創建數據庫(myuser),并添加實驗所需的數據(新建staff表,添加一些記錄);編寫Java程序,利用JDBC連接在MySQL中創建好的數據庫(myuser),對staff表格進行插入、更新、刪除和查詢等操作。

實驗環境及開發工具:Win7操作系統;jdk1.6.0_26;XAMPP1.7.7(MySQL 5.1,  phpMyAdmin);MyEclipse 8.5

實驗環境的搭建:可參考我的博客

  • Java環境搭配:http://blog.csdn.net/cxwen78/article/details/6400798;

  • windows系統XAMPP安裝配置使用:http://blog.csdn.net/cxwen78/article/details/6847927

 

實驗過程及步驟:

        1、下載MySQL支持JDBC的驅動程序:如果已經有了,可跳過這一步。前往MySQL官網(http://www.mysql.com/products/connector/ )下載驅動程序,,MySQL針對不同的平臺提供了不同的連接器,我們需要的是DBC Driver for MySQL (Connector/J),如 下圖所示,點擊 Download 跟著網站的引導進行下載。打開下載得到的壓縮包(mysql-connector-java-5.1.18.zip),將其中的Java包(mysql- connector-java-5.1.18-bin.jar),復制到MySQL目錄下(僅是為了方便才放到這里),以備加載驅動程序時使用。

JDBC連接MySQL數據庫及示例

JDBC連接MySQL數據庫及示例

JDBC連接MySQL數據庫及示例

 

        2、創建數據庫:使用phpMyAdmin,登錄MySQL,創建數據庫myuser,并在其中插入一個名為staff的表格。并添加一些數據,操作步驟如圖,登錄進去MySQL數據庫后:

               1)創建數據庫,名稱為myuser,編碼為utf8_general_ci(支持中文);

JDBC連接MySQL數據庫及示例

              2)新建表格,名稱為staff,表格有8個字段;

JDBC連接MySQL數據庫及示例

                  3)8個字段的設置,包括名稱、類型、值的長度、初始值、編碼等等(點擊查看大圖);

JDBC連接MySQL數據庫及示例

                4)添加成功后,查看的staff表格情況:

JDBC連接MySQL數據庫及示例

                5)往表格中插入一些實驗所需數據,需要插入兩條,一個是員工lucy的,還有lili的:

JDBC連接MySQL數據庫及示例

JDBC連接MySQL數據庫及示例

 

        3、在MyEclips中創建項目并在項目中添加MySQL驅動程序:創建的項目類型可以是 Java項目或者是Java Web項目都可以。這里創建的是Web項目,項目名稱可以隨便取,我命名為“JavaWebChp07”。創建成功后將步驟1里下載得到的MySQL驅動 程序包(mysql-connector-java-5.1.18-bin.jar)添加到工程的Build path中,添加過程如圖所示:

JDBC連接MySQL數據庫及示例

JDBC連接MySQL數據庫及示例

JDBC連接MySQL數據庫及示例

JDBC連接MySQL數據庫及示例

        4、編寫JDBC連接MySQL數據庫的實例具體代碼,JDBC_Test.java:

 

JDBC連接MySQL數據庫及示例

具體代碼:

package chp07;  

import java.sql.Connection;  
import java.sql.DriverManager;  
import java.sql.ResultSet;  
import java.sql.SQLException;  
import java.sql.Statement;  

public class JDBC_Test {  
    // 創建靜態全局變量  
    static Connection conn;  

    static Statement st;  

    public static void main(String[] args) {  
        insert();   //插入添加記錄  
        update();   //更新記錄數據  
        delete();   //刪除記錄  
        query();    //查詢記錄并顯示  
    }  

    /* 插入數據記錄,并輸出插入的數據記錄數*/  
    public static void insert() {  

        conn = getConnection(); // 首先要獲取連接,即連接到數據庫  

        try {  
            String sql = "INSERT INTO staff(name, age, sex,address, depart, worklen,wage)"  
                    + " VALUES ('Tom1', 32, 'M', 'china','Personnel','3','3000')";  // 插入數據的sql語句  

            st = (Statement) conn.createStatement();    // 創建用于執行靜態sql語句的Statement對象  

            int count = st.executeUpdate(sql);  // 執行插入操作的sql語句,并返回插入數據的個數  

            System.out.println("向staff表中插入 " + count + " 條數據"); //輸出插入操作的處理結果  

            conn.close();   //關閉數據庫連接  

        } catch (SQLException e) {  
            System.out.println("插入數據失敗" + e.getMessage());  
        }  
    }  

    /* 更新符合要求的記錄,并返回更新的記錄數目*/  
    public static void update() {  
        conn = getConnection(); //同樣先要獲取連接,即連接到數據庫  
        try {  
            String sql = "update staff set wage='2200' where name = 'lucy'";// 更新數據的sql語句  

            st = (Statement) conn.createStatement();    //創建用于執行靜態sql語句的Statement對象,st屬局部變量  

            int count = st.executeUpdate(sql);// 執行更新操作的sql語句,返回更新數據的個數  

            System.out.println("staff表中更新 " + count + " 條數據");      //輸出更新操作的處理結果  

            conn.close();   //關閉數據庫連接  

        } catch (SQLException e) {  
            System.out.println("更新數據失敗");  
        }  
    }  

    /* 查詢數據庫,輸出符合要求的記錄的情況*/  
    public static void query() {  

        conn = getConnection(); //同樣先要獲取連接,即連接到數據庫  
        try {  
            String sql = "select * from staff";     // 查詢數據的sql語句  
            st = (Statement) conn.createStatement();    //創建用于執行靜態sql語句的Statement對象,st屬局部變量  

            ResultSet rs = st.executeQuery(sql);    //執行sql查詢語句,返回查詢數據的結果集  
            System.out.println("最后的查詢結果為:");  
            while (rs.next()) { // 判斷是否還有下一個數據  

                // 根據字段名獲取相應的值  
                String name = rs.getString("name");  
                int age = rs.getInt("age");  
                String sex = rs.getString("sex");  
                String address = rs.getString("address");  
                String depart = rs.getString("depart");  
                String worklen = rs.getString("worklen");  
                String wage = rs.getString("wage");  

                //輸出查到的記錄的各個字段的值  
                System.out.println(name + " " + age + " " + sex + " " + address  
                        + " " + depart + " " + worklen + " " + wage);  

            }  
            conn.close();   //關閉數據庫連接  

        } catch (SQLException e) {  
            System.out.println("查詢數據失敗");  
        }  
    }  

    /* 刪除符合要求的記錄,輸出情況*/  
    public static void delete() {  

        conn = getConnection(); //同樣先要獲取連接,即連接到數據庫  
        try {  
            String sql = "delete from staff  where name = 'lili'";// 刪除數據的sql語句  
            st = (Statement) conn.createStatement();    //創建用于執行靜態sql語句的Statement對象,st屬局部變量  

            int count = st.executeUpdate(sql);// 執行sql刪除語句,返回刪除數據的數量  

            System.out.println("staff表中刪除 " + count + " 條數據\n");    //輸出刪除操作的處理結果  

            conn.close();   //關閉數據庫連接  

        } catch (SQLException e) {  
            System.out.println("刪除數據失敗");  
        }  

    }  

    /* 獲取數據庫連接的函數*/  
    public static Connection getConnection() {  
        Connection con = null;  //創建用于連接數據庫的Connection對象  
        try {  
            Class.forName("com.mysql.jdbc.Driver");// 加載Mysql數據驅動  

            con = DriverManager.getConnection(  
                    "jdbc:mysql://localhost:3306/myuser", "root", "root");// 創建數據連接  

        } catch (Exception e) {  
            System.out.println("數據庫連接失敗" + e.getMessage());  
        }  
        return con; //返回所建立的數據庫連接  
    }  
}

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!