新手写的一个DBCP工具类

  1 package com.xx.questionnaire.util.dao;
  2
  3 import java.io.IOException;
  4 import java.sql.Connection;
  5 import java.sql.PreparedStatement;
  6 import java.sql.ResultSet;
  7 import java.sql.SQLException;
  8 import java.sql.Statement;
  9 import java.util.Properties;
 10
 11 import javax.sql.DataSource;
 12
 13 import org.apache.commons.dbcp2.BasicDataSourceFactory;
 14 import org.apache.log4j.Logger;
 15
 16 /**
 17  * @version 0.1
 18  * @author Administrator
 19  *
 20  */
 21 public class Dbcp_connection implements JdbcI {
 22     static Logger log = Logger.getLogger(Dbcp_connection.class);
 23     private Connection connection;
 24     /**
 25      * 在静态块中初始化获得DBCP数据源连接池
 26      */
 27     static {
 28         getDataSource();
 29         log.info("数据源已在静态块中初始化完成。");
 30     }
 31
 32     /**
 33      *@return 返回Connection连接
 34      */
 35     public Connection getConnection() {
 36         if (connection == null || connection.equals("")) {
 37             try {
 38                 setConnection(getDataSource().getConnection());
 39                 log.info("从数据源中获取连接!");
 40                 return connection;
 41             } catch (SQLException e) {
 42                 log.error("对不起,数据库连接获取失败!");
 43                 e.printStackTrace();
 44             }
 45         }
 46         return null;
 47     }
 48     /**
 49      * @param sql    SQL语句
 50      * @return PrepaedStatement对象
 51      */
 52     public PreparedStatement getPStatement(String sql) {
 53         if (sql == null || sql.equals("")) {
 54             log.error("错误,SQL语句不允许为空!");
 55             return null;
 56         }
 57         PreparedStatement ps = null;
 58         try {
 59             ps = getConnection().prepareStatement(sql);
 60             log.info("SQL语句" + sql + "已经过预编译!");
 61             return ps;
 62         } catch (SQLException e) {
 63             log.error("异常,SQL语句" + sql + "预编译失败!");
 64             e.printStackTrace();
 65         }
 66
 67         return null;
 68     }
 69
 70     /**
 71      * 强制释放Connection连接。
 72      *
 73      */
 74     public void close() {
 75         try {
 76             this.connection.close();
 77             log.info("Connection object" + this.connection.hashCode()
 78                     + "被强制释放!");
 79         } catch (SQLException e) {
 80             // TODO Auto-generated catch block
 81             e.printStackTrace();
 82         }
 83
 84     }
 85
 86
 87     public void close(Statement ps) {
 88         // TODO Auto-generated method stub
 89         try {
 90
 91             ps.close();
 92             this.connection.close();
 93             log.info("Statement("
 94                     + ps.hashCode() + "),Connection("
 95                     + this.connection.hashCode() + ")已被释放!");
 96         } catch (SQLException e) {
 97             log.error("异常,JDBC对象关闭失败!");
 98             e.printStackTrace();
 99         }
100
101     }
102     /**
103      * 按照顺序释放JDBC连接。
104      */
105     public void close(Statement ps, ResultSet rs) {
106         // TODO Auto-generated method stub
107         try {
108             rs.close();
109             ps.close();
110             this.connection.close();
111             log.info("ResultSet(" + rs.hashCode() + "),Statement("
112                     + ps.hashCode() + "),Connection("
113                     + this.connection.hashCode() + ")已被释放!");
114         } catch (SQLException e) {
115             log.error("异常,JDBC对象关闭失败!");
116             e.printStackTrace();
117         }
118
119     }
120
121     public static void main(String[] args) {
122         // TODO Auto-generated method stub
123         /* 1 */
124         DataSource dds = getDataSource();
125         System.out.println(dds == null ? "数据源失败" : "数据源成功");
126
127     }
128
129     /**
130      * 全局公用的数据源
131      *
132      * @return DataSource Object
133      */
134     private static DataSource getDataSource() {
135         String dbcpUrl = "dbcp-mysql.properties";
136
137         DataSource ds;
138         Properties p = new Properties();
139         try {
140             // 通过类的类加载器将属性文件加载至输入流
141             p.load(JDBCUtil.class.getClassLoader().getResourceAsStream(dbcpUrl));
142             log.info("DBCP配置文件已加载!");
143
144             ds = BasicDataSourceFactory.createDataSource(p);
145             log.info("数据源获取成功!");
146             return ds;
147
148         } catch (IOException e) {
149             log.error("异常,可能是配置文件读取失败。");
150             e.printStackTrace();
151         } catch (Exception e) {
152             e.printStackTrace();
153         }
154
155         return null;
156     }
157
158     private void setConnection(Connection connection) {
159         log.info("获取连接,Hash地址为:" + connection.hashCode());
160         this.connection = connection;
161     }
162
163     public DataSource getDS() {
164         // TODO Auto-generated method stub
165         log.info("数据源被外部调用!");
166         return getDataSource();
167     }
168
169 }
时间: 2024-10-08 07:35:45

