java_web学习第十一天(jdbc数据库驱动------数据库连接池)
2013-09-13 15:12
585 查看
数据库连接池: 就是将链接数据库的链接保存到一个池子中,用的时候从池子中获取数据库连接,不用的时候将其放到池子中国,。 连接池就是用来存放数据库的链接。 传统方式: 要连接数据库的时候,获取数据库,然后执行操作,用完之后,关闭数据库连接。 连接池方式: 在启动数据库驱动的时候,就在连接池中存放几条数据库的链接,应用程序要操作数据库的时候,只要去池子中获取连接,执行操作,之后将链接放在池子中,就可以了。 原因:用户每次请求都需要向数据库获得连接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长。 自己自定义数据库连接池:
dataSource.properties配置文件:
jdbcUrl:jdbc:mysql://localhost:3306/jdbc user:root password:root driverName:com.mysql.jdbc.Driver poolSize:5
自定义数据库连接池:
package com.enterise.always.servlet; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.LinkedList; import java.util.Properties; import javax.sql.DataSource; /** * 数据库连接池 * * @author Always * */ public class MyDataSource implements DataSource { // 鏈錶連接池 private static LinkedList<Connection> connPool = new LinkedList<Connection>(); private static LinkedList<Connection> prePool = new LinkedList<Connection>(); private static int poolSize = 5; private static Properties properties = new Properties(); static { // 1.获取配置信息 InputStream inStream = MyDataSource.class.getClassLoader() .getResourceAsStream("/dataSource.properties"); // 2.加载配置信息资源 try { properties.load(inStream); inStream.close(); // 3.注册驱动器 Class.forName(properties.getProperty("driverName")); // 4获取数据库连接数 poolSize = Integer.parseInt(properties.getProperty("poolSize")); // 5.批量添加数据库链接 addConnNum(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } /** * 添加数据库链接 * * @throws SQLException */ public static void addConnNum() throws SQLException { for (int i = 0; i < poolSize; i++) { Connection connection = DriverManager.getConnection(properties .getProperty("jdbcUrl"), properties.getProperty("user"), properties.getProperty("password")); connPool.add(connection); } } public Connection getConnection() throws SQLException { Connection conn = null; if (connPool.size() > 0) { conn = connPool.getFirst(); prePool.add(conn); connPool.removeFirst(); } else { // 再添加链接数 addConnNum(); // 再次链接 getConnection(); } return conn; } /** * 关闭链接 * * @param conn */ public void closeConn(Connection conn) { connPool.add(conn); prePool.remove(conn); } public Connection getConnection(String username, String password) throws SQLException { return null; } public PrintWriter getLogWriter() throws SQLException { return null; } public int getLoginTimeout() throws SQLException { return 0; } public void setLogWriter(PrintWriter out) throws SQLException { } public void setLoginTimeout(int seconds) throws SQLException { } public boolean isWrapperFor(Class arg0) throws SQLException { return false; } public Object unwrap(Class arg0) throws SQLException { return null; } }
开源的数据库连接池: DBCP 数据库连接池 C3P0 数据库连接池 DBCP: DBCP 是 Apache 软件基金组织下的开源连接池实现. jar包: Commons-dbcp.jar,Commons-pool.jar private static BasicDataSource dataSource = new BasicDataSource(); //设置数据源的参数。 dataSource.setUrl("jdbc:mysql://localhost:3306/jdbc"); dataSource.setUsername("root"); dataSource.setPassword("root"); dataSource.setInitialSize(10); 或者: InputStream inStream = DBCPDataSource.class.getClassLoader().getResourceAsStream("/dataSource.properties"); Properties properties = new Properties(); try { properties.load(inStream); inStream.close(); DataSource ds = BasicDataSourceFactory.createDataSource(properties); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } C3P0: private static ComboPooledDataSource dataSource = new ComboPooledDataSource(); static { try { dataSource.setDriverClass("com.mysql.jdbc.Driver"); } catch (PropertyVetoException e) { e.printStackTrace(); } dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/jdbc"); dataSource.setPassword("root"); dataSource.setUser("root"); } 或者: private static ComboPooledDataSource dataSource = new ComboPooledDataSource("/dataSource.properties");
相关文章推荐
- java_web学习第十天(JDBC数据库驱动----分页、事务)
- java_web学习第九天(JDBC数据库驱动------基础知识)
- 尽管关于Java中文问题的讨论已经相当多了,但由于Java的相关技术标准繁多,面向Java的Web服务器、应用服务器以及JDBC数据库驱动等都没有官方的标准,所以Java应用在处理中文时所存在的问
- javaweb--jdbc--数据库操作学习笔记
- Java嵌入式数据库H2学习总结(三)——在Web应用中嵌入H2数据库
- Java Web 4.2 JDBC访问数据库
- Java学习笔记4-JDBC数据库连接池
- java学习--数据库编程(JDBC基础概念)
- Java嵌入式数据库H2学习总结(三)——在Web应用中嵌入H2数据库(转)
- java_与sql_server_2005(2000)数据库连接_基类(jdbc驱动)(1)
- JAVA学习7:在Maven仓库中添加Oracle JDBC驱动
- java web 学习 --第十一天(Java三级考试)
- java的JDBC驱动使用链接数据库
- JAVA-数据库之MySQL与JDBC驱动下载与安装
- Java WEB之JDBC连接数据库的增删改查
- 【Java学习-J.160430.0.15】笔记8-使用JDBC连接数据库
- java_与sql_server_2005(2000)数据库连接_基类(jdbc驱动)(2)
- sqlite 数据库批量更新 java 驱动 JDBC
- 深入分析JavaWeb Item28 -- 使用JDBC对数据库进行CRUD
- java学习笔记之jdbc连接数据库