前言:

数据源技术是Java操作数据库的一个很关键技术,流行的持久化框架都离不开数据源的应用。

数据源提供了一种简单获取数据库连接的方式,并能在内部通过一个池的机制来复用数据库连接,这样就大大减少创建数据库连接的次数,提高了系统性能。

对于数据源的应用,一般都选择实用开源的数据源或数据库连接池来使用,比如,常见的有DBCP、C3P0、Proxool等等。但用起来有些笨重和麻烦。下面自己手动实现个精简的数据源,代码如下:

  1 import org.apache.commons.logging.Log;
  2 import org.apache.commons.logging.LogFactory;
  3
  4 import javax.sql.DataSource;
  5 import java.util.Collections;
  6 import java.util.LinkedList;
  7 import java.sql.Connection;
  8 import java.sql.SQLException;
  9 import java.sql.DriverManager;
 10 import java.io.PrintWriter;
 11
 12 /**
 13 * 一个简单的DataSource实现
 14 *
 15 * @author leizhimin 2010-1-14 0:03:17
 16 */
 17 public class SimpleDateSource implements DataSource {
 18         private static Log log = LogFactory.getLog(SimpleDateSource.class);
 19         private static final String dirverClassName = "com.mysql.jdbc.Driver";
 20         private static final String url = "jdbc:mysql://127.0.0.1:3306/testdb";
 21         private static final String user = "root";
 22         private static final String pswd = "leizhimin";
 23         //连接池
 24         private static LinkedList<Connection> pool = (LinkedList<Connection>) Collections.synchronizedList(new LinkedList<Connection>());
 25         private static SimpleDateSource instance = new SimpleDateSource();
 26
 27         static {
 28                 try {
 29                         Class.forName(dirverClassName);
 30                 } catch (ClassNotFoundException e) {
 31                         log.error("找不到驱动类!", e);
 32                 }
 33         }
 34
 35         private SimpleDateSource() {
 36         }
 37
 38         /**
 39          * 获取数据源单例
 40          *
 41          * @return 数据源单例
 42          */
 43         public SimpleDateSource instance() {
 44                 if (instance == null) instance = new SimpleDateSource();
 45                 return instance;
 46         }
 47
 48         /**
 49          * 获取一个数据库连接
 50          *
 51          * @return 一个数据库连接
 52          * @throws SQLException
 53          */
 54         public Connection getConnection() throws SQLException {
 55                 synchronized (pool) {
 56                         if (pool.size() > 0) return pool.removeFirst();
 57                         else return makeConnection();
 58                 }
 59         }
 60
 61         /**
 62          * 连接归池
 63          *
 64          * @param conn
 65          */
 66         public static void freeConnection(Connection conn) {
 67                 pool.addLast(conn);
 68         }
 69
 70         private Connection makeConnection() throws SQLException {
 71                 return DriverManager.getConnection(url, user, pswd);
 72         }
 73
 74         public Connection getConnection(String username, String password) throws SQLException {
 75                 return DriverManager.getConnection(url, username, password);
 76         }
 77
 78         public PrintWriter getLogWriter() throws SQLException {
 79                 return null;
 80         }
 81
 82         public void setLogWriter(PrintWriter out) throws SQLException {
 83
 84         }
 85
 86         public void setLoginTimeout(int seconds) throws SQLException {
 87
 88         }
 89
 90         public int getLoginTimeout() throws SQLException {
 91                 return 0;
 92         }
 93
 94         public <T> T unwrap(Class<T> iface) throws SQLException {
 95                 return null;
 96         }
 97
 98         public boolean isWrapperFor(Class<?> iface) throws SQLException {
 99                 return false;
100         }
101 }

转载于:https://www.cnblogs.com/ygh1229/p/5807581.html

JDBC数据源(DataSource)的简单实现相关推荐

  1. mysql datasource.url_SpringBoot配置数据源DataSource

    使用properties文件配置springboot默认数据源 这种方式十分简单,只用在application.properties文件中配置数据库连接属性即可. spring.datasource. ...

  2. C3P0数据源和Tomcat jdbc数据源的基本配置

    在项目中我们经常需要使用数据源,数据源存储所有建立数据库连接的信息.就象通过指定文件名你可以在文件系统中找到文件一样,通过提供正确的数据源名称,你可以找到相应的数据库连接.下面分别对C3P0数据源和T ...

  3. jdbc 数据源_Java数据源,JDBC数据源示例

    jdbc 数据源 Java DataSource and JDBC DataSource programming is the way to work with database in our jav ...

  4. 使用JDBC技术完成一个简单的账务管理系统

    一:账务系统的大致组成: 简单来说包括app层,controller层,dao层,domain层,service层,tools层,view层. 我的运行环境是:java version "1 ...

  5. Springboot整合JDBC和DBUtils,实现简单的增删改查.

    Springboot整合JDBC和DBUtils,实现简单的增删改查. 一.pom.xml文件 <?xml version="1.0" encoding="UTF- ...

  6. 数据源的配置简单介绍

    数据源 是指数据库应用程序所使用的数据库或者数据库服务器. 数据源的作用 ​ 数据源是一种用来提高数据库连接性能的常规手段,数据源会负责维持一个数据库连接池,当程序创建数据源实例时,系统会一次性地创建 ...

  7. apache配置支持mysql_Apache Kylin | 建立 JDBC 数据源

    自 Apache Kylin v2.3.x 起有效 支持 JDBC 数据源 自 v2.3.0 Apache Kylin 开始支持 JDBC 作为第三种数据源(继 Hive,Kafka).用户可以直接集 ...

  8. 使用Kylin导入JDBC数据源遇到的问题

    一.目标: 直接使用Mysql数据作为Kylin数据源 二.参考官方配置 JDBC 数据源 准备 Sqoop Kylin 使用 Apache Sqoop 从关系型数据库加载数据到 HDFS.在与 Ky ...

  9. 使用JDBC来实现一个简单的增删改查

    使用jdbc来实现一个简单的增删改查 package com.database;import java.sql.Connection; import java.sql.PreparedStatemen ...

  10. JDBC+MYSQL图书馆,简单迷你图书管理系统练习小项目,实现查询,新增,修改,删除,退出功能。

    JDBC+MYSQL图书馆,简单迷你图书管理系统练习小项目,实现查询,新增,修改,删除,退出功能. 代码有一丢丢小多,最后有图解,讲的不对的地方希望各位大佬指出,对您有帮助的话请点个小小的赞. 题目与 ...

最新文章

  1. 女生读计算机专业好,女生选择计算机专业就读好吗?
  2. ORA-03135 ,ORA-02050到底什么原因?
  3. mybatis转义反斜杠_mybatis like 的坑
  4. 数据分析利器--Pandas
  5. Oracle 如何修改列的数据类型
  6. html表单提交前验证,jquery表单提交前实现同步验证(附代码)
  7. leetcode180. 连续出现的数字(SQL)
  8. OAM深入解读:使用OAM定义与管理Kubernetes内置Workload
  9. 【图精】徐克镜头里的十大美人
  10. sql join 示例_SQL CROSS JOIN与示例
  11. Oracle输入默认密码错误,oracle中默认账号oracle 11g SQL plus软件怎么打开?打开显示密码错误怎么办?...
  12. 三种方法求最大公约数
  13. 7、万国觉醒建筑白天黑夜效果(Shader Graph)
  14. 数据组,请求组,职责,用户关系
  15. 90%的人都浪费了阳台?这6种装修方案建议照搬~
  16. 更改Windows桌面位置为D盘
  17. 超详细的java基础知识学习(java SE、javaEE)笔记 核心重点!
  18. 多机Nomad+Consul+consul-template+Nginx反向代理
  19. jenkins学习4-进docker容器安装python3环境
  20. 第2次实验——算法基本功 与 综合思考

热门文章

  1. c++ 队列_RabbitMQ的死信与延迟队列,你真的会用吗?
  2. glEnable(GL_DEPTH_TEST)作用
  3. 系统封装 如何为原生PE集成软件
  4. 重庆Uber优步司机奖励政策
  5. Vmware下安装配置HMC
  6. MATLAB实现频数直方图——hist的使用
  7. sql语句有没有怎么优化的空间,这条语句在我这里执行是死机
  8. apach2.2+php5.35 windows环境下安装问题解决
  9. C# FAQ: const和static readonly有什么区别?
  10. 1月4日 每次安装都有新问题