数据库连接 --- 执行完毕 --- 释放
连接 -- 释放 十分浪费系统资源
池化技术:准备一些预先的资源,过来就连接预先准备好的
最小连接数: 10
最大连接数:15
等待超时:100ms
编写连接池,实现一个接口 DataSource
开源数据源实现(拿来即用)
DBCP
C3P0
Druid:阿里巴巴
使用了这些数据库连接池之后,我们在项目开发中就不需要编写连接数据库的代码了!
DBCP
需要用到的jar包
commons-dbcp-1.4、commons-pool-1.6
C3P0
需要用到的jar包
commons-dbcp-1.4、commons-pool-1.6
结论
无论使用说明数据源,本质还是一样的,DataSource接口不会变,方法也不会变
package com.hua.lesson05.utils; import org.apache.commons.dbcp.BasicDataSource; import org.apache.commons.dbcp.BasicDataSourceFactory; import javax.sql.DataSource; import java.io.InputStream; import java.sql.*; import java.util.Properties; public class JdbcUtils_DBCP { private static DataSource dataSource = null; static{ try{ InputStream in = JdbcUtils_DBCP.class.getClassLoader().getResourceAsStream("dbcpconfig.properties"); Properties properties = new Properties(); properties.load(in); //创建数据源 工厂模式-->创建 dataSource = BasicDataSourceFactory.createDataSource(properties); } catch (Exception e) { e.printStackTrace(); } } //获取连接 public static Connection getConnection() throws SQLException { return dataSource.getConnection();//从数据源中获取连接 } //释放连接资源 public static void release(Connection conn, Statement st, ResultSet rs){ if(rs!=null){ try { rs.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } if(st!=null){ try { st.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } if(conn!=null){ try { conn.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } } }
package com.hua.lesson05; import com.hua.lesson02.utils.JdbcUtils; import com.hua.lesson05.utils.JdbcUtils_DBCP; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.Date; public class TestDBCP { public static void main(String[] args) { Connection conn = null; PreparedStatement st = null; try { conn = JdbcUtils_DBCP.getConnection(); //区别 //使用?占位符 代替参数 String sql = "INSERT INTO `users`(`id`,`NAME`,`PASSWORD`,`email`,`birthday`) values(?,?,?,?,?)"; st = conn.prepareStatement(sql);//预编译SQL,先写SQL,然后不执行 //手动给参数赋值 st.setInt(1,6); st.setString(2,"lisi"); st.setString(3,"126466"); st.setString(4,"123456@qq.com"); //注意点: sql.Date 数据库 sql.Date // util.Date Java new Date().getTime() 获得时间戳 st.setDate(5,new java.sql.Date(new Date().getTime())); //执行 int i = st.executeUpdate(); if(i>0){ System.out.println("插入成功"); } } catch (SQLException throwables) { throwables.printStackTrace(); }finally { JdbcUtils_DBCP.release(conn,st,null); } } }
package com.hua.lesson05.utils; import com.mchange.v2.c3p0.ComboPooledDataSource; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class JdbcUtils_C3P0 { private static ComboPooledDataSource dataSource = null; static{ try{ //代码版配置 // dataSource = new ComboPooledDataSource(); // dataSource.setDriverClass(); // dataSource.setUser(); // dataSource.setPassword(); // dataSource.setJdbcUrl(); // // dataSource.setMaxPoolSize(); // dataSource.setMinPoolSize(); //创建数据源 工厂模式-->创建 dataSource = new ComboPooledDataSource("MySQL");//配置文件写法 } catch (Exception e) { e.printStackTrace(); } } //获取连接 public static Connection getConnection() throws SQLException { return dataSource.getConnection();//从数据源中获取连接 } //释放连接资源 public static void release(Connection conn, Statement st, ResultSet rs){ if(rs!=null){ try { rs.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } if(st!=null){ try { st.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } if(conn!=null){ try { conn.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } } }
package com.hua.lesson05; import com.hua.lesson05.utils.JdbcUtils_C3P0; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.Date; public class TestC3P0 { public static void main(String[] args) { Connection conn = null; PreparedStatement st = null; try { conn = JdbcUtils_C3P0.getConnection();//原来是自己实现的,现在用别人写的实现 //区别 //使用?占位符 代替参数 String sql = "INSERT INTO `users`(`id`,`NAME`,`PASSWORD`,`email`,`birthday`) values(?,?,?,?,?)"; st = conn.prepareStatement(sql);//预编译SQL,先写SQL,然后不执行 //手动给参数赋值 st.setInt(1,7); st.setString(2,"lisi"); st.setString(3,"126466"); st.setString(4,"123456@qq.com"); //注意点: sql.Date 数据库 sql.Date // util.Date Java new Date().getTime() 获得时间戳 st.setDate(5,new java.sql.Date(new Date().getTime())); //执行 int i = st.executeUpdate(); if(i>0){ System.out.println("插入成功"); } } catch (SQLException throwables) { throwables.printStackTrace(); }finally { JdbcUtils_C3P0.release(conn,st,null); } } }
标签:java,throwables,数据库,st,sql,Date,import,连接池 From: https://www.cnblogs.com/1982king/p/16797652.html