【聲明】
歡迎轉載,但請保留文章原始出處→_→
生命壹號:http://www.cnblogs.com/smyhvae/
文章來源:http://www.cnblogs.com/smyhvae/p/4050825.html
【正文】
一、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 }
















