JDBC入门技术:如何使用连接池技术连接数据库
来源:互联网 发布:淘宝联系客服链接 编辑:程序博客网 时间:2024/06/06 04:20
工具:Myeclipse(eclipse)
知识点:线程(Thread)/连接池概念/IO流操作(Properties)
jar包
commons-collections4-4.0.jar
commons-dbcp-1.4.jar
commons-pool-1.6.jar
Oracle 11g 11.2.0.1.0 JDBC_ojdbc6.jar
步骤:
1
创建:
数据库连接池对象BasciDataSource(不初始化)
线程对象ThreaLocal对象(不初始化)
配置文件对象Properties对象<>
配置文件路径对象InputStream对象<>
2.
获取
初始化数据库连接池对象
使用连接池对象获取配置文件中的信息
(如果要将字符串转换为int类型.使用包装对象)
3.初始化
初始化线程对象
4.创建连接方法
覆盖Connection中的getConnection()函数
注意:使用数据库连接池对象获取,
使用线程对象进行保存连接对象
覆盖close()函数:
注意:
使用线程获取的对象将对象来释放资源.
这里将资源释放并不是将Connection对象连接关闭,
而是将连接归还给连接池,给接下来的线程使用
比如:此时使用某一种东西.用完之后就会放回原处,给下一个人使用,
这两可以重复使用减少数据库的开销
为何要使用数据库连接池?
数据库连接的建立及关闭资源消耗巨大
传统数据访问方式:一次数据库访问对应一个物理连接.
每次操作数据库都要打开,
关闭物理连接,系统性能严重受损
解决方案:
系统初始运行时,主动建立足够的连接,组成一个池.
每次应用程序请求数据连接时无需重新打开连接,
而是从池中取出连接,使用完后,不在关闭而是归还..
连接池中的使用规则:
应用启动时.创建初始化数目的连接..
当申请时无连接可用或者达到指定的最小连接数,
按增量参数值创建新的连接
为确保连接池中最小连接数的策略
动态检查:定时检查连接池,一旦发现数量小于最小连接数.
则补充相应的新连接,保证连接池正常运转
静态检查
空闲连接不足时,系统才检测是否达到最小连接数
按需分配,用过归还,超时归还
相当于:
客户端和数据库中间有一个连接池(抽象概念)
知识点:线程(Thread)/连接池概念/IO流操作(Properties)
jar包
commons-collections4-4.0.jar
commons-dbcp-1.4.jar
commons-pool-1.6.jar
Oracle 11g 11.2.0.1.0 JDBC_ojdbc6.jar
步骤:
1
创建:
数据库连接池对象BasciDataSource(不初始化)
线程对象ThreaLocal对象(不初始化)
配置文件对象Properties对象<>
配置文件路径对象InputStream对象<>
2.
获取
初始化数据库连接池对象
使用连接池对象获取配置文件中的信息
(如果要将字符串转换为int类型.使用包装对象)
3.初始化
初始化线程对象
4.创建连接方法
覆盖Connection中的getConnection()函数
注意:使用数据库连接池对象获取,
使用线程对象进行保存连接对象
覆盖close()函数:
注意:
使用线程获取的对象将对象来释放资源.
这里将资源释放并不是将Connection对象连接关闭,
而是将连接归还给连接池,给接下来的线程使用
比如:此时使用某一种东西.用完之后就会放回原处,给下一个人使用,
这两可以重复使用减少数据库的开销
为何要使用数据库连接池?
数据库连接的建立及关闭资源消耗巨大
传统数据访问方式:一次数据库访问对应一个物理连接.
每次操作数据库都要打开,
关闭物理连接,系统性能严重受损
解决方案:
系统初始运行时,主动建立足够的连接,组成一个池.
每次应用程序请求数据连接时无需重新打开连接,
而是从池中取出连接,使用完后,不在关闭而是归还..
连接池中的使用规则:
应用启动时.创建初始化数目的连接..
当申请时无连接可用或者达到指定的最小连接数,
按增量参数值创建新的连接
为确保连接池中最小连接数的策略
动态检查:定时检查连接池,一旦发现数量小于最小连接数.
则补充相应的新连接,保证连接池正常运转
静态检查
空闲连接不足时,系统才检测是否达到最小连接数
按需分配,用过归还,超时归还
相当于:
客户端和数据库中间有一个连接池(抽象概念)
相当于生活中接口转换器一样
package com.csdn.jdbcdemo.date2017_11_12;//如何使用连接池技术连接数据库import java.io.InputStream;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.util.Properties;import org.apache.commons.dbcp.BasicDataSource;public class BasicDataSourceDemo {//创建连接池对象private static BasicDataSource bs;//创建多线程对象private static ThreadLocal<Connection> td ;static{try{//配置对象Properties properties = new Properties();//配置文件路径InputStream is = BasicDataSourceDemo.class.getClassLoader().getResourceAsStream("com/csdn/jdbcdemo/date2017_11_13/propertis.txt");//初始化连接池properties.load(is);is.close();bs = new BasicDataSource();//驱动器//Class.forName("oracle.jdbc.driver.OracleDriver")bs.setDriverClassName(properties.getProperty("driver"));//数据库路径bs.setUrl(properties.getProperty("url"));//数据库用户名bs.setUsername(properties.getProperty("username"));//数据库的密码bs.setPassword(properties.getProperty("password"));//线程初始化数量bs.setInitialSize(Integer.parseInt(properties.getProperty("initsize")));//线程最大数量bs.setMaxActive(Integer.parseInt(properties.getProperty("maxactive")));//最大等待时间bs.setMaxWait(Integer.parseInt(properties.getProperty("maxwait")));//最小空闲时间bs.setMinIdle(Integer.parseInt(properties.getProperty("minidle")));//最大空闲时间bs.setMaxIdle(Integer.parseInt(properties.getProperty("maxidle")));//初始化线程td = new ThreadLocal<Connection>();}catch(Exception e){e.printStackTrace();}}//获取连接public static Connection getConnection() throws SQLException{Connection connection = bs.getConnection();td.set(connection);return connection;}//断掉连接public static void closeConnection(){try{//Connection connection = td.get();if(connection != null){connection.close();}}catch(Exception e){e.printStackTrace();}}}
下面是实现代码:事先数据库连接池技术:
package com.csdn.jdbcdemo.date2017_11_12;import java.sql.Connection;import java.sql.ResultSet;import java.sql.Statement;public class BasicDataSourceDemo2 {public static void main(String[] args) {try{//连接Connection connection = BasicDataSourceDemo.getConnection();//创建DB对象Statement state = connection.createStatement();//SQL语句String sql = "SELECT * FROM USER_INFO";//处理结果集ResultSet rs = state.executeQuery(sql);//遍历结果while(rs.next()){System.out.println(rs.getString("ENAME")+" "+rs.getInt("ID")+" "+rs.getInt("SAL")+" "+rs.getString("EMAIL"));}state.close();rs.close();}catch(Exception e){e.printStackTrace();}finally{BasicDataSourceDemo.closeConnection();}}}
配置文件信息
#这个是驱动名driver=oracle.jdbc.driver.OracleDriver#这个是数据库路径url=jdbc:oracle:thin:@<域名>:1521:<SID>#这个是数据库用户名username=xxxxxx#这个是数据库密码password=xxxxx#线程初始化数量initsize=1#线程最大活动数量maxactive=1#线程等待时间maxwait=5000#线程空闲最小数量minidle=1#线程最大数量maxidle=1
阅读全文
0 0
- JDBC入门技术:如何使用连接池技术连接数据库
- JDBC技术连接数据库
- java使用JDBC技术连接数据库操作方法
- JDBC连接池技术
- JDBC连接池技术
- JDBC连接池技术总结
- JDBC连接数据库的技术演进
- Java运用JDBC技术连接Mysql数据库
- day_9使用数据库连接池技术连接数据库
- 关于JDBC入门:如何连接数据库
- JDBC入门 连接数据库
- jdbc入门、jdbc连接数据库
- 数据库与连接池技术
- [JDBC] 如何连接数据库
- Java技术回顾之JDBC:连接池
- jdbc pool java连接池技术
- jdbc pool java连接池技术
- Java技术回顾之JDBC:连接池
- [线性代数]遗留问题
- python: 下划线 使用
- Spring、Spring MVC、MyBatis 整合文件配置详解
- map和set增删查改
- Kali下 如何安装 Nessus
- JDBC入门技术:如何使用连接池技术连接数据库
- MVC(Model View Controller)模型-视图-控制器
- 代理模式
- Android系统架构与系统源码目录
- 格式错误 1008. 数组元素循环右移问题
- centos下 etcd 简单使用
- linux下位图结构解析
- Java中的hashcode 和 equals
- 计算马路上还有多少棵树