- 浏览: 117687 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
HuoYun:
兄弟,这个代码对于其他excel转换会出问题,如数据库导出的e ...
excel文件转换为pdf文件的问题总结 -
listen-raining:
这两天正在弄这个东东
excel文件转换为pdf文件的问题总结 -
李001:
你是英雄!
excel文件转换为pdf文件的问题总结 -
237304457:
少文,功 能有全事例不,
excel文件转换为pdf文件的问题总结 -
237304457:
提供大资源是哪种方式呀?
excel文件转换为pdf文件的问题总结
数据源设计思想和数据库连接池设计思想基本相似。大家知道在操作数据库程序时,创建连接所占用时间最多,为了提高程序的效率,便出现了数据库连接池技术。
数据库连接池实现原理:在系统启动时便创建一定数量连接,将它们放在线程安全的集合中(这便称为数据库连接池),当某段程序要连接数据库时,不必再去创建连接而直接去从池中去取,这样也就减少了创建连接时间。在关闭连接时,也不是真正关闭而是将其重新放回池中。从而提高系统效能。
一下说我最近写的一个数据源类,仅供大家参考:
package dataSource; import java.io.File; import java.io.InputStream; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Enumeration; import java.util.Properties; import java.util.Vector; public class DataSource implements javax.sql.DataSource{ /**驱动*/ private String driver; /**url*/ private String url; /**用户名*/ private String user; /**密码*/ private String password; /**初始化连接数*/ private int initCount; /**连接池中最大连接数*/ private int maxCount; /**当前使用连接数*/ private int currentCount=0; /**等待连接最长时间*/ private int wait=3000; /**输出日志流*/ private PrintWriter out; /**连接池*/ private Vector<ConnectionPool> connections; public DataSource(){ init(); initConnections(); } /** * 初始化 */ private void init(){ Properties prop=new Properties(); try { InputStream input=DataSource.class.getClassLoader().getResourceAsStream("dataSource.properties"); prop.load(input); driver=prop.getProperty("driver"); Class.forName(driver);//加载驱动 url=prop.getProperty("url"); user=prop.getProperty("user"); password=prop.getProperty("password"); String itCount=prop.getProperty("initCount"); initCount=itCount==null?1:Integer.parseInt(itCount); String mCount=prop.getProperty("maxCount"); maxCount=mCount==null?1:Integer.parseInt(mCount); connections=new Vector<ConnectionPool>(); out=new PrintWriter(new File("c:/datasouce.log"),"UTF-8"); } catch (Exception e) { e.printStackTrace(); writerLog(e.getMessage()); throw new RuntimeException("装载配置文件错误"); } } /** * 初始化连接池中数据库连接个数 * */ private void initConnections(){ for(int i=0;i<initCount;i++){ try { Connection conn=createConnection(); if(i==0){ DatabaseMetaData metaData=conn.getMetaData(); int dataCount=metaData.getMaxConnections(); writerLog("数据库最大连接数为:"+dataCount); if(dataCount>0&&maxCount>dataCount){ maxCount=dataCount; } } ConnectionPool pool=new ConnectionPool(conn); connections.addElement(pool); } catch (SQLException e) { e.printStackTrace(); writerLog(e.getMessage()); throw new RuntimeException("初始化连接池错误"); } } } /** * 创建连接对象 * @return 创建好的连接对象 * @throws SQLException */ private Connection createConnection() throws SQLException{ currentCount++; writerLog("当前正在使用连接数:"+currentCount); return DriverManager.getConnection(url,user,password); } /** * 当数据源中原有连接已用完时,就创建一个新的数据库连接对象到连接池中 * 且这个连接需要时才被创建,一旦创建就被使用 * @return * @throws SQLException */ private ConnectionPool createConnPool() throws SQLException{ Connection conn=createConnection(); ConnectionPool pool=new ConnectionPool(conn); pool.setBusy(true); writerLog("添加一个新的数据库连接对象到连接池中"); return pool; } /** * 从连接池中得到连接对象 */ public synchronized Connection getConnection() throws SQLException { if(connections==null){ writerLog("连接池已不存在"); return null; } Connection conn=findFreeConnection(); if(conn==null){ if(currentCount<=maxCount){ ConnectionPool conn1=createConnPool(); return conn1.getConn(); }else{ try { writerLog("正在等待数据库连接 ...."); Thread.sleep(wait); return findFreeConnection(); } catch (InterruptedException e) { writerLog(e.getMessage()); e.printStackTrace(); } } } return conn; } /** * 查找当前连接池中还有没有空闲连接 * @return Connection */ private Connection findFreeConnection(){ Connection conn=null; if(connections.size()>0){ Enumeration enu=connections.elements(); while(enu.hasMoreElements()){ ConnectionPool pool=(ConnectionPool)enu.nextElement(); if(!(pool.isBusy())){ conn=pool.getConn(); pool.setBusy(true); writerLog("找到一个空闲连接"); return conn; } } } return conn; } /** * 关闭连接对象(实际上并不是真正的关闭,而是将其状态置为空闲) * @param conn 要关闭连接对象 */ public synchronized void closeConnection(Connection conn){ currentCount--; if(connections.size()==0||connections==null){ writerLog("连接池已不存在"); return; } Enumeration enu=connections.elements(); while(enu.hasMoreElements()){ ConnectionPool pool=(ConnectionPool)enu.nextElement(); if(pool.getConn()==conn){ pool.setBusy(false); writerLog("关闭了当前连接"); break; } } out.close(); } /** * 单独创建一个连接,不从连接池中去取 */ public synchronized Connection getConnection(String username, String password)throws SQLException { writerLog("创建一个独立于连接池的连接对象"); return DriverManager.getConnection(url,username,password); } /** * 获得日志输出流 */ public PrintWriter getLogWriter() throws SQLException { return out; } /** * 设置日志输出流 */ public void setLogWriter(PrintWriter out) throws SQLException { this.out=out; } /** * 如果当前没有可用连接,设置等待时间 毫秒数 */ public void setLoginTimeout(int seconds) throws SQLException { this.wait=seconds; } /** * 或得系统等待连接时间 */ public int getLoginTimeout() throws SQLException { return wait; } private void writerLog(String errMessage){ out.append("#=========================================#\n"); out.append(errMessage+"\n"); out.append("#=========================================#\n"); } /** * 包装到连接池的连接对象 * @author newapps */ class ConnectionPool{ /**当前数据库创建连接*/ Connection conn; /**当前连接是否处于工作状态*/ boolean busy=false; /**构造函数*/ ConnectionPool(Connection conn){ this.conn=conn; } void setBusy(boolean busy){ this.busy=busy; } boolean isBusy(){ return busy; } void setConn(Connection conn){ this.conn=conn; } Connection getConn(){ return conn; } } }
配置文件(dateSource.properties)
#=================================================================================== #各种常用数据库驱动名称 #============mysql Driver==================== #com.mysql.jdbc.Driver #============oracle Driver=================== #oracle.jdbc.driver.OracleDriver #============pointbase Driver================ #com.pointbase.jdbc.jdbcUniversalDriver #============SQL Server Driver=============== #com.microsoft.jdbc.sqlserver.SQLServerDriver #============DB2 Driver====================== #com.ibm.db2.jdbc.app.DB2Driver #=================================================================================== #数据库连接url格式为:"jdbc:子协议:子协议名称//主机名:端口号/数据库名?属性名=属性值&属性名=属性值" #dbUser和dbPassword也可以通过:属性名=属性值方式传入。 #设置数据库的编码格式:useUnicode=true&characterEncoding=GBK #============mysql url============================================================== #jdbc:mysql://<machine_name><:port>/dbname #端口号:默认是 3306 #============oracle url============================================================= #jdbc:oracle:thin:@<machine_name><:port>:dbname #端口号:默认是 1521 #============pointbase url========================================================== #jdbc:pointbase:server://<machine_name><:port>/dbname #端口号:默认是 9092 #============SQL Server url========================================================= #jdbc:microsoft:sqlserver://<machine_name><:port>;DatabaseName=<dbname> #端口号:默认是 1433 #============DB2 url================================================================ #jdbc:db2://<machine_name><:port>/dbname #端口号:默认是 5000 #=================================================================================== #数据库驱动 driver=com.mysql.jdbc.Driver #数据库URL url=jdbc:mysql://127.0.0.1:3306/ajax #连接数据库用户 user=root #连接数据库密码 password=123 #初始化连接数 initCount=1 #连接池中最大连接数 maxCount=50
发表评论
-
java 解析数学表达式
2011-11-20 10:33 5655数学表达式解析工具类: 支持负数运算, 多层括号嵌套运算 ... -
java代码模拟计算机实现原理(一)加法器模拟
2011-09-29 23:30 3334加法器是有两种基本逻辑门电路:异或门、与门电路组成的 ... -
jar 命令简介
2011-02-16 09:55 1213jar 命令用途:采用zip和ZLIB的压缩格式,将一系列程序 ... -
javac 命令
2011-02-16 09:17 1340最简单的方式(javac -d)首先,需要编译JAVA文件,需 ... -
阿拉伯数组转换成对应中文
2011-02-12 11:52 1162package com.heda.code; publi ... -
java二叉树实现
2011-02-12 11:50 1075package com.heda.code; publi ... -
最大公约数和最小公倍数
2011-02-12 11:48 1042package com.heda.code; publi ... -
比较完整数据源实现
2010-06-12 21:35 1493package com.bpsoft.bl ... -
jxl 操作excel Demo
2010-05-25 16:02 1364程序是用:jxl技术来操作excel文档的,实现了excel插 ... -
Jacob操作Word详细教程
2010-05-11 21:16 5465首先, ... -
Java 正则表达式小结
2010-05-11 20:25 1500Java 中正则表达式是在Java 1.4版本以后才出现的。在 ... -
DOM写的xml工具类
2010-04-05 16:15 1410package xml_util; import j ... -
日志记录器
2010-03-12 23:12 992package log_util; import jav ... -
java1.5新特性枚举实现原理
2010-03-09 00:24 1161package com.bp_soft.day01; /** ... -
Struts 1实现原理之我理解
2010-03-06 23:23 1496Struts是在servlet基础上设计的一种框架。下面看一段 ... -
JDBC模板类实现(version1.1)
2010-01-30 14:34 1413package daoUtil.daoTemplate; ... -
BeanUtils.copyProperties(son, father)使用感想
2010-01-28 12:20 3180BeanUtils.copyProperties(son, f ... -
经典JDBC DAOFactory类实现
2010-01-09 23:02 2442package ajax.user.language.fact ... -
WEB应用中常用的数据库连接池
2009-12-26 16:07 1386数据库连接池是WEB应用中必不可少的东西,这是我个人最近参照别 ... -
非常好获得数据库连接工具类
2009-12-26 15:58 1835这是一个写的非常好的获得数据库连接工具类,里面提供常用数据库驱 ...
相关推荐
Weblogic JDBC 数据源配置和详细参数说明 一、JDBC 概述 JDBC(Java Database Connectivity)是 Java 语言中的一种标准数据库连接技术,几乎所有需要访问数据库的 J2EE 应用程序都直接或间接地使用了它。JDBC 提供...
**JDBC数据源连接池配置与使用详解** 在Java Web应用中,数据库连接的管理是至关重要的。为了提高性能和资源利用率,开发人员通常会使用数据源连接池。本篇文章将详细讲解JDBC数据源连接池的配置和使用,以帮助你更...
Java Web JDBC 数据源配置 Java Web JDBC 数据源是指在 Java Web 应用程序中使用 JDBC(Java Database Connectivity)技术来连接数据库的方式。在这个配置文件中,我们可以看到的是在 Tomcat 中的 conf 文件下,...
### SAP JDBC 数据源配置 #### 引言与目的 本文档旨在提供详细的步骤指南,用于在SAP NetWeaver 7.0 和 SAP Composite Environment (CE) 7.1 上配置 JDBC 数据源和系统。通过这些步骤,用户可以创建一个独立的数据...
在WebLogic控制台上创建JDBC数据源是连接数据库的关键步骤,这使得应用能够透明地访问数据库资源。下面我们将详细探讨这个过程。 1. **JDBC数据源的概念** JDBC数据源是WebLogic服务器中的一个对象,它封装了...
本文将详细讲解如何在WebSphere中创建JDBC数据源以及相关的项目部署步骤。 首先,理解JDBC(Java Database Connectivity)数据源是关键。JDBC数据源是一个在应用程序服务器中预先配置的数据库连接池,它允许应用...
在处理数据库连接方面,Tomcat提供了一种高效且可管理的数据源实现,名为“tomcat-jdbc数据源”。这个数据源是Tomcat内建的一种连接池,它在性能和内存管理上比标准的Java JDBC连接池更优秀,尤其适用于高并发的Web...
配置JDBC数据源是连接Java应用程序到特定数据库的关键步骤。以下将详细阐述配置JDBC数据源的过程,以及涉及的相关知识点。 首先,我们要了解JDBC的作用。JDBC为Java开发者提供了一种统一的API,使得开发者可以使用...
### Tomcat下配置JDBC数据源详解 #### 一、引言 在Java Web开发中,JDBC(Java Database Connectivity)是一种用于执行SQL语句的标准Java API,它为数据库开发提供了一种统一的方式。而在实际应用中,为了提高程序...
【关于WebSphere建立jdbc数据源】 在WebSphere应用服务器中,建立JDBC数据源是连接到数据库的关键步骤,它允许应用程序通过Java Database Connectivity (JDBC) API与数据库进行交互。以下是一个详细的步骤指南: 1...
配置JDBC数据源是Java应用程序连接到特定数据库的关键步骤,下面将详细介绍如何配置JDBC数据源,以连接到MS SQL Server数据库为例。 1. **打开控制面板**: 在Windows操作系统中,配置JDBC数据源通常通过控制面板...
在IBM WebSphere Application Server 6.1中配置JDBC数据源是将应用程序连接到数据库的关键步骤。这个过程涉及创建和配置JDBC提供程序、数据源以及相关的认证别名,以确保应用程序能够顺利地访问和操作数据库。以下是...
### Java Web 网络留言板2 JDBC数据源与连接池技术 #### 一、概述 在Java Web开发中,留言板是一种常见的应用场景,用于收集用户的反馈信息。本文档介绍了一个具体的项目——“Java Web网络留言板2”,它利用了...
本文将详细讲解JDBC数据源连接池的配置和应用。 首先,让我们了解JDBC建立数据库连接的两种基本方式: 1. **使用DriverManager获得数据库连接**: 这是最基础的方法,程序员在代码中显式地加载驱动、创建连接。...
采用jdbc数据源连接方式,数据库用户名:sa 密码:123 将"运行文件"文件夹下的目录放在tomcat下的webapps文件夹下 启动数据库,启动tomcat服务器 在IE中输入:http://localhost:8080/CDxx/ 即可打开首页 ...
在本文中,我们将深入探讨如何在SpringBoot项目中整合JDBC和Druid数据源,并创建一个具有监控功能的示例。SpringBoot以其简洁的配置和快速的开发能力,深受Java开发者喜爱。而Druid作为一款优秀的数据库连接池,提供...
本篇将详细介绍如何在SpringBoot项目中整合Sharding-JDBC,实现在运行时动态地从数据库加载数据源,以及实现数据库方言的动态切换。 首先,Sharding-JDBC提供了两种使用模式:标准版和代理版。在标准版中,Sharding...