论坛首页 入门技术论坛

适合初学者的commons-dbutils的封装方法

浏览 5906 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (15) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-04-22   最后修改:2010-04-22
package com.sidi.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.List;

import org.apache.commons.dbcp.ConnectionFactory;
import org.apache.commons.dbcp.DriverManagerConnectionFactory;
import org.apache.commons.dbcp.PoolableConnectionFactory;
import org.apache.commons.dbcp.PoolingDriver;
import org.apache.commons.dbutils.DbUtils;
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.pool.ObjectPool;
import org.apache.commons.pool.impl.GenericObjectPool;

public class MyDbutil {
    private String dri = "com.mysql.jdbc.Driver";
    private String url = "jdbc:mysql://localhost:3306/myout?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8";
    private String username = "root";
    private String password = "";
    private volatile static MyDbutil faction = null;
    private static ObjectPool connectionPool = null;

    private MyDbutil() {
       
    }
    //打开

    public static MyDbutil Open() {
        while (faction == null) {
            synchronized(MyDbutil.class){
                 if (faction == null) {
                     faction = new MyDbutil();
                 }
            }
        }
        return faction;
    }
    //关闭连接

    public void Close(Connection conn) {
        DbUtils.closeQuietly(conn);
        //ShutdownPool();
    }
    /**   
     * 连接池启动   
     * @throws Exception   
     */    
    public void StartPool() {   
        try {
            Class.forName(dri);
        } catch (ClassNotFoundException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        if (connectionPool != null) {    
            ShutdownPool();    
        }     
        try {
            connectionPool = new GenericObjectPool(null);
            ConnectionFactory connectionFactory = new DriverManagerConnectionFactory(url,username,password);
            PoolableConnectionFactory poolableConnectionFactory = new PoolableConnectionFactory(connectionFactory, connectionPool, null, "SELECT 1 as a", false, true);    
            Class.forName("org.apache.commons.dbcp.PoolingDriver");    
            PoolingDriver driver = (PoolingDriver) DriverManager.getDriver("jdbc:apache:commons:dbcp:");    
            driver.registerPool("dbpool2", connectionPool);                 
            System.out.println("装配连接池OK");    
        } catch (Exception e) {    
            e.printStackTrace();   
        }    
    }
    /**   
     * 释放连接池   
     */    
    public static void ShutdownPool() {    
        try {    
            PoolingDriver driver = (PoolingDriver) DriverManager.getDriver("jdbc:apache:commons:dbcp:");    
            driver.closePool("dbpool2");
        } catch (SQLException e) {    
            e.printStackTrace();   
        }    
    }    
   
    // 获得数据库连接

    public synchronized Connection getConnection() {
        Connection conn = null;
        try {
            if(connectionPool == null)    
                StartPool();
            conn = DriverManager.getConnection("jdbc:apache:commons:dbcp:dbpool2");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return conn;
    }
    //执行查询方法(使用map)

    public List query(String sql) {
        List results = null;
        Connection conn = null;
        try {
            conn = getConnection();
            QueryRunner qr = new QueryRunner();
            results = (List) qr.query(conn, sql, new MapListHandler());
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            Close(conn);
        }
        return results;
    }
    //执行查询方法(使用map)

    public List query(String sql, Object param) {
        List results = null;
        Connection conn = null;
        try {
            conn = getConnection();
            QueryRunner qr = new QueryRunner();
            results = (List) qr.query(conn, sql, param, new MapListHandler());
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            Close(conn);
        }
        return results;
    }
    //执行查询方法(使用)

    public List query(String sql, Class module) {
        List results = null;
        Connection conn = null;
        try {
            conn = getConnection();
            QueryRunner qr = new QueryRunner();
            results = (List) qr.query(conn, sql, new BeanListHandler(module));
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            Close(conn);
        }
        return results;
    }
    //查询单个数据

    public Object get_one(String sql, Class module) {
        Object results = null;
        Connection conn = null;
        try {
            conn = getConnection();
            QueryRunner qr = new QueryRunner();
            results = (Object) qr.query(conn, sql, new BeanHandler(module));
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            Close(conn);
        }
        return results;
    }
  //增删改方法
    public int execute(String sql) throws Exception {
        Connection conn = getConnection();
        int rows = 0;
        try {
            QueryRunner qr = new QueryRunner();
            rows = qr.update(conn, sql);
        } finally {
            Close(conn);
        }
        return rows;
    }
    //增删改方法
    public int execute(String sql, Object[] params) throws Exception {
        Connection conn = getConnection();
        int rows = 0;
        try {
            QueryRunner qr = new QueryRunner();
            rows = qr.update(conn, sql, params);
        } finally {
            Close(conn);
        }
        return rows;
    }
}




单例,使用了连接池,用到的jar是commons-dbcp-1.2.2.jar  commons-pool-1.3.jar commons-dbutils-1.1.jar
   发表时间:2010-04-25  
既然用了DBCP为啥不直接写个配置文件,里面进行一些配置。然后直接读取不就完了,这么写很麻烦。
0 请登录后投票
   发表时间:2010-05-19   最后修改:2010-05-19
不知道为啥我用commons-dbutils 来执行sql,老是报什么 不支持的sql特性。可是同样的语句,我自己用传统的jdbc方式来执行就没问题。。。哎。

哪位朋友遇到过类似情况,请站内留言我好吗谢谢了
0 请登录后投票
   发表时间:2010-06-14  
Javac_MyLife 写道
既然用了DBCP为啥不直接写个配置文件,里面进行一些配置。然后直接读取不就完了,这么写很麻烦。

这只是个例子,自己写个配置读取就行了。
0 请登录后投票
   发表时间:2011-01-06  
如果需要连接多个数据库,这个封装不是十分好用
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics