数据源技术是Java操作数据库的一个很关键技术,流行的持久化框架都离不开数据源的应用。
 
数据源提供了一种简单获取数据库连接的方式,并能在内部通过一个池的机制来复用数据库连接,这样就大大减少创建数据库连接的次数,提高了系统性能。
 
对于数据源的应用,一般都选择实用开源的数据源或数据库连接池来使用,比如,常见的有DBCP、C3P0、Proxool等等。但用起来有些笨重和麻烦。下面自己手动实现个精简的数据源,代码如下:
 
package com.lavasoft.simpledatesource;

import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory;

import javax.sql.DataSource; 
import java.util.Collections; 
import java.util.LinkedList; 
import java.sql.Connection; 
import java.sql.SQLException; 
import java.sql.DriverManager; 
import java.io.PrintWriter;

/** 
* 一个简单的DataSource实现 

* @author leizhimin 2010-1-14 0:03:17 
*/ 
public class SimpleDateSource implements DataSource { 
        private static Log log = LogFactory.getLog(SimpleDateSource.class); 
        private static final String dirverClassName = "com.mysql.jdbc.Driver"; 
        private static final String url = "jdbc:mysql://127.0.0.1:3306/testdb"; 
        private static final String user = "root"; 
        private static final String pswd = "leizhimin"; 
        //连接池 
        private static LinkedList<Connection> pool = (LinkedList<Connection>) Collections.synchronizedList(new LinkedList<Connection>()); 
        private static SimpleDateSource instance = new SimpleDateSource();

static { 
                try { 
                        Class.forName(dirverClassName); 
                } catch (ClassNotFoundException e) { 
                        log.error("找不到驱动类!", e); 
                } 
        }

private SimpleDateSource() { 
        }

/** 
         * 获取数据源单例 
         * 
         * @return 数据源单例 
         */ 
        public SimpleDateSource instance() { 
                if (instance == null) instance = new SimpleDateSource(); 
                return instance; 
        }

/** 
         * 获取一个数据库连接 
         * 
         * @return 一个数据库连接 
         * @throws SQLException 
         */ 
        public Connection getConnection() throws SQLException { 
                synchronized (pool) { 
                        if (pool.size() > 0) return pool.removeFirst(); 
                        else return makeConnection(); 
                } 
        }

/** 
         * 连接归池 
         * 
         * @param conn 
         */ 
        public static void freeConnection(Connection conn) { 
                pool.addLast(conn); 
        }

private Connection makeConnection() throws SQLException { 
                return DriverManager.getConnection(url, user, pswd); 
        }

public Connection getConnection(String username, String password) throws SQLException { 
                return DriverManager.getConnection(url, username, password); 
        }

public PrintWriter getLogWriter() throws SQLException { 
                return null; 
        }

public void setLogWriter(PrintWriter out) throws SQLException {

}

public void setLoginTimeout(int seconds) throws SQLException {

}

public int getLoginTimeout() throws SQLException { 
                return 0; 
        }

public <T> T unwrap(Class<T> iface) throws SQLException { 
                return null; 
        }

public boolean isWrapperFor(Class<?> iface) throws SQLException { 
                return false; 
        } 
}

 
这个数据源的实现虽然很简陋,总代码量不到百行,却基本上实现了数据源的所有功能,达到了提高Connection复用的目的。
 
如果你想做的更复杂些,做个配置文件,
配置数据库连接信息
写个后台线程监控连接池的Connection超时、被强制关闭、池的尺寸、当前大小等等。
再完善下数据源的log相关方法的实现。
功能就很强大了。

