Day32_JDBC连接池

Posted 黑盒思考

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Day32_JDBC连接池相关的知识,希望对你有一定的参考价值。

《Java自学180天笔记》

实现:

1. 标准接口:DataSource   javax.sql包下的

    1. 方法:

                * 获取连接:getConnection()

                * 归还连接:Connection.close()。如果连接对象Connection是从连接池中获取的,那么调用Connection.close()方法,则不会再关闭连接了。而是归还连接

调用JdbcTemplate的方法来完成CRUD的操作

        * update():执行DML语句。增、删、改语句

        * queryForMap():查询结果将结果集封装为map集合,将列名作为key,将值作为value 将这条记录封装为一个map集合

                * 注意:这个方法查询的结果集长度只能是1

        * queryForList():查询结果将结果集封装为list集合

                * 注意:将每一条记录封装为一个Map集合,再将Map集合装载到List集合中

        * query():查询结果,将结果封装为JavaBean对象

            * query的参数:RowMapper

                * 一般我们使用BeanPropertyRowMapper实现类。可以完成数据到JavaBean的自动封装

                * new BeanPropertyRowMapper<类型>(类型.class)

        * queryForObject:查询结果,将结果封装为对象

                * 一般用于聚合函数的查询

c3p0-config.xml

<c3p0-config> <!-- 使用默认的配置读取连接池对象 --> <default-config> <!-- 连接参数 --> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/day14</property> <property name="user">root</property> <property name="password">1234</property>  <!-- 连接池参数 --> <property name="initialPoolSize">5</property> <property name="maxPoolSize">10</property> <property name="checkoutTimeout">3000</property> </default-config>

c3p0_基本使用

package cn.itcast.datasource.c3p0;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import javax.sql.DataSource;import java.sql.Connection;import java.sql.SQLException;
/** * c3p0的演示 */public class C3P0Demo { public static void main(String[] args) throws SQLException { //1.创建数据库连接池对象 DataSource ds = new ComboPooledDataSource(); //2.获取连接对象 Connection conn = ds.getConnection(); //3.打印 System.out.println(conn); }}
10月 18, 2020 3:30:11 下午 com.mchange.v2.log.MLog 信息: MLog clients using java 1.4+ standard logging.10月 18, 2020 3:30:12 下午 com.mchange.v2.c3p0.C3P0Registry 信息: Initializing c3p0-0.9.5.2 [built 08-December-2015 22:06:04 -0800; debug? true; trace: 10]10月 18, 2020 3:30:12 下午 com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource 信息: Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement -> 3, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 3000, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, contextClassLoaderSource -> caller, dataSourceName -> 1hgegw1adg9hwgq1x5wses|52af6cff, debugUnreturnedConnectionStackTraces -> false, description -> null, driverClass -> com.mysql.jdbc.Driver, extensions -> {}, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, forceSynchronousCheckins -> false, forceUseNamedDriverClass -> false, identityToken -> 1hgegw1adg9hwgq1x5wses|52af6cff, idleConnectionTestPeriod -> 0, initialPoolSize -> 5, jdbcUrl -> jdbc:mysql://localhost:3306/day14, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 0, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 10, maxStatements -> 0, maxStatementsPerConnection -> 0, minPoolSize -> 3, numHelperThreads -> 3, preferredTestQuery -> null, privilegeSpawnedThreads -> false, properties -> {password=******, user=******}, propertyCycle -> 0, statementCacheNumDeferredCloseThreads -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, userOverrides -> {}, usesTraditionalReflectiveProxies -> false ]com.mchange.v2.c3p0.impl.NewProxyConnection@47542153 [wrapping: com.mysql.jdbc.JDBC4Connection@33afa13b]
Process finished with exit code 0

druid_基本使用

package cn.itcast.datasource.c3p0;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;import java.io.IOException;import java.io.InputStream;import java.sql.Connection;import java.util.Properties;
public class DruidDemo { public static void main(String[] args) throws Exception { //1.导入jar包 //2.定义配置文件 //3.加载配置文件 Properties pro = new Properties(); InputStream is = DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties"); pro.load(is); //4.获取连接池对象 DataSource ds = DruidDataSourceFactory.createDataSource(pro); //5.获取连接 Connection conn = ds.getConnection(); System.out.println(conn); }}
10月 18, 2020 3:54:04 下午 com.alibaba.druid.pool.DruidDataSource info信息: {dataSource-1} initedcom.mysql.jdbc.JDBC4Connection@23bb8443

druid_工具类测试

package cn.itcast.datasource.c3p0;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;import java.io.IOException;import java.security.PrivateKey;import java.sql.Connection;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.Properties;
/** * Druid连接池的工具类 */public class JDBCUtils { //1.定义成员变量DataSource private static DataSource ds; static { try { //1.加载配置文件 Properties pro = new Properties(); pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties")); //2.获取DataSource ds = DruidDataSourceFactory.createDataSource(pro); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } }
/** * 获取连接 */ public static Connection getConnection() throws SQLException { return ds.getConnection(); }
/** * 释放资源 */ public static void close(ResultSet rs,Statement stmt, Connection conn){ if(rs != null){ try { rs.close();//归还连接 } catch (SQLException e) { e.printStackTrace(); } } if(stmt != null){ try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } }
if(conn != null){ try { conn.close();//归还连接 } catch (SQLException e) { e.printStackTrace(); } } }
/** * 获取连接池方法 */ public static DataSource getDataSource(){ return ds; }}
package cn.itcast.datasource.c3p0;
import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.SQLException;
/** * 使用新的工具类 */public class DruidDemo2 { public static void main(String[] args) { /** * 完成添加操作:给user表添加一条记录 */ Connection conn = null; PreparedStatement pstmt = null; try { //1.获取连接 conn = JDBCUtils.getConnection(); //2.定义sql String sql = "insert into user values(null,?,?)"; //3.获取pstmt对象 pstmt = conn.prepareStatement(sql); //4.给?赋值 pstmt.setString(1,"黄欢"); pstmt.setString(2,"HH"); //5.执行sql int count = pstmt.executeUpdate(); System.out.println(count); } catch (SQLException e) { e.printStackTrace(); }finally { JDBCUtils.close(null,pstmt,conn); } }}

以上是关于Day32_JDBC连接池的主要内容,如果未能解决你的问题,请参考以下文章

Java 微服务 乐优网络商城 day02 源代码 SpringBoot 实战开发 整合JDBC和事务(数据库连接池)

day16 事务 - 数据库连接池 - 编写自己的jdbc框架

day04----连接池

JAVAWEB学习笔记10_JDBC连接池&DBUtils

javaWeb_JDBC_数据库连接池概述以及dbcp连接池

我的学习之路_第二十一章_JDBC连接池