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/
上圖中,選擇“Connector/J”的版本進行下載,彈出下一個介面,讓我們選擇平臺來下載:如果選擇windows平臺,介面如下:
如果選擇跨平臺,介面會變成下面的這個樣子:
上圖中,第一個版本是Linux平臺的壓縮包,第二個是Windows平臺中的壓縮包,那我們選擇上圖中的紅框部分進行下載:
上圖中,不用註冊,直接下載。下載完成後,解壓:
上圖中,紅框部分的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) );
建立的空表如下:
緊接著匯入資料庫驅動包:
開啟eclipse,新建Java工程JDBC01,然後在根目錄下新建一個資料夾libs:
然後複製之前下載的驅動包mysql-connector-java-5.1.33-bin.jar,貼上到libs目錄下,然後到了最關鍵的一步:將該Java包新增到工程的Build path中,操作如下圖:
如果生效之後,就會多出一個檔案出來:(下圖中的箭頭處)
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類,作為主程式:
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 }
注意程式在導包時,匯入的是下面的這些包:
程式碼解釋:
15行的url代表連線接資料庫的地址。命名格式統一如下:url = "jdbc:mysql://ip地址:埠號/資料庫名字"。如果是本機的話,IP地址可以寫成localhost。
17行、19行:指的是資料庫的使用者名稱和密碼。如果輸入錯誤,會報錯如下:
21行:我們所載入的驅動程式類的名字是:com.mysql.jdbc.Driver,其實它就指的就是jar包中的com.mysql/jdbc/Driver.class檔案。
程式執行成功後,後臺會輸出:
我們再去資料庫看一下,發現數據真的填充進去了:
終於實現了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+" ')";
執行之後,效果如下:
其實這種拼接的方式很不好:既麻煩又不安全。資料庫的查詢操作以及詳細解釋將在下篇文章中學習到,加油!!!
哦,對了,最後再貼一下上方所有程式碼的完整版:
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 }