DbUtils簡介
根據官網的介紹,DbUtils是一種 JDBC Utility Component (翻譯過來大概就是:JDBC實用部件),故名思意,和數據庫操作有關
官網上的簡介也稱之為 JDBC helper library ,由此可知,DbUtils是一個工具類庫,用來進行數據庫通信的
用法
官方原文:The core classes/interfaces in DbUtils are QueryRunner and ResultSetHandler(在 DbUtils 中的核心類/接口為 QueryRunner 和 ResultSetHandler)
所以,我們需要掌握這兩個類的使用,這篇文章先闡述第一個類
QueryRunner
QueryRunner中一共有6種方法:
- execute(執行SQL語句)
- batch(批量處理語句)
- insert(執行INSERT語句)
- insertBatch(批量處理INSERT語句)
- query(SQL中 SELECT 語句)
- update(SQL中 INSERT, UPDATE, 或 DELETE 語句)
我們主要介紹最后兩種(最常用):
源碼:
query方法
-
T query(String sql, ResultSetHandler rsh)
不需要替換參數來執行已給予的 SELECT語句 -
-
T query(String sql, ResultSetHandler rsh, Object... params)
需要一個或多個替換參數來執行已給予的 SELECT語句,並返回一種對象結果
-
update方法
-
int update(Connection conn, String sql)
不需要替換參數來執行INSERT, UPDATE
DELETE語句 -
int update(Connection conn, String sql, Object... params)
需要一個或多個替換參數以及一個數據庫連接來執行INSERT, UPDATE
DELETE語句 -
int update(Connection conn, String sql, Object param)
需要一個替換參數,以及一個數據庫連接來執行INSERT, UPDATE
DELETE語句 -
int update(String sql)
不需要替換參數來執行已給予的INSERT, UPDATE
DELETE語句 -
int update(String sql, Object... params)
需要一個或多個替換參數來執行INSERT, UPDATE
DELETE語句(參數無需帶有連接) -
int update(String sql, Object param)
不需要替換參數來執行INSERT, UPDATE
DELETE語句(參數無需帶有連接)
Demo
1. 建表
2. 數據源
我們采用上次配置的c3p0-config.xml文件,只是將數據庫名稱改為test:
然后配置數據源:
//獲取數據源
private static ComboPooledDataSource dataSource = new ComboPooledDataSource();
//QueryRunner需要一個數據源作為參數
private static QueryRunner queryRunner = new QueryRunner(dataSource);
###### 3. 添加信息
//添加紀錄
private static void add(){
String id, name, gender;
for (int i = 0; i < 10; i++) {
id = String.valueOf(i);
name = "name" + String.valueOf(i);
gender = i % 2 == 0 ? "male" : "female";
try{
String sql = "INSERT INTO test VALUES(?,?,?);";
Object[] params = {id, name, gender};
queryRunner.update(sql, params);
}catch(SQLException e){
throw new RuntimeException(e);
}
}
}
執行完添加操作后,在MySQL Workbench中查詢的結果顯示,數據已添加:
4. 編輯信息以及刪除信息
編輯信息:
//按照給定ID編輯信息
private static void edit(String id){
try{
String sql = "UPDATE test SET name = ?, gender = ? WHERE id = ?;";
Object[] params = {"change", "female", id};
queryRunner.update(sql,params);
}catch (SQLException e){
throw new RuntimeException(e);
}
}
public static void main(String[] args){
edit("0");
}
編輯結果:
刪除信息:
//按照給定ID刪除信息
private static void delete(String id){
try{
String sql = "DELETE FROM test WHERE id = ?";
queryRunner.update(sql, id);
}catch (SQLException e){
throw new RuntimeException(e);
}
}
public static void main(String[] args){
delete("0");
}
刪除結果:
5. 查看所有信息
在使用 query 方法時,需要使用 ResultSetHandler, 具體使用方式將在另一篇文章中闡述
將查詢的結果,使用 ArrayListHandler,存入ArrayList,以數組形式打印:
private static void showAll(){
try{
String sql = "SELECT * FROM test;";
List<Object[]> list = queryRunner.query(sql, new ArrayListHandler());
for (Object[] aList : list) {
System.out.println(Arrays.toString(aList) + " ");
}
}catch (SQLException e){
throw new RuntimeException(e);
}
}
關於QueryRunner對數據庫的CRUD操作就介紹到此了。