1. 程式人生 > >MySQL資料庫學習筆記----JDBC入門及簡單增刪改資料庫的操作

MySQL資料庫學習筆記----JDBC入門及簡單增刪改資料庫的操作

 一、JDBC的引入                                                                                                                    

1、JDBC的概念

JDBC:Java Database Connection,表示資料庫連線(任何資料庫都支援JDBC的連線),是一個獨立於特定資料庫管理系統、通用的sql資料庫存取和操作的公共介面。它是java中專門提供的一組用於操作資料庫的標準,所有的資料庫生產商如果要是想為java提供支援,則必須支援此標準。既然是標準的話,所以說JDBC實際上是一套訪問資料庫的介面

2、常用操作類/介面

Connection介面、Statement介面、PreapredStatement介面、ResultSet介面、CallableStatement介面、DriverManager類。

3、JDBC應用步驟

  • 1.註冊載入一個驅動
  • 2.建立資料庫連線(Connection)
  • 3.構造SQL語句
  • 4.建立statement,傳送sql語句
  • 5.執行sql語句
  • 6.處理sql結果
  • 7.關閉statement和connection 

                                                                                

二、驅動程式下載:                                                                                                                 

根據上一段的定義,我們明白了,java定義JDBC介面,資料庫來實現這個介面。不同的廠商對JDBC有不同的實現,所以廠商要提供自己資料庫的驅動,讓應用程式來訪問。而應用程式則只通過自己的一套JDBC介面來訪問就行了,然後驅動程式來實現這個介面,從而讓驅動來呼叫資料庫。所以我們終於明白了這句話:驅動程式由資料庫提供商提供下載

在Java中,驅動程式是以jar包的形式提供的,MySQL驅動程式的下載地址:http://dev.mysql.com/downloads/

be475b59-0e1a-4ce9-a806-c3b2b3b0719f

01bc3198-0a7c-4e3a-b682-0ddecf5639b6

上圖中,選擇“Connector/J”的版本進行下載,彈出下一個介面,讓我們選擇平臺來下載:如果選擇windows平臺,介面如下:

567dacb7-1537-472d-9b92-137ce68deede

如果選擇跨平臺,介面會變成下面的這個樣子:

9bfcd9a3-a4ee-456f-b3cf-c50e6819da3d

上圖中,第一個版本是Linux平臺的壓縮包,第二個是Windows平臺中的壓縮包,那我們選擇上圖中的紅框部分進行下載:

796b6f84-526a-40b4-a7b8-1fda0983d1c6

上圖中,不用註冊,直接下載。下載完成後,解壓:

68e84edc-f208-42d5-98de-72fdf568cf7d

上圖中,紅框部分的mysql-connector-java-5.1.33-bin.jar就是我們所需要的包。

 

三、JDBC實現簡單增刪改操作                                                                                                      

  • 1、JDBC操作前的準備工作
  • 2、實現插入操作
  • 3、實現更新操作
  • 4、實現刪除操作
  • 5、程式碼優化(寫成工具類):將欄位換成變數

1、JDBC操作前的準備工作:

首先建立資料庫表:person。欄位:id,name,age,description。建表的命令如下:

CREATE TABLE person(
id int primary key auto_increment,
name varchar(20),
age int(2),
description varchar(100)
);

建立的空表如下:

60645d0c-10b1-49c7-855f-37cf8297ac91

緊接著匯入資料庫驅動包:

開啟eclipse,新建Java工程JDBC01,然後在根目錄下新建一個資料夾libs:

0060622e-8f67-44bf-92a1-b8210147f4b3

然後複製之前下載的驅動包mysql-connector-java-5.1.33-bin.jar,貼上到libs目錄下,然後到了最關鍵的一步:將該Java包新增到工程的Build path中,操作如下圖:

96965c34-a0e5-4198-8286-0aed4e7bddac

如果生效之後,就會多出一個檔案出來:(下圖中的箭頭處)

