数据库连接池
-
概念:其实就是一个容器(集合),存放数据库连接的容器
-
好处:
- 节约资源
- 用户访问高效
-
实现:标准接口:javax.sql.DataSource
- 获取连接:getConnection()
- 归还连接:如果连接对象Connection是从连接池中获取的,那么调用Connection对象.close(),不会关闭,而是归还
-
数据库
- C3P0:数据库连接池技术
- Druid:数据库连接池实现技术,阿里巴巴提供
-
C3P0:数据库连接技术
- 步骤
- 导入jar包:c3p0-0.9.5.5.jar mchange-commons-java-0.2.19.jar
- 定义配置文件:
- 名称 :c3p0.properties 或者 c3p0-config.xml
- 路径: 直接放在src目录下即可
- 创建核心对象:数据库连接池对象 ComboPooledDataSource
- 获取连接:getConnection()
- 步骤
-
Druid:数据库连接池实现技术,阿里巴巴提供
-
步骤
- 导入jar:druid-1.2.6.jar(https://repo1.maven.org/maven2/com/alibaba/druid/druid-wrapper/)
- 定义配置文件:.properties
- 获取数据库连接池对象:通过工厂来获取 DruidDataSourceFactory
- 获取连接:getConnection()
-
druid.properties
driverClassName = com.mysql.jdbc.Driver url = jdbc:mysql://localhost:3306/InternetBar username = root password = 123456 #初始化连接数量 initialSize = 5 maxActive = 10 #最大等待时间 maxWait = 3000
-
DruidDemo
package druid; import com.alibaba.druid.pool.DruidDataSourceFactory; import javax.sql.DataSource; 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 con = ds.getConnection(); System.out.println(con); } }
-
定义工具类 JDBCUtils
- 定义一个类 JDBCUtils
- 提供静态代码加载配置文件,初始化连接池对象
- 提供方法
- 获取连接方法:通过数据库连接池获取连接
- 释放资源
- 获取连接池的方法
-
JDBCUtils.java
package utils; import com.alibaba.druid.pool.DruidDataSourceFactory; import javax.sql.DataSource; import java.io.IOException; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; public class JDBCUtils { //1.定义一个成员变量 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(Statement stmt, Connection conn){ if(stmt != null){ try { stmt.close();//归还连接 } catch (SQLException e) { e.printStackTrace(); } } if(conn != null){ try { conn.close();//归还连接 } catch (SQLException e) { e.printStackTrace(); } } } public static void close(ResultSet rs,Statement stmt, Connection conn){ close(null,stmt,conn); } /** *获取连接池的方法 */ public static DataSource getDataSource(){ return ds; } }
-
DruidDemo2.java
package druid; import utils.JDBCUtils; import javax.xml.transform.Result; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class DruidDemo2 { public static void main(String[] args) { /** * 完成一个查询操作 */ Connection con = null; PreparedStatement pstmt = null; ResultSet rs = null; try { //1.获取连接 con = JDBCUtils.getConnection(); //定义Sql String sql = "select * from user;"; //获取pstmt对象 pstmt = con.prepareStatement(sql); rs= pstmt.executeQuery(); while(rs.next()){ System.out.println(rs.getInt("id")); System.out.println(rs.getString("name")); System.out.println(rs.getString("password")); System.out.println(rs.getFloat("balance")); } } catch (SQLException e) { e.printStackTrace(); } finally { JDBCUtils.close(pstmt,con); } } }
-
spring JDBC
-
导入jar包
-
创建jdbcTemplate对象。依赖于数据源DataSource
- JdbcTemplate template = new JdbcTemplate(ds);
-
调用JdbcTemplate的方法来完成CRUD的操作
-
update():执行DML语句。增删改语句。
-
queryForMap():查询结果,将结果封装成Map集合
-
queryForList():查询结果,将结果封装成List集合
-
query():查询结果,将结果封装成Javabean对象
-
queryForObject():查询结果,将结果封装成对象
-
package jdbctemplate; import org.springframework.jdbc.core.JdbcTemplate; import utils.JDBCUtils; public class JdbcTemplatDemo { public static void main(String[] args) { //1.导入jar包 //2.创建JDBCTemplate JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource()); //3.调用方法,修改数据 String sql = "update user set balance = 55.5 where id = ?"; int count = template.update(sql, 234); System.out.println(count); } }
-