1 1 数据库连接池 C3p0 和 Druid 2 3 1.1 定义 : 4 5 本质上就是个容器(集合) 存放数据库连接的容器 当系统初始化以后 容器被创建 容器中就会申请一些连接对象 当用户来访问的数据库的时候 从容器中取连接对象,用户用完之后 归还 6 7 1.2 如何用: 8 9 1.2.1 标准接口 Datasource javax.sql包下 10 11 方法:getConnection();获得链接 12 13 Connection.close();归还 14 15 1.2.2 一般我们不实现这个接口 数据库厂商或者连接池厂商来实现这个接口 16 17 1.2.3 C3P0 18 19 步骤: 20 21 1 导包 两个包 c3p0-0.9.5.2.jar mchange-commons-java-0.2.12 22 23 2 定义配置文件 名称 c3p0.properties c3p0-config.xml 24 25 路径:将文件放到src目录下 26 27 3 创建核心对象 数据库连接池对象ComboPoolDataSource 28 29 4 获取链接 getConnection
例1:
1 package cn.Wuchuang.C3p0Druid; 2 3 import com.mchange.v2.c3p0.ComboPooledDataSource; 4 5 import javax.sql.DataSource; 6 import java.sql.Connection; 7 import java.sql.SQLException; 8 9 public class Demo1C3P0 { 10 public static void main(String[] args) throws SQLException { 11 // 1 导包 两个包 c3p0-0.9.5.2.jar mchange-commons-java-0.2.12 12 // 2 定义配置文件 名称 13 // 路径:将文件放到src目录下 14 // 3 创建核心对象 数据库连接池对象ComboPoolDataSource 15 DataSource ds = new ComboPooledDataSource(); 16 // 4 获取链接 getConnection 17 Connection conn = ds.getConnection(); 18 System.out.println(conn+"哈哈"); 19 } 20 }
例2:
1 package cn.Wuchuang.C3p0Druid; 2 3 import com.mchange.v2.c3p0.ComboPooledDataSource; 4 5 import javax.sql.DataSource; 6 import java.sql.Connection; 7 8 public class Demo2C3P0 { 9 public static void main(String[] args) throws Exception { 10 DataSource data = new ComboPooledDataSource(); 11 12 for (int i =1;i<=11;i++){ 13 Connection conn = data.getConnection(); 14 System.out.println(i+" "+conn); 15 if (i==5){ 16 //归还连接池。 17 conn.close(); 18 } 19 } 20 } 21 }
例3:
1 package cn.Wuchuang.C3p0Druid; 2 3 import com.alibaba.druid.pool.DruidDataSourceFactory; 4 5 import javax.sql.DataSource; 6 import java.io.IOException; 7 import java.io.InputStream; 8 import java.sql.Connection; 9 import java.util.Properties; 10 11 public class Demo3Druid { 12 public static void main(String[] args) throws Exception { 13 //加载文件。 14 Properties pro = new Properties(); 15 InputStream in = Demo3Druid.class.getClassLoader().getResourceAsStream("druid.properties"); 16 pro.load(in); 17 //获得数据库连接池对象、 18 //通过DruidDataSourceFactory 19 DataSource dats = DruidDataSourceFactory.createDataSource(pro); 20 //获取链接。 21 Connection conn = dats.getConnection(); 22 System.out.println(conn+"我被测试了"); 23 } 24 }
例4:
1 package cn.Wuchuang.C3p0Druid; 2 3 import org.junit.Test; 4 import org.springframework.jdbc.core.JdbcTemplate; 5 import org.springframework.jdbc.support.JdbcUtils; 6 7 import java.sql.Connection; 8 import java.sql.PreparedStatement; 9 import java.sql.SQLException; 10 11 public class Demo4Druid { 12 @Test 13 public void Druids(){ 14 15 Connection conn = null; 16 PreparedStatement ppst = null; 17 try { 18 //完成一个添加操作。 19 //获得链接。 20 conn = JDBCUtils.getConnection(); 21 //定义SQL语句。 22 String sql =("insert into salarys values(7,?,?)"); 23 //获得执行的语句。 24 ppst = conn.prepareStatement(sql); 25 //给?赋值。 26 ppst.setInt(1,610); 27 ppst.setInt(2,800); 28 //执行SQL语句。 29 int i = ppst.executeUpdate(); 30 System.out.println(i); 31 } catch (Exception e) { 32 e.printStackTrace(); 33 }finally { 34 JDBCUtils.close(conn,ppst); 35 } 36 } 37 }
JDBC工具类:
1 package cn.Wuchuang.C3p0Druid; 2 3 import javax.sql.DataSource; 4 import java.sql.*; 5 6 public class JDBCUtils { 7 private static final String r = "root"; 8 private static final String p = "root"; 9 private static final String url = "jdbc:mysql:///semployee"; 10 private static final String DRIVER = "com.mysql.jdbc.Driver"; 11 //注册驱动。 12 static{ 13 try { 14 Class.forName(DRIVER); 15 } catch (Exception e) { 16 e.printStackTrace(); 17 } 18 } 19 //得到数据库链接。 20 public static Connection getConnection() throws Exception { 21 return DriverManager.getConnection(url,r,p); 22 } 23 24 //关闭链接,执行打开的资源。 25 public static void close(Connection conn,Statement stmt){ 26 if (stmt!=null){ 27 try { 28 stmt.close(); 29 } catch (Exception e) { 30 e.printStackTrace(); 31 } 32 } 33 if (conn!=null){ 34 try { 35 conn.close(); 36 } catch (Exception e) { 37 e.printStackTrace(); 38 } 39 } 40 } 41 //关闭所有打开的资源。 42 public static void close(Connection conn, Statement stmt, ResultSet rs){ 43 if (stmt!=null){ 44 try { 45 stmt.close(); 46 } catch (Exception e) { 47 e.printStackTrace(); 48 } 49 }if (conn!=null){ 50 try { 51 conn.close(); 52 } catch (Exception e) { 53 e.printStackTrace(); 54 } 55 } 56 if (rs!=null){ 57 try { 58 rs.close(); 59 } catch (Exception e) { 60 e.printStackTrace(); 61 } 62 } 63 } 64 }