Java操作資料庫方式二DBCP使用詳解
阿新 • • 發佈:2019-02-09
##概述
DBCP的全稱是:DataBase connection pool,翻譯是:資料庫連線池。
在Java操作資料庫方式一JDBC使用詳解中說到直接使用JDBC非常消耗資源。為了避免頻繁關閉連結資料庫,所以出現了DBCP。
DBCP的工作原理是:首先通過連線池預先同資料庫建立一些連線,放在記憶體中,應用程式需要建立資料庫連線時直接到連線池中取出,用完後再放回去,從而避免繁關閉連結資料庫,減少資源的消耗。
DBCP是 apache 的一個開源工具。
##準備工作
在使用JDBC連線資料庫之前,首先要有資料庫,資料庫要建立表。我的資料庫資訊如下:
- 資料庫型別:MySql。
- 資料庫名字:xia。
- 使用者名稱:root。
- 密碼:root.
- 建立資料庫表student。
create table student(
id int primary key auto_increment,
name varchar(20),
age int
);
##開發環境
- 作業系統:MACOS。
- 開發工具:IntelliJ IDEA。
- Java版本:jdk1.8。
- 使用maven管理jar包。
##正式開發
一,在pom.xml檔案中引入需要jar的依賴
<!--mysql驅動,由於DBCP封裝的JDBC,所以仍然需要mysql驅動包--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>6.0.6</version> </dependency> <!--<!– dbcp包 –>--> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.4</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-dbutils/commons-dbutils --> <dependency> <groupId>commons-dbutils</groupId> <artifactId>commons-dbutils</artifactId> <version>1.4</version> </dependency>
二,得到DataSource物件
public class DBCPUtils { private static BasicDataSource dataSource; static { dataSource = new BasicDataSource(); //基本設定 dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUrl("jdbc:mysql://localhost:3306/xia"); dataSource.setUsername("root"); dataSource.setPassword("root"); //高階設定 dataSource.setInitialSize(10);//初始化連線 dataSource.setMinIdle(5);//最小空閒連線 dataSource.setMaxIdle(20);//最大空閒連線 dataSource.setMaxActive(50);//最大連線數量 dataSource.setMaxWait(1000);//超時等待時間以毫秒為單位 } /** * 獲取DataSource物件 * @return */ public static DataSource getDataSource() { return dataSource; } }
三,插入操作
public static boolean insertStudent(Student student) {
try {
//1,得到dataSource物件,
DataSource dataSource = DBCPUtils.getDataSource();
//2,得到QueryRunner物件
QueryRunner queryRunner = new QueryRunner(dataSource);
//3,執行插入操作sql
queryRunner.update("insert into student (name,age) values(?,?)", student.getName(), student.getAge());
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
四,根據id查詢單個物件
public static Student selectStudent(int id) {
try {
//1,得到dataSource物件,
DataSource dataSource = DBCPUtils.getDataSource();
//2,得到QueryRunner物件
QueryRunner queryRunner = new QueryRunner(dataSource);
//3,執行查詢作sql
Student student = queryRunner.query("select id,name,age from student where id=?", new BeanHandler<>(Student.class), id);
return student;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
五,根據其他條件得到物件集合
public static List<Student> selectUserList(int age) {
try {
//1,得到dataSource物件,
DataSource dataSource = DBCPUtils.getDataSource();
//2,得到QueryRunner物件
QueryRunner queryRunner = new QueryRunner(dataSource);
//3,執行查詢作sql
List<Student> studentList = queryRunner.query("select id,name,age from student where age=?", new BeanListHandler<>(Student.class), age);
return studentList;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
六,更新操作
public static boolean updateStudent(Student student) {
try {
//1,得到dataSource物件,
DataSource dataSource = DBCPUtils.getDataSource();
//2,得到QueryRunner物件
QueryRunner queryRunner = new QueryRunner(dataSource);
//3,執行更新操作sql
queryRunner.update("update student set age = ? where id = ?", student.getAge(), student.getId());
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
七,刪除操作
public static boolean deleteStudent(int id) {
try {
//1,得到dataSource物件,
DataSource dataSource = DBCPUtils.getDataSource();
//2,得到QueryRunner物件
QueryRunner queryRunner = new QueryRunner(dataSource);
//3,執行刪除操作sql
queryRunner.update("delete from student where id = ?", id);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
##使用配置檔案配置資料庫引數
在實際開發中我們通常建立一個properties配置檔案,然後把資料庫引數都放在配置檔案中,這樣便於資料庫引數的管理,當資料庫引數變化時可以快速找到配置檔案然後進行修改。
在resource目錄下建立dbcpconfig.properties檔案,檔案目錄位置如下:
檔案內容如下:
#連線設定
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/xia
username=root
password=root
#初始化連線
initialSize=10
#最大連線數量
maxActive=50
#最大空閒連線
maxIdle=20
#最小空閒連線
minIdle=5
此時得到DataSource物件的程式碼如下:public class DBCPUtils {
private static DataSource dataSource;
static {
try {
InputStream in = DBCPUtils.class.getClassLoader().getResourceAsStream("dbcpconfig.properties");
Properties props = new Properties();
props.load(in);
dataSource = BasicDataSourceFactory.createDataSource(props);
} catch (Exception e) {
e.printStackTrace();
throw new ExceptionInInitializerError(e);
}
}
/**
* 獲取DataSource物件
* @return
*/
public static DataSource getDataSource() {
return dataSource;
}
}
其他增刪改成操作的程式碼依舊與上面同。##總結
一,使用DBCP的重點是獲取DataSource物件,然後再建立QueryRunner物件,然後就可以進行增刪改查操作。二,使用DBCP不僅可以節約資源,而且可以直接將查詢結果封裝成物件,方便使用。三,在實際開發中建議使用properties配置檔案。