DBUtils基礎使用

廢話不多說,直接進入主題!
爲了簡化jdbc的操作,就有了DBUtils, 使用它需要用到連接池技術,DBUtils底層自己在維護連接Connection,本例子中使用C3P0連接池,C3P0連接池的使用可以參考 “C3P0連接池”一文

使用前導入jar包:
導入DBUtils包

下面直接上代碼

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

結果如下圖
beanlistHandler結果

我們接下來再使用下 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);
        }
    }
}

結果如下
ScalarHandler

但是在做項目的時候,也可能會用到 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的一些基本使用就結束了。

發佈了36 篇原創文章 · 獲贊 65 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章