【原创】JDBC基础之(三)封装JDBC通用工具类

2020-04-17 20:52发布

JDBC基础之(三)封装JDBC通用工具类

一、为何要封装JDBC通用工具类

任何一个Java应用程序使用JDBC访问数据库时,都会按步骤来操作数据库:

1、加载JDBC驱动程序

2建立Java程序与数据库之间的连接

3、创建执行SQL命令语句对象,并将SQL命令发送到数据库执行

4接收数据库执行SQL命令后返回的结果,并处理执行结果

5、关闭Java程序与数据库之间的连接

其间,每次执行SQL语句,都会反复“加载驱动、创建连接、创建语句对象、关闭连接、释放资源”,并写一些重复的代码,增加了代码的冗余程度,降低了代码的可读性和易维护性。若能将通用的代码封装在一个工具类中,将访问数据库的流程抽象出来,仅仅在工具类中提供几个实用的静态方法来操作数据库,对外部应用程序屏蔽了连接数据库、创建语句对象、关闭连接等操作,这样,Java程序每次需要访问数据库时,只需要调用工具类中的方法即可,而无需反复写一些繁琐的代码,可以提高代码的可复用性,降低冗余度,方便应用程序的调用,提高程序的开发效率。

二、封装JDBC工具类的前期准备

1、从官网下载MySQLJDBC驱动程序

目前常用的MySQL数据库的JDBC驱动程序有5.*版本和8.*两个版本,二者在使用时,配置上略有不同,可以选择其中任意一个版本使用,不能两个版本同时使用。

版本5下载地址:

https://dev.mysql.com/downloads/connector/j/5.1.html

版本8下载地址:

https://dev.mysql.com/downloads/connector/j/

下载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包放在Projectlib文件夹下,并加载到Project中。

3、JDBC准备数据库和数据表

MySQL数据库中创建一个数据库20200320javatest,并在其中新建一张数据表goods,数据表结构如下:

4、JDBC准备存储过程

在数据库20200320javatest中创建存储过程addGoodsqueryGoods

 

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类,代码如下:

public class Goods {

private String goodsID;

private String gname;

private String brand;

private String category;

private double price;

private String picture;

private String feature;

private String newIdt;

private Timestamp shelftDate;

 

public Goods() {

super();

}

 

public Goods(String goodsID, String gname, String brand, String category, double price, String picture,String feature, String newIdt, Timestamp shelftDate) {

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;

}

 

public String getGoodsID() {

return goodsID;

}

 

public void setGoodsID(String goodsID) {

this.goodsID = goodsID;

}

 

public String getGname() {

return gname;

}

 

public void setGname(String gname) {

this.gname = gname;

}

 

public String getBrand() {

return brand;

}

 

public void setBrand(String brand) {

this.brand = brand;

}

 

public String getCategory() {

return category;

}

 

public void setCategory(String category) {

this.category = category;

}

 

public double getPrice() {

return price;

}

 

public void setPrice(double price) {

this.price = price;

}

 

public String getPicture() {

return picture;

}

 

public void setPicture(String picture) {

this.picture = picture;

}

 

public String getFeature() {

return feature;

}

 

public void setFeature(String feature) {

this.feature = feature;

}

 

public String getNewIdt() {

return newIdt;

}

 

public void setNewIdt(String newIdt) {

this.newIdt = newIdt;

}

 

public Timestamp getShelftDate() {

return shelftDate;

}

 

public void setShelftDate(Timestamp shelftDate) {

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);

}