JDBC数据源(DataSource)的简单实现的更多相关文章

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

    JDBC数据源(DataSource)的简单实现   数据源技术是Java操作数据库的一个很关键技术,流行的持久化框架都离不开数据源的应用. 2.数据源提供了一种简单获取数据库连接的方式,并能在内部通 ...

  2. 概念学习 - JNDI, JDBC, ODBC, DataSource

    layout: post title: 概念学习 - JNDI, JDBC, ODBC, DataSource --- 最近在学习Java Hibernate,对数据库资源访问这块好多概念模糊,所以在 ...

  3. jdbc框架-dbutils的简单使用

    jdbc框架-dbutils的简单使用 dbutils:是apache组织的一个工具类,jdbc的框架,更方便我们使用 使用步骤: 1.导入jar包(commons-dbutils-1.4.jar) ...

  4. AbstractRoutingDataSource 实现动态数据源切换原理简单分析

    AbstractRoutingDataSource 实现动态数据源切换原理简单分析 写在前面,项目中用到了动态数据源切换,记录一下其运行机制. 代码展示 下面列出一些关键代码,后续分析会用到 数据配置 ...

  5. Tomcat中使用JNDI加载JDBC数据源

    以前写JDBC的时候总是手工写一个类,用硬代码写上className.url.用户名和密码什么的,然后通过DriverManager获取到Connection.那样写是很方便,但是如果想更改的话,需要 ...

  6. spring中配置jdbc数据源

    1.加入jdbc驱动器包,mysql-connector-java.jar 2.加入commons-dbcp.jar配置数据源 3.在classpath下新建文件jdbc.properties,配置j ...

  7. JDBC数据源 使用JNDI连接池实现数据库的连接

    0.引言 许多Web应用程序需要通过JDBC驱动程序访问数据库,以支持该应用程序所需的功能.Java EE平台规范要求Java EE应用程序服务器为此目的提供一个DataSource实现(即,用于JD ...

  8. JDBC数据源连接池(4)---自定义数据源连接池

    [续上文<JDBC数据源连接池(3)---Tomcat集成DBCP>] 我们已经 了解了DBCP,C3P0,以及Tomcat内置的数据源连接池,那么,这些数据源连接池是如何实现的呢?为了究 ...

  9. JDBC数据源连接池(3)---Tomcat集成DBCP

    此文续<JDBC数据源连接池(2)---C3P0>. Apache Tomcat作为一款JavaWeb服务器,内置了DBCP数据源连接池.在使用中,只要进行相应配置即可. 首先,确保Web ...

随机推荐

  1. Android 核心分析之十三Android GWES之Android窗口管理

    Android GWES之Android窗口管理1基本构架原理 Android的窗口管理是C/S模式的.Android中的Window是表示Top Level等顶级窗口的概念.DecorView是Wi ...

  2. android-exploitme(三):安全连接

    今天我来测试连接的安全,数据是否可嗅探. android模拟器提供了内置的tcpdump,我们使用这个来抓包. 1. 启动带tcpdump的模拟器 santoku@santoku-virtual-ma ...

  3. 272. Closest Binary Search Tree Value II

    题目: Given a non-empty binary search tree and a target value, find k values in the BST that are close ...

  4. USACO Section 2.3: Controlling Companies

    这题的dp里的check里的函数要考虑k control i control j和i control j control k的情况 /* ID: yingzho1 LANG: C++ TASK: co ...

  5. 《Linux/Unix系统编程手册》读书笔记 目录

    <Linux/Unix系统编程手册>读书笔记1  (创建于4月3日,最后更新4月7日) <Linux/Unix系统编程手册>读书笔记2  (创建于4月9日,最后更新4月10日) ...

  6. js中的编码与解码

    一.encodeURI()定义和用法 encodeURI() 函数可把字符串作为 URI 进行编码. 语法 encodeURI(URIstring) 参数 描述 URIstring 必需.一个字符串, ...

  7. Android模拟器使用教程

    Using the Emulator In this document Overview Android Virtual Devices and the Emulator Starting and S ...

  8. Less tips:声明变量之前可以引用变量!

    Less中的variable可以在使用之后才被声明,这一特性对于希望覆盖前期声明的(比如bootstrap等第三方library的variable)变量,从而优雅地 使用你希望的效果提供了便利. 比如 ...

  9. 51nod1122 机器人走方格 V4

    矩阵快速幂求出每个点走n步后到某个点的方案数.然后暴力枚举即可 #include<cstdio> #include<cstring> #include<cctype> ...

  10. IOS中控制器的重要方法使用

    1.屏幕即将旋转的时候调用(控制器监控屏幕旋转) - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfac ...