天天看點

mysql jdbc 封裝類_【原創】JDBC基礎之(三)封裝JDBC通用工具類

JDBC基礎之(三)封裝JDBC通用工具類

一、為何要封裝JDBC通用工具類

任何一個Java應用程式使用JDBC通路資料庫時,都會按步驟來操作資料庫:

1、加載JDBC驅動程式

2、建立Java程式與資料庫之間的連接配接

3、建立執行SQL指令的語句對象,并将SQL指令發送到資料庫執行

4、接收資料庫執行SQL指令後傳回的結果,并處理執行結果

5、關閉Java程式與資料庫之間的連接配接

其間,每次執行SQL語句,都會反複“加載驅動、建立連接配接、建立語句對象、關閉連接配接、釋放資源”,并寫一些重複的代碼,增加了代碼的備援程度,降低了代碼的可讀性和易維護性。若能将通用的代碼封裝在一個工具類中,将通路資料庫的流程抽象出來,僅僅在工具類中提供幾個實用的靜态方法來操作資料庫,對外部應用程式屏蔽了連接配接資料庫、建立語句對象、關閉連接配接等操作,這樣,Java程式每次需要通路資料庫時,隻需要調用工具類中的方法即可,而無需反複寫一些繁瑣的代碼,可以提高代碼的可複用性,降低備援度,友善應用程式的調用,提高程式的開發效率。

二、封裝JDBC工具類的前期準備

1、從官網下載下傳MySQL的JDBC驅動程式

目前常用的MySQL資料庫的JDBC驅動程式有5.*版本和8.*兩個版本,二者在使用時,配置上略有不同,可以選擇其中任意一個版本使用,不能兩個版本同時使用。

版本5下載下傳位址:

版本8下載下傳位址:

下載下傳zip驅動程式包,下載下傳後解壓縮,并找到:

mysql-connector-java-*.jar檔案包,即:

mysql-connector-java-5.1.48.jar

mysql-connector-java-8.0.19.jar

2、将JDBC驅動程式導入Java Project中

使用JDBC通路資料庫之前,需要将JDBC驅動程式導入Java工程中,将驅動程式jar包放在Project的lib檔案夾下,并加載到Project中。

mysql jdbc 封裝類_【原創】JDBC基礎之(三)封裝JDBC通用工具類

3、為JDBC準備資料庫和資料表

在MySQL資料庫中建立一個資料庫20200320javatest,并在其中建立一張資料表goods,資料表結構如下:

mysql jdbc 封裝類_【原創】JDBC基礎之(三)封裝JDBC通用工具類

4、為JDBC準備存儲過程

在資料庫20200320javatest中建立存儲過程addGoods和queryGoods。

addGoods向資料表goods中插入一條商品資料:

DELIMITER //

CREATE PROCEDURE addGoods

(IN igoodsID VARCHAR(8), IN igname VARCHAR(128), IN ibrand VARCHAR(4),

IN icategory VARCHAR(4), IN iprice DOUBLE, OUT iCount INT)

BEGIN

INSERT INTO goods(goodsID, gname, brand, category, price)

VALUES(igoodsID, igname, ibrand, icategory, iprice);

SELECT COUNT(1) INTO iCount FROM goods g WHERE g.goodsID = igoodsID;

END//

DELIMITER ;

queryGoods根據商品名稱模糊查詢商品資料:

DELIMITER //

CREATE PROCEDURE queryGoods(IN igname VARCHAR(128))

BEGIN

SELECT g.* FROM goods g WHERE g.gname LIKE igname;

END//

DELIMITER ;

5、為JDBC建立資料庫連接配接參數屬性檔案

建立包含資料庫連接配接參數的屬性檔案jdbc.properties,其内容如下:

driver = com.mysql.cj.jdbc.Driver

url = jdbc:mysql://localhost:3306/20200320javatest?serverTimezone=UTC

user = root

password = root

6、為資料表建立對應的實體Bean

實體Bean是一個可重用的類,常常用于表示永久性資料,是可以存儲在持久存儲媒體上的持久對象,實體Bean的狀态儲存在資料庫中。

一般情況下,一個實體Bean對應着資料庫中的一張表,實體Bean中的屬性對應資料表中的字段,并定義為private通路權限;每一個屬性通過一對getter()和setter()方法對外提供通路;實體Bean中需要提供無參構造器,也可以提供帶參構造器;一個實體Bean的執行個體對應着資料表中的一條記錄。例如:實體Bean Goods對應資料庫中的資料表Goods,一個Goods對象對應着Goods表中的一條記錄。

在Java Project中,建立一個Goods類,代碼如下:

publicclassGoods {

privateStringgoodsID;

privateStringgname;

privateStringbrand;

privateStringcategory;

privatedoubleprice;

privateStringpicture;

privateStringfeature;

privateStringnewIdt;

privateTimestampshelftDate;

publicGoods() {

super();

}

publicGoods(StringgoodsID, Stringgname, Stringbrand, Stringcategory,doubleprice, Stringpicture,Stringfeature, StringnewIdt, TimestampshelftDate) {

super();

this.goodsID=goodsID;

this.gname=gname;

this.brand=brand;

this.category=category;

this.price=price;

this.picture=picture;

this.feature=feature;

this.newIdt=newIdt;

this.shelftDate=shelftDate;

}

publicString getGoodsID() {

returngoodsID;

}

publicvoidsetGoodsID(StringgoodsID) {

this.goodsID=goodsID;

}

publicString getGname() {

returngname;

}

publicvoidsetGname(Stringgname) {

this.gname=gname;

}

publicString getBrand() {

returnbrand;

}

publicvoidsetBrand(Stringbrand) {

this.brand=brand;

}

publicString getCategory() {

returncategory;

}

publicvoidsetCategory(Stringcategory) {

this.category=category;

}

publicdoublegetPrice() {

returnprice;

}

publicvoidsetPrice(doubleprice) {

this.price=price;

}

publicString getPicture() {

returnpicture;

}

publicvoidsetPicture(Stringpicture) {

this.picture=picture;

}

publicString getFeature() {

returnfeature;

}

publicvoidsetFeature(Stringfeature) {

this.feature=feature;

}

publicString getNewIdt() {

returnnewIdt;

}

publicvoidsetNewIdt(StringnewIdt) {

this.newIdt=newIdt;

}

publicTimestamp getShelftDate() {

returnshelftDate;

}

publicvoidsetShelftDate(TimestampshelftDate) {

this.shelftDate=shelftDate;

}

}

三、封裝JDBC工具類

public class JDBCUtils {

static private String driver;

static private String url;

static private String user;

static private String password;

static {

try {

getDBParams();

} catch (ClassNotFoundException | IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

// 擷取資料庫連接配接初始參數,加載資料庫驅動程式

static private void getDBParams() throws IOException, ClassNotFoundException {

Properties prop = new Properties();

prop.load(JDBCUtils.class.getClassLoader().getResourceAsStream("config/jdbc.properties"));

url = prop.getProperty("url");

user = prop.getProperty("user");

password = prop.getProperty("password");

Driver = prop.getProperty("driver");

Class.forName(driver);

}

// 擷取連接配接

static public Connection getConnection() throws SQLException {

return DriverManager.getConnection(url, user, password);

}