1. 程式人生 > >使用DButils對資料庫進行操作

使用DButils對資料庫進行操作

一、DButils       commons-dbutils是阿帕奇(Apache)提供的一個開源的JDBC工具類庫,它將JDBC進行了一系列簡單的封裝,使用起來很方便,並且其原始碼極易讀懂,因此,使用dbutils能夠從很大程度上減少JDBC編碼的工作量。我們可以從Apache官網去下載到這個工具包,下載地址為http://commons.apache.org/proper/commons-dbutils/download_dbutils.cgi       如果想要對資料庫進行操作的話,可以使用dbutils中包含一些類,這些類中包含了用於對資料庫執行更新操作與執行查詢操作等方法。下面詳細介紹一下 二、DButils類       該類中提供了一些用於關閉連線,載入JDBC驅動程式等工具類,裡面所有的方法都為靜態的,主要方法有如下幾種:   1、public static void close(...)  該類方法有三個過載方法用於關閉Connection、Statement、ResultSet,如果他們不為null就關閉他們。   2、public static void closeQuietly(...)  該類方法有四個過載方法,除了能夠在Connection、Statement、ResultSet為null的情況下避免關閉之外,還隱藏了一些程式中可能丟擲的異常(原理就是捕獲了異常,但是不對其進行任何的處理)   3、public static void commitAndCloseQuietly()(Connection con)  用來提交和關閉連線,並且隱藏了一些異常     4、public static boolean loadDriver(String driverClassName)  該類方法用於裝載JDBC驅動程式,如果成功,就返回true,並且使用該方法不用捕捉ClassNotFoundException 三、QueryRunner類       該類將JDBC查詢及更新的步驟進行了包裝,從而簡化了操作,他和ResultSetHandler一起使用可以完成大部分的資料庫操作,其提供了兩個構造方法:   1、預設的無參構造方法   2、需要傳入一個DataSource類物件來作為引數的構造方法 其主要方法如下:   1、public Object query(Connection con ,String sql,ResuleSetHandler rsh,Object[] params
)  執行一個查詢操作,該查詢中,物件陣列中的每個元素值被用來替換"?"引數,並且該方法還會建立和關閉PreparedStatement和ResultSet   2、pubilc Object query(String sql,ResuleSetHandler rsh,Object[] params )  和上一個方法差不多,只是它連線資料庫時使用的是從提供給構造方法的資料來源(DataSource)中獲得Connection   3、public Object query(Connection con ,String sql,ResuleSetHandler rsh )  執行一個不需要填充佔位符"?"的查詢操作   4、public int update(Connection con,String sql,Object[] params )  用來執行一個更新操作   5、public int update(Connection con,String sql )  執行一個不需要填充佔位符"?"的更新操作 四、ResultSetHandler介面及其實現類       ResultSetHandler介面及其實現類是用來處理ResultSet結果集的工具,其中ResultSetHandler介面中提供了一個方法為:Object    handle(ResultSet rs)。       ResultSetHandler介面的實現類有很多種,我們可以根據自己的需要來選擇使用哪一種,下面來詳細介紹一下其實現類: 1、ArrayHandler:  將查詢所得結果集中的第一行資料轉為物件陣列 2、ArrayListHandler: 將結果集中的每一行都轉換成一個數組,存放在List集合中 3、BeanHandler: 將結果集中的第一行資料封裝到一個對應的JavaBean例項中 4、BeanListHandler: 將結果集中的每一行資料都封裝到一個對應的JavaBean例項中,並存放在List集合中 5、ColumnListHandler: 將結果集中的某一列的資料存放在List集合中 6、MapHandler: 將結果集中的第一行資料封裝到一個Map集合中,key是列名(不是別名),value為其對應的值 7、MapListHandler: 將結果集中的每一行資料都封裝到一個Map集合中,然後再存放到List中 8、ScalarHandler:  可以返回指定列的第一行的一個值 如果你沒有找到你想要用的方法,就自己實現ResultSetHandler中的handle方法把,你可以指定自己想要的返回結果,因為query()方法的返回值取決於ResultSetHandler介面中的handle方法是如何實現的 下面是一個例項用來測試這些方法: 現在本地資料庫中有這樣一個表: 要對該資料庫執行查詢和更新操作,程式碼如下
import java.sql.Connection;
import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
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 org.junit.Test;
/**
 * DButils工具的使用
 * @author wushijia
 *
 */
public class Test_dbutils {
       /**
        * 使用DButils進行資料庫的更新操作
        */
       @Test
    public void test1(){
       Connection con = null;
       //1、建立QueryRunner的物件例項
       QueryRunner queryRunner = new QueryRunner();
       String sql = "INSERT INTO customer(id,name,date) VALUES(?,?,?)";
       try {
                    con = JDBCTools.getConnection();
             //2、呼叫其update方法
                    queryRunner.update(con, sql, 2,"Jerry",new Date(new java.util.Date().getTime()));
             } catch (Exception e) {
            e.printStackTrace();
             } finally {
                    JDBCTools.releaseDB(null, null, con);
             }
    }
       /**
        * 自己實現handle方法來測試query
        */
@Test
       public void testResultSetHandle(){
             Connection con = null;
             QueryRunner queryRunner = new QueryRunner();
             String sql = "SELECT id,name,date FROM customer";
             try {
                    con = JDBCTools.getConnection();
                    Object object = queryRunner.query(con, sql, new ResultSetHandler<Object>(){
                           @Override
                           public Object handle(ResultSet rs) throws SQLException {//自己實現handle方法
                                 List<Customer> customers = new ArrayList<>();
                                 while(rs.next()){
                                        int id = rs.getInt(1);
                                        String name = rs.getString(2);
                                        Date date = rs.getDate(3);
                                        
                                        Customer customer = new Customer(id,name,date);
                                        customers.add(customer);
                                 }
                                 
                                 return customers;
                           }
                    });
                    System.out.println(object);//[Customer [id=1, name=Tom, date=2017-07-15], Customer [id=2, name=Jerry, date=2017-07-15]]
             } catch (Exception e) {
            e.printStackTrace();
             } finally {
                    JDBCTools.releaseDB(null, null, con);
             }
       }
/**
 * 測試ResultSetHandle介面的實現類BeanListHandler
 */
@Test
    public void testBeanListHandler(){
           Connection con = null;
           QueryRunner queryRunner = new QueryRunner();
             String sql = "SELECT I_D id,name,date FROM customer";
             
             try {
                    con = JDBCTools.getConnection();
                    Object object = queryRunner.query(con, sql, new BeanListHandler<Customer>(Customer.class));
                    System.out.println(object);//[Customer [id=1, name=Tom, date=2017-07-15], Customer [id=2, name=Jerry, date=2017-07-15]]
             } catch (Exception e) {
            e.printStackTrace();
             } finally {
                    JDBCTools.releaseDB(null, null, con);
             }
  }
/**
 * 測試ResultSetHandle介面的實現類BeanHandler
 */
@Test
    public void testBeanHandler(){
           Connection con = null;
           QueryRunner queryRunner = new QueryRunner();
           String sql = "SELECT I_D id,name,date FROM customer";
          
           try {
                    con = JDBCTools.getConnection();
                    Object object = queryRunner.query(con, sql, new BeanHandler<>(Customer.class));
                    System.out.println(object);//Customer [id=1, name=Tom, date=2017-07-15]
             } catch (Exception e) {
            e.printStackTrace();
             } finally {
                    JDBCTools.releaseDB(null, null, con);
             }
  }
/**
 * 測試ResultSetHandle介面的實現類MapListHandler
 */
@Test
    public void testMapListHandler(){
           Connection con = null;
           QueryRunner queryRunner = new QueryRunner();
           String sql = "SELECT I_D id,name,date FROM customer";
          
           try {
                    con = JDBCTools.getConnection();
                    List<Map<String,Object>> object = queryRunner.query(con, sql, new MapListHandler());
                    System.out.println(object);//[{id=1, name=Tom, date=2017-07-15}, {id=2, name=Jerry, date=2017-07-15}]
             } catch (Exception e) {
               e.printStackTrace();
             } finally {
                    JDBCTools.releaseDB(null, null, con);
             }
  }
/**
 * 測試ResultSetHandle介面的實現類ScalarHandler
 */
@Test
    public void testScalarHandler(){
           Connection con = null;
           QueryRunner queryRunner = new QueryRunner();
           String sql = "SELECT I_D id,name FROM customer";
          
           try {
              con = JDBCTools.getConnection();
                    Object object = queryRunner.query(con, sql, new ScalarHandler<>(2));//返回查的的結果集中的2列的內容
                    System.out.println(object);//Tom
             } catch (Exception e) {
            e.printStackTrace();
             } finally {
                 JDBCTools.releaseDB(null, null, con);      
             }
  }
}
JDBCTools類:
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp2.BasicDataSourceFactory;
/**
 * JDBC的工具類,利用資料庫連線池連線資料庫,以及相應的事務操作
 * @author wushijia
 *
 */
