廢話不多說,直接進入主題!
爲了簡化jdbc的操作,就有了DBUtils, 使用它需要用到連接池技術,DBUtils底層自己在維護連接Connection,本例子中使用C3P0連接池,C3P0連接池的使用可以參考 “C3P0連接池”一文
使用前導入jar包:
下面直接上代碼
import java.sql.SQLException;
import javax.management.Query;
import org.apache.commons.dbutils.QueryRunner;
import cn.liyu.utils.C3P0Utils;
public class DBUtilsTest {
//DBUtils使用案例 本案例使用C3P0連接池獲取 DataSource
public static void main(String[] args) {
try {
QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource());
//因爲增刪改 都是使用update 所以只對增加進行演示
//這裏使用預編譯的寫法,?爲佔位符
String sql = "INSERT INTO myshop (Id,name) values(?,?)";
Object[] param = {2,"電腦"};
//update方法返回int型 要是插入成功 則返回條數,可以用來判斷
int result = queryRunner.update(sql, param);
if(result > 0){
System.out.println("插入成功");
}else{
System.out.println("插入失敗");
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
測試後發現沒問題,這就是DBUtils的簡單使用,相對於增刪改操作,查詢操作就會複雜一些,query方法有一個參數爲 ResultSetHandle類型 關於這個參數我這裏粘貼一份說明文檔,來詳細解釋下,最後還會貼出具體使用代碼
ResultSetHandle類型說明見下圖:
接下來我們就來看代碼,來具體使用一下
我們首先來使用一下 其中的 BeanHandle 來操作一下
import java.sql.SQLException;
import javax.management.Query;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import cn.liyu.domain.Myshop;
import cn.liyu.utils.C3P0Utils;
//通過ID 查找一條數據,並且使用了javaBean
public class DBUtilsTest {
//DBUtils使用案例 本案例使用C3P0連接池獲取 DataSource
@SuppressWarnings("deprecation")
public static void main(String[] args) {
try {
QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource());
StringBuffer sql = new StringBuffer();
sql.append(" SELECT * FROM myshop WHERE Id=? ");
Object[] params = {2};
Myshop myshop = queryRunner.query(sql.toString(),params, new BeanHandler<Myshop>(Myshop.class));
System.out.println("id:"+myshop.getId()+"name:"+myshop.getName());
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
結果如下圖
接下來我們使用下BeanListHandle
import java.sql.SQLException;
import java.util.List;
import javax.management.Query;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import cn.liyu.domain.Myshop;
import cn.liyu.utils.C3P0Utils;
//使用BeanListHandle,並且使用了javaBean
public class DBUtilsTest {
//DBUtils使用案例 本案例使用C3P0連接池獲取 DataSource
@SuppressWarnings("deprecation")
public static void main(String[] args) {
try {
QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource());
StringBuffer sql = new StringBuffer();
sql.append(" SELECT * FROM myshop ");
Object[] params = {};
List<Myshop> myshopList = queryRunner.query(sql.toString(),params, new BeanListHandler<Myshop>(Myshop.class));
for(Myshop myshop : myshopList){
System.out.println("id:"+myshop.getId()+"name:"+myshop.getName());
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
結果如下圖
我們接下來再使用下 ScalarHandler 這個主要用於取單數據,比如分頁時的總條數
接下來我們看示例代碼
import java.sql.SQLException;
import java.util.List;
import javax.management.Query;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import cn.liyu.domain.Myshop;
import cn.liyu.utils.C3P0Utils;
//ScalarHandler
public class DBUtilsTest {
//DBUtils使用案例 本案例使用C3P0連接池獲取 DataSource
@SuppressWarnings("deprecation")
public static void main(String[] args) {
try {
QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource());
StringBuffer sql = new StringBuffer();
sql.append(" SELECT count(id) FROM myshop ");
Object[] params = {};
Long count = (Long)queryRunner.query(sql.toString(),params, new ScalarHandler());
System.out.println(count);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
結果如下
但是在做項目的時候,也可能會用到 MapListHandler,接下來 ,我們看看示例代碼
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import javax.management.Query;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import cn.liyu.domain.Myshop;
import cn.liyu.utils.C3P0Utils;
public class DBUtilsTest {
//DBUtils使用案例 本案例使用C3P0連接池獲取 DataSource
@SuppressWarnings("deprecation")
public static void main(String[] args) {
try {
QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource());
StringBuffer sql = new StringBuffer();
sql.append(" SELECT * FROM myshop ");
Object[] params = {};
List<Map<String, Object>> list = queryRunner.query(sql.toString(),params, new MapListHandler());
System.out.println(list);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
結果如下
至此DBUtils的一些基本使用就結束了。