1.DBUtils封裝了對JDBC的操作,簡化了JDBC操作,可以減少代碼量。
2.Dbutils三個核心功能
- QueryRunner中提供對sql語句操作(update,query)
- ResultSetHandler接口,用於定義select操作後,封裝結果集
DbUtils類,它就是一個工具類,定義了關閉資源與事務處理的方法
3.QueryRunner類
QueryRunner類提供數據源(連接池),DButils底層自動維護連接connection。
1.update(String sql, Object... params)執行更新數據(可變參數)
2.query(String sql, ResultSetHandler<T> rsh,Object... params)執行查詢(可變參數)
4.ResultSetHandler 結果集處理類
- ArrayHandler 將結果集中的第一條記錄封裝到一個Object[]數組中,數組中的每一個元素就是這條記錄中的每一個字段的值(只獲取一條數據)。
- ArrayListHandler 將結果集中的每一條記錄都封裝到一個Object[]數組中,將這些數組在封裝到List集合中。
- BeanHandler 將結果集中第一條記錄封裝到一個指定的javaBean中。
- BeanListHandler 將結果集中每一條記錄封裝到指定的javaBean中,將這些javaBean在封裝到List集合中。
- 其他詳見dbutils API。
5.代碼實現
package lesson15_jdbc; import com.mchange.v2.c3p0.ComboPooledDataSource; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.ArrayHandler; import org.apache.commons.dbutils.handlers.ArrayListHandler; import org.apache.commons.dbutils.handlers.BeanHandler; import org.apache.commons.dbutils.handlers.BeanListHandler; import java.util.List; import java.sql.SQLException; import java.util.Arrays; public class jdbc_FZ3 { //單個查詢 ArrayHandler public static void chaXun(){ try{ //連接數據庫 ComboPooledDataSource ds=new ComboPooledDataSource(); //創建QueryRnner QueryRunner qr=new QueryRunner(ds); //sql語句 String sql="select * from 1_mytable1"; //query執行sql語句 Object[] query=qr.query(sql,new ArrayHandler()); //執行結果 System.out.println(Arrays.toString(query)); ds.close(); }catch (SQLException e){ e.printStackTrace(); } } //多個查詢 (ArrayListHandler) public static void chaXunAll(){ try { //連接到數據庫 ComboPooledDataSource ds = new ComboPooledDataSource(); //創建QueryRunner QueryRunner qr = new QueryRunner(ds); //sql語句 String sql = "select * from 1_mytable1"; //query執行sql語句 List<Object[]> query = qr.query(sql, new ArrayListHandler()); //查詢結果 for (Object[] item : query){ System.out.println(Arrays.toString(item)); } }catch (SQLException e){ e.printStackTrace(); } } //封裝到javabean中 public static void chaxun2(){ try { ComboPooledDataSource ds = new ComboPooledDataSource(); QueryRunner qr = new QueryRunner(ds); String sql = "select * from 1_mytable1"; Info query = qr.query(sql, new BeanHandler<>(Info.class)); String name=query.getName(); int age=query.getAge(); String gender=query.getGender(); System.out.println(name+"->"+age+"->"+gender); ds.close(); }catch (SQLException e){ e.printStackTrace(); } } //多個查詢 (BeanListHandler) public static void chaXunAll2(){ try{ ComboPooledDataSource ds=new ComboPooledDataSource(); QueryRunner qr=new QueryRunner(ds); String sql="select * from 1_mytable1"; List<Info> query=qr.query(sql,new BeanListHandler<>(Info.class)); for (Info item:query){ String name=item.getName(); int age = item.getAge(); String gender=item.getGender(); System.out.println(name+"->"+age+"->"+gender); } ds.close(); }catch (SQLException e){ e.printStackTrace(); } } //插入 public static void insert(){ ComboPooledDataSource ds=new ComboPooledDataSource(); QueryRunner qr=new QueryRunner(ds); String sql="insert into 1_mytable1(name,age,gender) values(?,?,?)"; try{ int i=qr.update(sql,"三少爺",45,"男"); System.out.println(i); }catch (SQLException e){ e.printStackTrace(); } } public static void main(String[] args) { chaXun(); insert(); } }5.輸入中文亂碼問題,設置java文件編碼,sql與jdbc連接的編碼,sql數據庫的編碼統一爲utf-8即可解決。