- 浏览: 656633 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (173)
- ajax (4)
- ant (4)
- css (14)
- eclipse (1)
- exe4j (0)
- hibernate (7)
- html (29)
- http (2)
- install4j (0)
- java (35)
- javascript (31)
- jdbc (1)
- jquery (2)
- jsp (15)
- linux命令 (8)
- ooad (2)
- properties (3)
- servlet (1)
- spring (3)
- struts (6)
- swing (4)
- thread (2)
- version_control (1)
- webservice (4)
- xml (4)
- 数据库 (19)
- 正则表达式 (5)
- 其他 (16)
- 面试题 (1)
- 框架 (9)
- maven (1)
- util (29)
- 设计模式 (1)
最新评论
-
herodie4444:
看起来好像不难。
Java Struts2创建Excel文件并实现文件下载 -
心轨翼:
Java遍历Set集合方法 -
魔鬼的献祭:
...
java的web开发分页工具类 -
Nmxszxsl:
能发一个没有被墙的代码到我的邮箱吗?万分感谢。54365156 ...
Google翻译post提交无长度限制的在线翻译例子 -
782763595:
...
jar包混淆器介绍
这是一个数据库连接池实现的例子,简单实现,含连接等待处理。
配置文件读取类:
工程项目目录下的文件:conf/database.properties
内容:
调用:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.LinkedList; import org.lt.cj.config.ServerProperty; //代理连接类 public class MyDataSource { private static MyDataSource instance = new MyDataSource(); private static String driver = "com.mysql.jdbc.Driver"; private static String url = "jdbc:mysql://127.0.0.1:3306/tmall"; private static String user = "root"; private static String password = "123456"; private static int initCount = 3; // 初始化连接数 private static int maxCount = 10; // 最大连接数 private static int timeout = 100; //连接用完后再次获取连接间隔时间(毫秒) int currentCount = 0; // 当前连接数 // LinkedList方便入列出列操作,性能比ArrayList好 private final LinkedList<Connection> connectionsPool = new LinkedList<Connection>(); public MyDataSource() { try { for (int i = 0; i < this.initCount; i++) { // 把初始化的连接对象存放到链表里面 this.connectionsPool.addLast(this.createConnection()); this.currentCount++; } } catch (SQLException e) { throw new ExceptionInInitializerError(e); } } public static MyDataSource getInstance() { return instance; } //静态内部类在没有新建对象的情况下也可以加载 static { ServerProperty sp = new ServerProperty(); driver = sp.getValue("driver"); url = sp.getValue("databaseUrl"); user = sp.getValue("username"); password = sp.getValue("password"); initCount = Integer.parseInt(sp.getValue("initCount")); maxCount = Integer.parseInt(sp.getValue("maxCount")); timeout = Integer.parseInt(sp.getValue("timeout")); sp.closeI(); try { Class.forName(driver);// 加载驱动程序,供调用,只执行一次 } catch (ClassNotFoundException e) { throw new ExceptionInInitializerError(e); } } public Connection getConnection() { synchronized (connectionsPool) { if (this.connectionsPool.size() > 0) { // 从链表里面删除头一个连接对象,并返回该连接对象 return this.connectionsPool.removeFirst(); } if (this.currentCount < maxCount) { try { this.currentCount++; return this.createConnection(); } catch (SQLException ex) { return null; //无法创建连接,返回空 } } return getConnection(timeout); } } /** * 根据指定延时取得一个连接 */ public synchronized Connection getConnection(long timeout) { Connection con = null; while ((con = getConnection()) == null) { try { Thread.sleep(timeout); } catch (InterruptedException e) { } } return con; } // 释放连接,把当前连接加到链表尾,并没有真正关闭 public void free(Connection conn) { synchronized (connectionsPool) { this.connectionsPool.addLast(conn); } } // 父类引用指向子类对象,生成一个实现对象供使用 private Connection createConnection() throws SQLException { return DriverManager.getConnection(url, user, password); } }
配置文件读取类:
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class ServerProperty { private Properties prop = null; private InputStream in = null; public ServerProperty() { initProperty(); } public ServerProperty(String path) { try { prop = new Properties(); in = new FileInputStream(path); } catch (FileNotFoundException ex) { } } private void initProperty() { try { prop = new Properties(); in = new FileInputStream("conf/database.properties"); } catch (FileNotFoundException ex) { } } private void setIs() { try { if (in == null) { in = new FileInputStream("conf/database.properties"); } } catch (IOException ex) { } } public Properties getProperty() { try { setIs(); prop.load(in); } catch (IOException ex) { } return prop; } public String getValue(String key) { String value = ""; try { setIs(); prop.load(in); value = prop.getProperty(key); } catch (IOException ex) { } return value; } public void closeI() { try { if (in != null) { in.close(); } } catch (IOException ex) { } } }
工程项目目录下的文件:conf/database.properties
内容:
#Oracle config# #driver=oracle.jdbc.driver.OracleDriver #url=jdbc:oracle:thin:@192.168.0.23:1521:ora10g #user=openlab #password=open123 #Mysql config# driver=com.mysql.jdbc.Driver databaseUrl=jdbc:mysql://127.0.0.1:3306/tmall username=root password=123456 #初始连接数 initCount=3 #最大连接数 maxCount=20 #连接用完后再次获取连接间隔时间(毫秒) timeout=100
调用:
import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; public class CollectImpl implements ICollectDao { private static final MyDataSource ds = new MyDataSource(); private static Connection conn = null; public Connection getConnection() { return (Connection) ds.getConnection(); } //释放操作 public void closePsRs(PreparedStatement ps, ResultSet rs) { try { if (ps != null) { ps.close(); } if (rs != null) { rs.close(); } } catch (SQLException ex) { } } public void free(Connection conn) { ds.free(conn); } //对分类表进行操作 public void insertCategory(String name, int firstCate, int secondCate, String lanFrom, String toLan, int updated) { conn = getConnection(); System.out.println("---------" + conn); PreparedStatement ps = null; ResultSet rs = null; String sql = "INSERT INTO `" + lanFrom + "_category` (`name`,`first_cate`,`second_cate`,`orig_lan`,`to_lan`,`updated`) VALUES(?,?,?,?,?,?)"; try { ps = (PreparedStatement) conn.prepareStatement(sql); ps.setString(1, name); ps.setInt(2, firstCate); ps.setInt(3, secondCate); ps.setString(4, lanFrom); ps.setString(5, toLan); ps.setInt(6, updated); ps.executeUpdate(); } catch (SQLException ex) { } finally { closePsRs(ps, rs); free(conn); } } }
发表评论
-
hibernate的clob数据处理
2014-05-21 17:11 1026hibernate的clob数据处理: import or ... -
oracle计划任务
2014-04-17 17:38 1002Oracle 在10g 版本以前,计划任务用的是DBMS_JO ... -
Oracle服务器端数据导出导入
2014-04-17 16:53 1419一、数据操作前的准备 (1).创建逻辑目录 登录数据库服务器, ... -
Oracle存储过程删除大批量数据
2014-03-23 01:13 3673参考:http://www.eygle.com/archive ... -
oracle函数
2014-01-21 16:08 1115此文章为我网上搜集的基础上添加了一些新的oracle函数, ... -
Oracle分页查询解析
2012-12-26 22:19 970Oralce的分页查询 分页查询:可以简化表复杂度,让一张很 ... -
基于hibernate的数据持久化处理简单实现类
2012-09-26 20:03 1658package com.forveross.plane.s ... -
Mysql无法远程连接的问题解决
2011-11-11 14:39 10111、Mysql的端口是否正确 通过netstat -ntlp ... -
MySQL创建用户与授权
2011-11-11 11:43 928一, 创建用户: 命令:CREATE USER ... -
org.hibernate.MappingException: No Dialect mapping for JDBC type: -1 解决方法(转)
2011-09-22 16:13 3634org.hibernate.MappingException: ... -
讲解数据库调优与程序员相关的几个方面
2011-07-29 01:02 770许多程序员在面试时,经常会被问到 “数据库调优”的事情,这时, ... -
Mysql/SQLServer数据类型对应的JDBC类型、JAVA类型、数据类型长度速查表
2011-05-26 21:25 1717Mysql ************************ ... -
修改mysql数据库表结构语句
2011-04-26 14:01 1203修改本地域名IP映射,修改hosts文件,在文件末尾添加一行这 ... -
MySQL数据库InnoDB和MyISAM引擎区别总结(整理)
2011-04-18 13:23 2795我用MySQL的时候用的是Na ... -
Mysql触发器
2011-03-31 16:02 1383Mysql的触发器和存储过程一样,都是嵌入到mysql的一段 ... -
mysql触发器的实战经验 (转)
2011-03-31 15:59 13081 引言 Mysql的触发器和存储过程一样,都是嵌入到m ... -
MySQL索引
2011-03-31 13:53 1162索引用来快速地寻找那 ... -
mysql limit查询优化
2010-03-30 23:58 882MYSQL的优化是非常重要的。其他最常用也最需要优化的就是li ...
相关推荐
* 数据库连接池对应C++中的一个数据库连接对象,即`单例模式` * 连接池中包括数据库服务器连接对应的IP,端口,用户,密码等信息 * 对数据库对象存入`STL`当中,需要设置最大值,最小值限制队列 * 多线程从连接池中...
对于同一套数据库逻辑设计,不同的数据库产品有不同的实现方法,下面的表格列出了不同数据库产品的实现技术。 逻辑架构 实现技术 对称多处理器(SMP) 基本所有商业数据库都支持 Sharing Nothing架构(多分区数据库) ...
可以实现单表在不同的数据库中移动。 # 4.空间可以回收(除drop table操作处,表空不能自已回收) # 缺点: # 单表增加过大,如超过100G # 结论: # 共享表空间在Insert操作上少有优势。其它都没独立表空间表现好。...
# 连接池最大阻塞等待时间(使用负值表示没有限制) fat.redis.pool.max-wait=-1 # 连接池中的最大空闲连接 fat.redis.pool.max-idle=10 # 连接池中的最小空闲连接 fat.redis.pool.min-idle=2 # 连接超时时间(毫秒...
百度云盘分享 ... Java实现的FTP连接与数据浏览程序,实现实例化可操作的窗口。 部分源代码摘录: ftpClient = new FtpClient(); //实例化FtpClient对象 String serverAddr=jtfServer.getText();...
Druid 1.1.10 数据库连接池 OSS 2.5.0 对象存储 JWT 0.9.1 跨域身份验证解决方案 Lombok 1.18.6 简化对象封装工具 Junit 4.12 单元测试框架 Logback 1.2.3 日志框架 Java doc ———— API帮助文档 Docker 18.09.6 ...
Java实现的FTP连接与数据浏览程序,实现实例化可操作的窗口。 部分源代码摘录: ftpClient = new FtpClient(); //实例化FtpClient对象 String serverAddr=jtfServer.getText(); //得到服务器地址 ...
TxClient的代理连接池实现了javax.sql.DataSource接口,并重写了close方法,事务模块在提交关闭以后TxClient连接池将执行"假关闭"操作,等待TxManager协调完成事务以后在关闭连接。 对于代理连接池的优化 自动超时...
wait()是Object类的方法,对此对象调用了wait方法导致本线程放弃对象锁,进入等待锁定池,只有针对此对象发出notify方法后本线程才进入对象锁定池准备获得对象锁进入运行状态。 同步和异步,在什么情况下分别使用? ...
wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。 17、...
8.3.3使用isAlive()和join()等待子线程结束273 8.3.4设置线程优先级275 8.4线程的通信与协调277 8.4.1线程的互斥277 8.4.2线程的同步279 8.4.3暂停、恢复和停止线程282 8.4.4生产者-消费者问题实例284 8.5本...
说明:用于连接到oracle数据库,也可实现用户的切换 用法:conn 用户名/密码 [as sysdba/sysoper] 注意:当用特权用户连接时,必须带上sysdba或sysoper 例子: 3. 断开连接(disc) 说明:断开与当前数据库的连接 ...
没有连接池自然有其利弊,最大的好处在于等待获取连接的等待时间没有了,也不会因为连接池里面的连接由于没有正确释放等原因导致无限等待而处于死锁状态。缺点在于一些低质量的代码可能导致服务器资源耗尽。不过提供...
(2)实现资源池,例如数据库连接池 (3)使用信号量将任何一种容器变成有界阻塞容器 栅栏 能够阻塞一组线程直到某个事件发生 栅栏和闭锁的区别 所有线程必须同时到达栅栏位置,...
百度地图毕业设计源码 义码当仙之并发编程 一、多线程基础 示例项目:concurrency01-thread-basis 进程与线程 每个正在系统上运行的...数据库连接池 迅雷下载 此时采用多线程,只能提高下载效率,并不能提高下载速度
第4章 异常处理(教学视频:62分钟) 54 4.1 编译时异常 54 实例35 除0发生的算术异常(ArithmeticException) 54 实例36 数组下标越界异常(ArrayIndexOutOfBoundsException) 55 实例37 数组元素...