public class JDBCTools {
       /**
        * 提交事務
        * @param con
        */
    public static void commit(Connection con){
       if(con != null){
             try {
                           con.commit();
                    } catch (SQLException e) {
                           e.printStackTrace();
                    }
       }
    }
    /**
     * 事務的回滾
     * @param con
     */
    public static void rollback(Connection con){
       if(con != null){
             try {
                           con.rollback();
                    } catch (Exception e) {
                e.printStackTrace();
                    }
       }
    }
    /**
     * 開始事務
     * @param con
     */
    public static void beginTransaction(Connection con){
       if(con != null){
             try {
                           con.setAutoCommit(false);
                    } catch (SQLException e) {
                           e.printStackTrace();
                    }
       }
    }
    /**
     * 利用靜態程式碼塊初始化資料庫連線池,資料庫連線池應該只被初始化一次
     */
    public static DataSource datasource = null;
    static{
       Properties properties = new Properties();
       InputStream in = JDBCTools.class.getClassLoader().getResourceAsStream("dbcp.properties");
             try {
                    properties.load(in);
                    datasource = BasicDataSourceFactory.createDataSource(properties);
             } catch (Exception e) {
                    e.printStackTrace();
             }
    }
    /**
     * 獲取資料庫連線
     * @return
     * @throws SQLException
     */
    public static Connection getConnection() throws SQLException{
       return datasource.getConnection();
    }
    /**
     * 釋放連線
     * @param con
     * @param state
     * @param rs
     */
    public static void releaseDB(ResultSet rs,Statement state,Connection con){
       if(rs != null){
             try {
                    rs.close();
             } catch (SQLException e) {
                    e.printStackTrace();
             }
       }
       if(state != null){
             try {
                           state.close();
                    } catch (SQLException e) {
                           e.printStackTrace();
                    }
       }
       if(con != null){
             try {
                    con.close();//釋放連線只是將連線放回資料庫連線池,供其它需要連線的事務使用
             } catch (SQLException e) {
                    e.printStackTrace();
             }
       }
    }
}
Customer類
import java.sql.Date;
public class Customer {
    public int id;
    public String name;
    public Date date;
       public int getId() {
             return id;
       }
       public void setId(int id) {
             this.id = id;
       }
       public String getName() {
             return name;
       }
       public void setName(String name) {
             this.name = name;
       }
       public Date getDate() {
             return date;
       }
       public void setDate(Date date) {
             this.date = date;
       }
       public Customer(int id, String name, Date date) {
             super();
             this.id = id;
             this.name = name;
             this.date = date;
       }
       public Customer() {
             super();
       }
       @Override
       public String toString() {
             return "Customer [id=" + id + ", name=" + name + ", date=" + date + "]";
       }
   
}



相關推薦

使用DButils資料庫進行操作

一、DButils       commons-dbutils是阿帕奇(Apache)提供的一個開源的JDBC工具類庫,它將JDBC進行了一系列簡單的封裝,使用起來很方便,並且其原始碼極易讀懂,因此,使用dbutils能夠從很大程度上減少JDBC編碼的工作量。我們可以從Ap

SpringMVC——SSM框架資料庫進行操作的流程以及搭建SSM框架的步驟

SSM框架對資料庫進行操作的流程圖如下: 具體執行流程步驟如下:        1、web伺服器啟動,會自動載入web.xml配置檔案(web.xml配置有:spring.xml的配置檔案、spring的監聽器)   2、瀏覽器傳送一個請求,

(二)連線資料庫使用Model物件資料庫進行操作(CRUD)

var mongoose = require("mongoose"); mongoose.connect("mongodb://127.0.0.1/mongoose_test",{useMongoClient:true}); mongoose.connection.once("open",functio

(一)Moogose(node.js資料庫進行操作)

/*(一)連線資料庫                1.下載安裝Mongoose        

使用spring-boot整合mybaits資料庫進行操作例項

新建專案,引入依賴 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent<

JAVA資料庫進行操作---弱智的學習記錄

通過java對資料庫進行操作的簡單實現 匯入myql-jdbc的jar包 簡單的程式碼實現 package day10_10; import java.sql.Connection; import java.sql.Driv

Android studio中檢視Device File Explorer,並使用sqlit3資料庫進行操作

首先確保手機與電腦進行連線,手機屬於開發者模式。開啟Android studio找到view,點選view找到“Tool Windows ”,將滑鼠指向“Tool Windows”後找到"Device File Explorer".點選後就可以進行檢視。若想對其中的sqlit

使用sql資料庫進行操作

使用sql對資料庫進行操作 首先安裝mysql 連線資料庫  開啟cmd視窗,使用命令,連線mysql資料庫  命令:mysql -uroot -p 檢視所有的資料庫   語句:show

【轉載】python如何資料庫進行操作--操作參考

先花點時間來說說一個程式怎麼和資料庫進行互動 1.和資料庫建立連線 2.執行sql語句,接收返回值 3.關閉資料庫連線 使用MySQLdb也要遵循上面的幾步.讓我們一步步的進行. 1、MySQL資料庫要用MySQLdb模組,但Python用來連結MySQL的第三方庫My

JAVA資料庫進行操作,實現資料庫中資料的插入,查詢,更改,刪除操作

轉載自:http://www.cnblogs.com/sodawoods-blogs/p/4415858.html (—)通過mysql workbench 建立一個數據庫,在這裡命名為company,然後建一個tb_employee表 (二)以下是java程式碼對錶

使用spring 來資料庫進行操作

使用Spring對資料庫進行增 刪 改 查 account裡面兩個屬性int aid和double abalance 提供getter和setter方法,程式碼如下 package com.offcn.entity; import java.io.Seria

使用ContentValues資料庫進行操作

在main.xml中: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

資料庫進行插入操作

提交.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head&

javaweb:JDBC連線MYSQL資料庫詳解,使用JDBC資料庫進行CRUD操作以及DAO模式的介紹

  JDBC簡介: JDBC全稱為:Java DataBase Connectivity(java資料庫連線)。 SUN公司為了簡化、統一對資料庫的操作,定義了一套Java操作資料庫的規範,稱之為JDBC。 組成JDBC的2個包: 連結:https://pan

java操作Mogodb資料庫資料庫進行增刪查改!

首先,我們在windows下安裝mongodb資料庫,安裝教程檢視上一篇文章: 程式碼如下: package io.mogo; import java.util.Map; import org.apache.commons.lang3.StringUtils; im

ASP.NET 使用類資料庫進行增刪改查操作

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Dat

用JavaScriptMySQL資料庫進行操作的方法

Javascript訪問Access很容易實現,但JS訪問MYSQL卻沒有找到很簡單的方法。今天在瀏覽MYSQL網站時,發現MYSQL有ODBC連線,突然想到JS是可以通過ActiveX訪問ODBC資料庫的,經過測試發現JS連線MYSQL如此簡單!1、下載MYSQL的ODB

JavaMySQL資料庫進行操作【java】

資料庫幾乎是每一個應用型的程式都會用到,學會如何高效操作資料庫也是開發一個重點。今天我總結了具體的操作步驟以及注意點。Java訪問資料庫主要用的方法是JDBC,它是java語言中用來規範客戶端程式如何來訪問資料庫的應用程式介面,提供了諸如查詢和更新資料庫中資料的方法,接下來

MFC中利用ADO資料庫進行簡單操作的例項

目標:實現對資料庫中的資料進行簡單地操作,包括增、刪、改、查。 第一步,建立一個基於對話方塊的應用程式,命名為TestAdo 第二步,按照圖1的介面佈局新增控制元件 圖1 程式介面示意圖 第三步,程式碼實現      首先,要用#import語句來引用支援ADO的

Java中怎樣實現批量刪除操作(Java資料庫進行事務處理)?

本人開發的一個安卓版app小遊戲,瘋狂猜明星android版,圖示看起來很搞笑,有點京劇變臉的味道。朋友們小手一抖,下載支援下。謝謝了 本文是記錄Java中實現批量刪除操作(Java對資料庫進行事務處理),在開始之前先來看下面這樣的一個頁面圖:  上面這張圖片顯示的是從