eaacea91-5cb9-4023-993b-e336f5c103fb

2、實現插入操作:

步驟如下:

  • 1、載入資料庫驅動程式:Class.forName(驅動程式類);
  • 2、通過使用者名稱密碼和連線地址url獲取資料庫連線物件:Connection connnction = DriverManager.getConnection(連線地址url,使用者名稱,密碼)。每個資料庫都有指定的url,同一格式如下:jdbc:mysql://ip地址:埠號/資料庫名字。
  • 3、構造插入的SQL語句。注:在Java程式當中,SQL語句是以字串的形式使用,程式不認識此SQL語句,傳到資料庫後讓資料庫來識別。
  • 4、建立Statement例項:Statement stmt = connction.createStatement()。Statement是用來發送SQL語句的載體,因為Java程式碼無法解析,要交給資料庫來解析。
  • 5、執行插入SQL語句:stmt.executeUpdate(sql)。這裡的執行是傳送SQL語句。返回值為int型別,表示有多少條記錄被更新了。
  • 6、關閉連線:stmt.close()、 connnction.close()。關閉是為了釋放資源。

注:這個步驟是通俗的用法,可以當做模板來用。我們來舉個例子。

在工程檔案中新建一個java類,作為主程式:

821f8625-b677-4617-a8ae-da9d93852d75

JdbcTest.java完整版程式碼如下:(註釋很詳細)

複製程式碼

 1 package com.vae.jdbc;
 2 
 3 import java.sql.Connection;
 4 import java.sql.DriverManager;
 5 import java.sql.SQLException;
 6 import java.sql.Statement;
 7 
 8 public class JdbcTest {
 9 
10     /**
11      * @param args
12      */
13     
14     //資料庫連線地址
15     private final static String URL = "jdbc:mysql://localhost:3306/mydb_2";
16     //使用者名稱
17     public final static String USERNAME = "root";
18     //密碼
19     public final static String PASSWORD = "smyh";
20     //載入的驅動程式類(這個類就在我們匯入的jar包中)
21     public final static String DRIVER = "com.mysql.jdbc.Driver";
22     
23     public static void main(String[] args) {
24         // TODO Auto-generated method stub
25         insert();
26     }    
27     
28     
29     //方法:插入資料
30     public static void insert(){
31         try {
32             //1、載入資料庫驅動程式
33             Class.forName(DRIVER);
34             
35             //2、獲取資料庫連線
36             Connection connection  = DriverManager.getConnection(URL, USERNAME, PASSWORD);
37             
38             //3、構造SQL語句(插入具體的資料)
39             String sql = "insert into person(name,age,description)values('生命壹號',22,'學到哪裡,我的部落格就寫到哪裡')";
40             
41             //4、構造一個Statement例項(用來發送SQL語句的載體)
42             Statement state = connection.createStatement();
43             
44             //5、執行SQL語句(其實是向資料庫中傳送sql語句)
45             state.executeUpdate(sql);
46             
47             //6、關閉連線(釋放資源)
48             state.close();
49             connection.close();
50             
51             System.out.println("insert success");
52             
53             
54         } catch (ClassNotFoundException e) {
55             e.printStackTrace();
56         } catch (SQLException e) {
57             e.printStackTrace();
58         }
59         
60     }    
61  
62 }

複製程式碼

注意程式在導包時,匯入的是下面的這些包:

59f98e98-25e7-4692-bc00-9eaa3e58c995

程式碼解釋:

15行的url代表連線接資料庫的地址。命名格式統一如下:url = "jdbc:mysql://ip地址:埠號/資料庫名字"。如果是本機的話,IP地址可以寫成localhost。

17行、19行:指的是資料庫的使用者名稱和密碼。如果輸入錯誤,會報錯如下:

27b8873b-2305-4025-bd10-22f98a66d57c

21行:我們所載入的驅動程式類的名字是:com.mysql.jdbc.Driver,其實它就指的就是jar包中的com.mysql/jdbc/Driver.class檔案。

程式執行成功後,後臺會輸出:

16bae3e3-831e-4881-9e73-cecebd987187

我們再去資料庫看一下,發現數據真的填充進去了:

1220663a-58dd-44c2-a82e-8e6ff2e63caf

終於實現了Java程式碼與資料庫之間的聯絡,任務完成。

3、實現更新操作:

和上面的插入操作相比,只是sql語句不一樣而已(因為插入資料和更新資料其實都是更新嘛)

步驟如下:

更新操作的方法如下:(程式碼解釋請參照上面的程式碼就懂了)

複製程式碼

 1   //方法:更新資料
 2     public static void update(){
 3         try {
 4             Class.forName(DRIVER);
 5             Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
 6             String sql = "update person set age=24 where id=1";
 7             Statement state = connection.createStatement();
 8             state.executeUpdate(sql);
 9             state.close();
10             connection.close();
11             System.out.println("update success");
12         } catch (ClassNotFoundException e) {
13             e.printStackTrace();
14         } catch (SQLException e) {
15             e.printStackTrace();
16         }
17     }

複製程式碼

核心程式碼是第6行,我們將之前的22歲改為24歲。程式執行後,資料庫裡也會對應的進行更新。

4、實現刪除操作

同樣的道理,和上面的插入操作相比,只是sql語句不一樣而已(因為插入資料、更新資料、刪除資料其實都是更新嘛)

刪除操作的方法如下:

複製程式碼

 1     //方法:刪除操作
 2     public static void delete(){
 3         try {
 4             Class.forName(DRIVER);
 5             Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
 6             String sql = "delete from person where id=1";
 7             Statement state = connection.createStatement();
 8             state.executeUpdate(sql);
 9             state.close();
10             connection.close();
11             System.out.println("delete success");
12         } catch (ClassNotFoundException e) {
13             e.printStackTrace();
14         } catch (SQLException e) {
15             e.printStackTrace();
16         }
17     }

複製程式碼

核心程式碼是第06行和第08行。

5、程式碼優化(寫成工具類):將欄位換成變數

我們上面的增刪該的操作都是直接在sql裡面放入具體的引數,但是有可能這種引數是外面傳進來的,所以一種更方便的寫法是把引數換成變數,我們以插入操作為例:

複製程式碼

 1     //方法:插入資料(程式碼優化)
 2     public static void insert2(){
 3         String name = "生命貳號";
 4         int age  = 22;
 5         String description = "哈哈,我是優化之後的程式碼哦";
 6         try {
 7             Class.forName(DRIVER);
 8             Connection connection  = DriverManager.getConnection(URL, USERNAME, PASSWORD);
 9             //拼接SQL語句
10             String sql = "insert into person(name,age,description)values('"+name+"',"+age+",'"+description+"')";  //注意拼接的格式
11             Statement state = connection.createStatement();
12             state.executeUpdate(sql);
13             state.close();
14             connection.close();
15             System.out.println("success.");
16             
17             
18         } catch (ClassNotFoundException e) {
19             e.printStackTrace();
20         } catch (SQLException e) {
21             e.printStackTrace();
22         }
23         
24     }

複製程式碼

核心程式碼是第10行,這裡的sql語句是以變數的形式出現的,符合工具類的特性,注意它拼接的格式哦~~~來把它拆開再仔細瞧一瞧:

String sql = "insert into person(name,age,description)values(' "+name+" ',      "+age+",    '  "+description+"  ')";

執行之後,效果如下:

97f4bb25-e4b6-460a-94bb-26350c8a73ea

其實這種拼接的方式很不好:既麻煩又不安全。資料庫的查詢操作以及詳細解釋將在下篇文章中學習到,加油!!!

哦,對了,最後再貼一下上方所有程式碼的完整版:

