zoukankan      html  css  js  c++  java
  • JAVA基础-JDBC连接池

    连接池

    连接池主要是用来管理 Connection 对象,减少创建的时候消耗性能,然后还可以重复使用它。当你在使用的时候,如果说访问量激增时,有可能需要等待一定的时间,因为 cpu 会将空闲下来的 Connection 拿来使用,当你使用完了之后,还需要归还到连接池中,让下一个访问者来继续使用

    Java 主要在数据连接池方向上,通过提供一套公共的接口:java.sql.DataSource。接着,不同的厂商就 会根据这套规范,然后制定对应的产品,比如 MyBatis、Hibernate 等框架都有不同的连接池实现方 案。

    这样,其实是方便了 Java 开发者,我们开发者其实只需要提供一套代码,就可以在不同的厂商产品之间进行切换,不需要针对每个不同的连接池产品去修改我们的代码。 常用的连接池:DBCP、C3P0

    C3P0

    开源产品,Spring、Hibernate 等框架都有使用它。

    首先我们要导入jar包和配置文件配置文件 c3p0-config.xml 。

    <?xml version="1.0" encoding="UTF-8"?>
    <c3p0-config>
    
    <!-- c3p0配置文件   配置数据源 -->
    
    
    <!-- default-config 默认 -->
    	<default-config>
    	<!-- 驱动 -->
    		<property name="driverClass">com.mysql.jdbc.Driver</property>
    		<!-- url -->
    		<property name="jdbcUrl">jdbc:mysql:///mybase02</property>
    		<!-- 用户名 -->
    		<property name="user">root</property>
    		<!-- 密码 -->
    		<property name="password">root</property>
    	</default-config>
    	
    <!-- named-config  通过名字指定  -->
    	<named-config name="test">
    		<property name="driverClass">com.mysql.jdbc.Driver</property>
    		<property name="jdbcUrl">jdbc:mysql:///mybase03</property>
    		<property name="user">root</property>
    		<property name="password">root</property>
    	</named-config>
    
    
    
    </c3p0-config>
    

    C3P0我们使用起来就很方便,可以直接得到connection对象。同样的,我们依旧利用C3P0封装我们的工具类。

    package util;
    
    import java.sql.Connection;
    import java.sql.SQLException;
    
    import javax.sql.DataSource;
    
    import com.mchange.v2.c3p0.ComboPooledDataSource;
    
    //c3p0工具类
    public class C3P0Utils {
    	
    	//找的是默认配置文件中的数据源信息
    	private static ComboPooledDataSource cpds=new ComboPooledDataSource();
    	//找的是配置文件中 通过名字指定的信息
    	ComboPooledDataSource cpds2=new ComboPooledDataSource("test");
    
    	//返回建立连接对象
    	public static Connection getConnection() throws SQLException {
    		return cpds.getConnection();
    	}
    	//返回dataSource 数据源 DButils
    	public static DataSource getDS() {
    		return cpds;
    	}
    	
    //	public static void main(String[] args) {
    //		
    //		
    //		try {
    //			//得到建立连接对象
    //			Connection c1 = cpds.getConnection();
    //			
    //		} catch (SQLException e) {
    //			// TODO Auto-generated catch block
    //			e.printStackTrace();
    //		}
    //	}
    
    }
    
    

    DBUtils

    commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,创建连接、结果集封装、释放资源,同时也不会影响程序的性能。

    API介绍:

    • org.apache.commons.dbutils.QueryRunner --- 核心
    • org.apache.commons.dbutils.ResultSetHandler --- 结果集封装器
    • org.apache.commons.dbutils.DbUtils --- 工具类
    package dbutils;
    
    import static org.junit.Assert.*;
    
    import java.util.List;
    import java.util.Map;
    
    import org.apache.commons.dbutils.QueryRunner;
    import org.apache.commons.dbutils.ResultSetHandler;
    import org.apache.commons.dbutils.handlers.BeanHandler;
    import org.apache.commons.dbutils.handlers.BeanListHandler;
    import org.apache.commons.dbutils.handlers.MapHandler;
    import org.junit.Test;
    
    import bean.Classes;
    import util.C3P0Utils;
    
    public class Demo1 {
    
    	//DButils封装了 结果   优化查询这部分
    
    	//结果返回单行数据
    	@Test
    	public void fun1() throws Exception {
    		//第一步 初始化QueryRunner对象 并传入数据源
    		QueryRunner qr=new QueryRunner(C3P0Utils.getDS());
    		//执行查询并返回结果
    		//sql sql 语句  
    		String sql="select * from classes where id=?";
    		//		ResultSetHandler rsh;//结果集处理器  dbutils帮助封装了结果
    		//实体类 属性名跟表中字段要一直  有set和get方法  封装
    		Classes c1=qr.query(sql, new BeanHandler<Classes>(Classes.class),3);
    		System.out.println(c1);
    	}
    	//结果返回多行数据
    	@Test
    	public void fun2() throws Exception {
    		//第一步 初始化QueryRunner对象 并传入数据源(连接池工具类中封装方法返回数据源)
    		QueryRunner qr=new QueryRunner(C3P0Utils.getDS());
    		//执行查询并返回结果
    		//sql sql 语句  
    		String sql="select * from classes";
    		List<Classes> ll1=qr.query(sql,new BeanListHandler<Classes>(Classes.class) );
    		System.out.println(ll1);
    	}
    
    	//模糊查询案例
    	@Test
    	public void fun3() throws Exception {
    		//第一步 初始化QueryRunner对象 并传入数据源(连接池工具类中封装方法返回数据源)
    		QueryRunner qr=new QueryRunner(C3P0Utils.getDS());
    		//执行查询并返回结果
    		//sql sql 语句  
    		String sql="select * from classes where name like ?";
    		List<Classes> ll1=qr.query(sql,new BeanListHandler<Classes>(Classes.class),"%二%" );
    		System.out.println(ll1);
    
    	}
    
    	//其他增删改案例 插入案例 增删改 调用
    	@Test
    	public void fun4() throws Exception {
    		QueryRunner qr=new QueryRunner(C3P0Utils.getDS());
    		//执行查询并返回结果
    		//sql sql 语句  
    		String sql="insert into classes values(?,?)";
    		int r1=qr.update(sql,1,"一班");	
    		if(r1>0) {
    			System.out.println("添加成功!");
    		}
    
    	}
    	//删除案例
    	@Test
    	public void fun5() throws Exception {
    		QueryRunner qr=new QueryRunner(C3P0Utils.getDS());
    		String sql="delete from classes where id=?";
    		int rows=qr.update(sql,1);
    		if(rows>0) {
    			System.out.println("删除成功");
    			System.out.println(rows);
    		}
    	}
    	//修改案例
    	@Test
    	public void fun6() throws Exception {
    		QueryRunner queryRunner=new QueryRunner(C3P0Utils.getDS());
    		String sql="update classes set name=? where id=?";
    		int rows=queryRunner.update(sql,"2班",2);
    		if(rows>0) {
    			System.out.println("修改成功");
    		}
    	}
    	//查询结果集  beanhandler 单行bean   接收 beanListhandler:多行List<bean>
    	// maphandler 单行 返回类型map  mapListhandler 多行
    	@Test
    	public void fun7() throws Exception {
    		//第一步 初始化QueryRunner对象 并传入数据源
    		QueryRunner qr=new QueryRunner(C3P0Utils.getDS());
    		//执行查询并返回结果
    		//sql sql 语句  
    		String sql="select * from classes where id=?";
    		//		ResultSetHandler rsh;//结果集处理器  dbutils帮助封装了结果
    		//实体类 属性名跟表中字段要一直  有set和get方法  封装
    		Map<String, Object> query = qr.query(sql, new MapHandler(),3);
    		System.out.println(query);
    	}
    
    }
    
    
  • 相关阅读:
    子集和的另外一个问题
    LCS
    表达式求值
    Singleton in java
    自绘ListBox的两种效果
    动态创建、压缩Access数据库(*.MDB)
    C# 中用stopwatch测试代码运行时间
    MVC学习笔记之数据传递
    ATM应用实现
    html的基本语法
  • 原文地址:https://www.cnblogs.com/JeasonIsCoding/p/13232604.html
Copyright © 2011-2022 走看看