MySQL---第三方工具---dbutils
阿新 • • 發佈:2018-12-11
Apache的工具包:commons-dbutils-1.4.jar
玩轉DBUtils工具,主要是一個類和一個介面:
-
QueryRunner類---用於執行sql,且主要使用它內部的兩個方法: query(), update(), 還有一個不常用的batch()方法。
-
ResultSetHandler介面 ----用於幫助我們封裝結果資料的。
程式碼演示
package cn.hncu.dbUtils; import java.sql.Connection; import java.sql.SQLException; import java.util.List; import java.util.Map; import javax.sql.DataSource; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.ext.ExtQueryRunner; import org.apache.commons.dbutils.handlers.BeanListHandler; import org.apache.commons.dbutils.handlers.MapListHandler; import org.apache.commons.dbutils.handlers.ScalarHandler; import org.junit.Test; import cn.hncu.dbPool.c3p0.C3p0Utils; import cn.hncu.domain.Pet; import cn.hncu.domain.Student; /** *   演示Apache的工具包:commons-dbutils-1.4.jar<hr/> * <b>玩轉DBUtils工具,主要是一個類和一個介面:</b><br/> *   1. QueryRunner類---用於執行sql,且主要使用它內部的兩個方法: query(), update(), 還有一個不常用的batch()方法。<br/> *   2. ResultSetHandler介面 ----用於幫助我們封裝結果資料的。 * <br/><br/><b>CreateTime:</b><br/>    2018年9月23日 下午2:52:16 * @author 宋進宇 <a href='mailto:
[email protected]'>[email protected]</a> */ public class DBUtilsDemo { //查詢並封裝成 List<Map<String, Object>> 形式 @Test public void query1() throws SQLException { //獲取連線池 DataSource ds = C3p0Utils.getDataSource(); //獲取查詢執行器 QueryRunner qr = new QueryRunner(ds); List<Map<String, Object>> list = qr.query("select * from student", new MapListHandler()); System.out.println(list); } //查詢並封裝成 List<Bean> 形式 @Test public void query2() throws SQLException { //獲取連線池 DataSource ds = C3p0Utils.getDataSource(); //獲取查詢執行器 QueryRunner qr = new QueryRunner(ds); List<Student> list = qr.query( "select * from student", new BeanListHandler<Student>(Student.class) ); System.out.println(list); } //查詢並封裝單值,如count(1)、max(age)等 @Test public void query3() throws SQLException { //獲取連線池 DataSource ds = C3p0Utils.getDataSource(); //獲取查詢執行器 QueryRunner qr = new QueryRunner(ds); Object count = qr.query("select count(1) from student", new ScalarHandler()); System.out.println( count ); } //PreparedStatement形式查詢 @Test public void query4() throws SQLException { //獲取連線池 DataSource ds = C3p0Utils.getDataSource(); //獲取查詢執行器 QueryRunner qr = new QueryRunner(ds); List<Map<String, Object>> query = qr.query("select * from student where name=?", new MapListHandler(),"Alice"); System.out.println( query ); } //模糊查詢 @Test public void query5() throws SQLException { //獲取連線池 DataSource ds = C3p0Utils.getDataSource(); //獲取查詢執行器 QueryRunner qr = new QueryRunner(ds); List<Map<String, Object>> query = qr.query( "select * from student where name like '%a%'", new MapListHandler() ); System.out.println( query ); } ///////////下面演示增、刪、改---update////////////// @Test//增加 1 public void add() throws SQLException { //獲取連線池 DataSource ds = C3p0Utils.getDataSource(); //獲取查詢執行器 QueryRunner qr = new QueryRunner(ds); qr.update("insert into student(id,name) values('A001','Rose')"); } @Test//增加 2 public void add2() throws SQLException { //獲取連線池 DataSource ds = C3p0Utils.getDataSource(); //獲取查詢執行器 QueryRunner qr = new QueryRunner(ds); qr.update("insert into student(id,name) values(?,?)","A002","Bob"); } @Test//刪除 public void del() throws SQLException { //獲取連線池 DataSource ds = C3p0Utils.getDataSource(); //獲取查詢執行器 QueryRunner qr = new QueryRunner(ds); qr.update("delete from student where id=? ","A002"); } @Test//修改 public void update() throws SQLException { //獲取連線池 DataSource ds = C3p0Utils.getDataSource(); //獲取查詢執行器 QueryRunner qr = new QueryRunner(ds); qr.update("update student set name=? where id=? ","張飛","A001"); } ////////////下面演示事務---針對於update,因為查詢沒有什麼事務可言///////////// @Test public void transaction(){ //注意1:採用空參的構造方法 QueryRunner qr = new QueryRunner(); Connection con = null; try { //注意2:獲取一個連線 con = C3p0Utils.getConnection(); con.setAutoCommit( false ); //開啟事務 //注意3:把獲取的連線做為引數,讓qr通過 con 去執行sql語句。 qr.update(con, "insert into student(id,name) values(?,?)", "B001","Mike"); //下面這一句故意讓id為'A001'就是為了演示事務回滾 qr.update(con, "insert into student(id,name) values(?,?)", "A001","劉備"); con.commit(); //提交事務 System.out.println("事務提交了..."); } catch (SQLException e) { try { con.rollback(); //事務回滾 System.out.println("事務回滾了..."); } catch (SQLException e1) { e1.printStackTrace(); } } finally { if( con != null ) { try { //還原設定 con.setAutoCommit(true); //關閉連線 con.close(); } catch (SQLException e) { e.printStackTrace(); } } } } //演示批量處理 @Test public void batch() throws SQLException { //獲取連線池 DataSource ds = C3p0Utils.getDataSource(); //獲取查詢執行器 QueryRunner qr = new QueryRunner(ds); for ( int i = 1; i<=100; i++ ) { Object[][] params = { {"小白"+i,"黑色"+i}, {"小黃"+i,"黃色"+i}, {"小狼"+i,"藍色"+i} }; //一次批量處理,處理3條,總共執行了100次批量處理 qr.batch("insert into pet(name,color) values(?,?)",params ); } } ///////下面演示DBUtils擴充套件包功能,需要jar包:commons-dbutils-ext.jar//////// //查詢 @Test //技術入口:ExtQueryRunner類 public void extQuery() { //獲取擴充套件的查詢執行器 ExtQueryRunner eqr = new ExtQueryRunner(C3p0Utils.getDataSource()); List<Pet> list = eqr.query(Pet.class); System.out.println( list ); } //增、刪、改 @Test public void extUpdate() { //獲取擴充套件的查詢執行器 ExtQueryRunner eqr = new ExtQueryRunner(C3p0Utils.getDataSource()); Pet pet = new Pet(); pet.setName("小黑"); pet.setColor("白色"); eqr.save(pet); } }