複製程式碼

  1 package com.vae.jdbc;
  2 
  3 import java.sql.Connection;
  4 import java.sql.DriverManager;
  5 import java.sql.SQLException;
  6 import java.sql.Statement;
  7 
  8 public class JdbcTest {
  9 
 10     /**
 11      * @param args
 12      */
 13     
 14     //資料庫連線地址
 15     private final static String URL = "jdbc:mysql://localhost:3306/mydb_2";
 16     //使用者名稱
 17     public final static String USERNAME = "root";
 18     //密碼
 19     public final static String PASSWORD = "smyh";
 20     //載入的驅動程式類(這個類就在我們匯入的jar包中)
 21     public final static String DRIVER = "com.mysql.jdbc.Driver";
 22     
 23     public static void main(String[] args) {
 24         // TODO Auto-generated method stub
 25         insert();
 26         //update();
 27         //delete();
 28         //insert2();
 29     }   
 30     
 31     
 32     //方法:插入資料
 33     public static void insert(){
 34         try {
 35             //1、載入資料庫驅動程式
 36             Class.forName(DRIVER);
 37             
 38             //2、獲取資料庫連線
 39             Connection connection  = DriverManager.getConnection(URL, USERNAME, PASSWORD);
 40             
 41             //3、構造SQL語句(插入具體的資料)
 42             String sql = "insert into person(name,age,description)values('生命壹號',22,'學到哪裡,我的部落格就寫到哪裡')";
 43             
 44             //4、構造一個Statement例項(用來發送SQL語句的載體)
 45             Statement state = connection.createStatement();
 46             
 47             //5、執行SQL語句(其實是向資料庫中傳送sql語句)
 48             state.executeUpdate(sql);
 49             
 50             //6、關閉連線(釋放資源)
 51             state.close();
 52             connection.close();
 53             
 54             System.out.println("insert success");
 55             
 56             
 57         } catch (ClassNotFoundException e) {
 58             e.printStackTrace();
 59         } catch (SQLException e) {
 60             e.printStackTrace();
 61         }
 62         
 63     }
 64     
 65 
 66     //方法:插入資料(程式碼優化)
 67     public static void insert2(){
 68         String name = "生命貳號";
 69         int age  = 22;
 70         String description = "哈哈,我是優化之後的程式碼哦";
 71         try {
 72             Class.forName(DRIVER);
 73             Connection connection  = DriverManager.getConnection(URL, USERNAME, PASSWORD);
 74             //拼接SQL語句
 75             String sql = "insert into person(name,age,description)values('"+name+"',"+age+",'"+description+"')";  //注意拼接的格式
 76             Statement state = connection.createStatement();
 77             state.executeUpdate(sql);
 78             state.close();
 79             connection.close();
 80             System.out.println("success.");
 81             
 82             
 83         } catch (ClassNotFoundException e) {
 84             e.printStackTrace();
 85         } catch (SQLException e) {
 86             e.printStackTrace();
 87         }
 88         
 89     }
 90     
 91 
 92   //方法:更新資料
 93     public static void update(){
 94         try {
 95             Class.forName(DRIVER);
 96             Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
 97             String sql = "update person set age=24 where id=1";
 98             Statement state = connection.createStatement();
 99             state.executeUpdate(sql);
100             state.close();
101             connection.close();
102             System.out.println("update success");
103         } catch (ClassNotFoundException e) {
104             e.printStackTrace();
105         } catch (SQLException e) {
106             e.printStackTrace();
107         }
108     }
109     
110     
111     //方法:刪除操作
112     public static void delete(){
113         try {
114             Class.forName(DRIVER);
115             Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
116             String sql = "delete from person where id=1";
117             Statement state = connection.createStatement();
118             state.executeUpdate(sql);
119             state.close();
120             connection.close();
121             System.out.println("delete success");
122         } catch (ClassNotFoundException e) {
123             e.printStackTrace();
124         } catch (SQLException e) {
125             e.printStackTrace();
126         }
127     }    
128 
129 }