上一篇文章简单介绍了数据库连接池的基本原理实现,链接:数据库连接池的简单实现
这里我们介绍两种常用数据库连接池的使用:
1.DBCP数据库连接池:
package com.itheima.jdbc; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import org.apache.commons.dbcp.BasicDataSource; public class DBCPDemo { public static void main(String[] args) { Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { BasicDataSource source = new BasicDataSource(); source.setDriverClassName("com.mysql.jdbc.Driver"); source.setUrl("jdbc:mysql://localhost:3306/day11"); source.setUsername("root"); source.setPassword("root"); conn = source.getConnection(); ps = conn.prepareStatement("select * from account"); rs = ps.executeQuery(); while(rs.next()) { String name = rs.getString(2); String salary = rs.getString(3); System.out.println(name + " : " + salary); } } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } finally { if(rs != null) { try { rs.close(); } catch (SQLException e) { rs = null; } } if(ps != null) { try { ps.close(); } catch (SQLException e) { ps = null; } } if(conn != null) { try { conn.close(); } catch (SQLException e) { conn = null; } } } } }
这里需要导入相应的dbcp jar包,这里我就不提供了。
以上代码是通过set方法设置类加载路径、url、数据库用户名和密码,此外我们还可以通过properties文件进行配置。
properties文件内的属性名称和setXXX方法对应,只是首字母小写。
dbcp-config.properties文件内容如下:
#类加载路径 driverClassName=com.mysql.jdbc.Driver #url数据库访问路径 url=jdbc:mysql://localhost:3306/day11 #用户名 username=root #密码 password=root
package com.itheima.jdbc; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Properties; import javax.sql.DataSource; import org.apache.commons.dbcp.BasicDataSourceFactory; public class DBCPDemo { private static Properties properties = new Properties(); static { try { properties.load(new FileReader("dbcp-config.properties")); } catch (FileNotFoundException e) { e.printStackTrace(); throw new RuntimeException(e); } catch (IOException e) { e.printStackTrace(); throw new RuntimeException(e); } } public static void main(String[] args) { Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { BasicDataSourceFactory factory = new BasicDataSourceFactory(); DataSource source = factory.createDataSource(properties); conn = source.getConnection(); ps = conn.prepareStatement("select * from account"); rs = ps.executeQuery(); while(rs.next()) { String name = rs.getString(2); String salary = rs.getString(3); System.out.println(name + " : " + salary); } } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } finally { if(rs != null) { try { rs.close(); } catch (SQLException e) { rs = null; } } if(ps != null) { try { ps.close(); } catch (SQLException e) { ps = null; } } if(conn != null) { try { conn.close(); } catch (SQLException e) { conn = null; } } } } }
#数据库连接池初始化连接数 initialSize=10 #数据库连接池最大连接数 maxActive=50 #数据库连接池最小空闲连接数 minIdle=5 #数据库连接池最大空闲连接数 maxIdle=20 #等待超时,当一个链接空闲时间超过该时间,该链接定义为空闲连接 maxWait=60000
package com.itheima.jdbc; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import com.mchange.v2.c3p0.ComboPooledDataSource; public class C3P0Demo { public static void main(String[] args) { Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { ComboPooledDataSource source = new ComboPooledDataSource(); source.setDriverClass("com.mysql.jdbc.Driver"); source.setJdbcUrl("jdbc:mysql://localhost:3306/day11"); source.setUser("root"); source.setPassword("root"); conn = source.getConnection(); ps = conn.prepareStatement("select * from account"); rs = ps.executeQuery(); while(rs.next()) { String name = rs.getString(2); String salary = rs.getString(3); System.out.println(name + " : " + salary); } } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } finally { if(rs != null) { try { rs.close(); } catch (SQLException e) { rs = null; } } if(ps != null) { try { ps.close(); } catch (SQLException e) { ps = null; } } if(conn != null) { try { conn.close(); } catch (SQLException e) { conn = null; } } } } }
以下是官方文档的叙述:
By default, c3p0 will look for an XML configuration file in its classloader‘s resource path under the name "/c3p0-config.xml". That means the XML file should be placed in a directly or jar file directly named in your applications CLASSPATH, in WEB-INF/classes,
or some similar location.
(也就是说:名字必须为c3p0-config.xml,文件位置:类加载路径下,即eclipse的src目录下)
package com.itheima.jdbc; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import com.mchange.v2.c3p0.ComboPooledDataSource; public class C3P0Demo { public static void main(String[] args) { Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { //如果不通过setXXX方法设置属性,则会自动到类加载目录下查找c3p0-config.xml文件 //查找到后默认使用<default-config>标签下的配置信息,也可以在构造source对象时传入 //配置的名称,即ComboPooledDataSource source = new ComboPooledDataSource("myconfig"); //当然c3p0-config.xml文件里配置了<default-config>和<named-config>,一般情况下使用其中一个就行了。 ComboPooledDataSource source = new ComboPooledDataSource(); conn = source.getConnection(); ps = conn.prepareStatement("select * from account"); rs = ps.executeQuery(); while(rs.next()) { String name = rs.getString(2); String salary = rs.getString(3); System.out.println(name + " : " + salary); } } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } finally { if(rs != null) { try { rs.close(); } catch (SQLException e) { rs = null; } } if(ps != null) { try { ps.close(); } catch (SQLException e) { ps = null; } } if(conn != null) { try { conn.close(); } catch (SQLException e) { conn = null; } } } } }
<?xml version="1.0" encoding="utf-8"?> <c3p0-config> <default-config> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/day11</property> <property name="user">root</property> <property name="password">root</property> </default-config> <named-config name="myconfig"> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/day11</property> <property name="user">root</property> <property name="password">root</property> </named-config> </c3p0-config>
此外xml文件还可以配置其他参数,这里就不一一赘述了,官方文档写的很清楚。
原文地址:http://blog.csdn.net/m631521383/article/details/40476233