新手写的一个DBCP工具类的相关文章

重复造轮子,编写一个轻量级的异步写日志的实用工具类(LogAsyncWriter)

一说到写日志,大家可能推荐一堆的开源日志框架,如:Log4Net.NLog,这些日志框架确实也不错,比较强大也比较灵活,但也正因为又强大又灵活,导致我们使用他们时需要引用一些DLL,同时还要学习各种用法及配置文件,这对于有些小工具.小程序.小网站来说,有点“杀鸡焉俺用牛刀”的感觉,而且如果对这些日志框架不了解,可能输出来的日志性能或效果未毕是与自己所想的,鉴于这几个原因,我自己重复造轮子,编写了一个轻量级的异步写日志的实用工具类(LogAsyncWriter),这个类还是比较简单的,实现思路也很

我写的一个ExcelHelper通用类,可用于读取或生成数据

读取或生成EXCEL数据的方法有很多,一般常见的有: 1.通过OFFICE EXCEL组件,优点:读取与生成EXCEL文件方便,缺点:服务器上必须安装OFFICE软件,且进程无法及时释放 2.通过第三方组件(比如:NPOI),优点:无需安装OFFICE软件,缺点:需要引入第三方组件,当然这个还是比较强的 3.通过把EXCEL当成数据库,连接后运用SQL语句读取,写入的话就自行拼接成HTML表格,优点:无需另外的组件,缺点:需要会SQL及拼接HTML表格较麻烦: 三种方法我都有用过,若开发BS网站

用接口实现的一个pdo工具类

<?php //定义一个pdo工具类 class DAOPdo implements I_Dao { //配置信息 private $_host; private $_root; private $_dbname; private $_pw; private $_port; private $_charset; //pdo对象 private $pdo; //pdo结果集对象 private $result; //被影响的记录数 private $affected_row; //当前类的实例化对

使用回调方式写POI导入excel工具类

场景是这样的:为了做一个excel导入的功能,为了尽可能的写一个通用的工具类,将与poi有关的东西都封装起来,以便以其他人员只用关心自己的业务,不用和poi打交道. 写到最后,现在还是会有poi的东西暴漏出来一点,暴漏出来的这个应该是必须的. 为了模拟这个场景,先写两个service方法,用于和数据库交互,存入从模板中读取的数据.代码如下: 1.berthservice public class BerthService { public void update(){ System.out.pr

调用CMD命令的一个.NET工具类

功能大概描述一下如果直接StandardOutput.ReadToEnd()这种方法,有很多限制 这类方式必须把命令全部执行一次写入并标记为exit,而且返回内容的获取会一直等待,如果在主线程里使用会导致假死. 若遇到执行时间长,同时会在执行中输出进度的命令,则明显不适应 对于部分特殊字符这类方法会直接中断一直等待(特别是对包含asc颜色等样式的输出) 本文的工具类解决以上问题,使用委托订阅的方式即时的输出执行过程,不用等待,异步输出结算后自动退出 方便应对类似这种需要长时间运行即时输出的打包命

C#.NET 程序员的福利,自己写的一个XML操作类,可实现像jquery一样方便的xml操作,且不用专门去处理命名空间。

此工具是进入一家新公司之后实现的,主要是工作当中操作 xml 的时间太多,因为公司按任务计“工作量”,领导给我安排的时间远远不够完善此工具[悲哀的制度],虽然我也能直接在cs中直接中规中矩完成,但实在受不了那种重复和低效,所以此工具基础部分绝大部分时间是在家中加班完成,剩下应用于公司项目中之后,在公司改了一些BUG,差不多也用了半年多了,实在是很好用,现在也差不多稳定了,特分享出来,需要的直接拿去用吧,有BUG可以直接发消息给我沟通,不用谢.. 使用方法: x(filepath).Find("/

用接口实现封装的一个mysqli工具类

<?php class DAOMysqli implements I_Dao{ //本类的对象实例 private static $instance; //结果集 private $result_row; //配置信息 private $_host; private $_root; private $_dbname; private $_pw; private $_port; private $_charset; //mysqli实例化对象 private $_mysqli; private f

entity framework 6 我写了一个公用数据类

public class BaseDAL { string strConn = ""; public BaseDAL(string connString) { strConn = connString; } #region 通用增删改查 #region 非原始sql语句方式 /// <summary> /// 新增 /// </summary> /// <param name="entity">实体</param> /

刚写的一个js分页类,未优化

以前也写过,很久以前了,写的很长,并且使用起来也不灵活.这次搞了个灵活版的. /* * SunPage --自定义分页类,仅获取分页的html代码,简单应用 * Sunbt 2015-5-4 * v1.0 * @param current_page int 当前页 * @param totle_page int 总页数 * @param take_num int 当前页左右携带页码数 * @param func_obj obj 分页实现函数 */ var SunPage = function(c