数据库的优化和c3p0

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lv_yishi/article/details/79756143

*****c3p0

C3P0连接池,核心类:
     CombopooledDataSource ds;  返回的是DataSource(数据源)
     Combo英文意思是:端口、混合物。ComboPooledDataSource存储数据源接口池

通过CombopooledDataSource访问:配置文件中<default-config>:默认的就是使用mysql数据库
如果里面写入参数就是不使用那个默认配置,:比如配置文件是:  <named-config name="oracleConfig">但是new ComboPooledDataSource("oracle_config")写错的话会报错

设置c3p0的配置:    c3p0-0.9.1.2.jar

<c3p0-config>
	<default-config>
		<property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbc_demo
		</property>
		<property name="driverClass">com.mysql.jdbc.Driver</property>
		<property name="user">root</property>
		<property name="password">123</property>
		<property name="initialPoolSize">3</property>
		<property name="maxPoolSize">6</property>
		<property name="maxIdleTime">1000</property>
	</default-config>

</c3p0-config>
private String url = "jdbc:mysql://localhost:3306/jdbc_demo";
连接的是本机,且默认的端口号是3306可以省略不写
private String url = "jdbc:mysql:///jdbc_demo";

QueryRunner   组件的核心工具类:定义了所有的与数据库操作的方法(查询、更新)
里面有一个方法:
QueryRunner(DataSource ds)
    Constructor for QueryRunner that takes a DataSource to use.

DataSource作为数据源传入
 new QueryRunner(dataSource)
创建QueryRunner对象,传入连接池对象
在创建QueryRunner对象的时候,如果传入了数据源对象;
那么在使用QueryRunner对象方法的时候,就不需要传入连接对象;
会自动从数据源中获取连接(不用关闭连接)

(1)ArrayHandler:把结果集中的第一行数据转成对象数组。
(2)ArrayListHandler:把结果集中的每一行数据都转成一个对象数组,再存放到List中。
(3)BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。
(4)BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。
(5)ColumnListHandler:将结果集中某一列的数据存放到List中。
(6)KeyedHandler:将结果集中的每一行数据都封装到一个Map里,然后再根据指定的key把每个Map再存放到一个Map里。
(7)MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。
(8)MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List。
(9)ScalarHandler:将结果集中某一条记录的其中某一列的数据存成Object。

public class App_query {
	private Connection conn;

	// 一、查询, 自定义结果集封装数据
	@Test
	public void testQuery() throws Exception {
		String sql = "select * from admin where id=?";
		// 获取连接
		conn = JdbcUtil.getConnection();
		// 创建DbUtils核心工具类对象
		QueryRunner qr = new QueryRunner();
		// 查询
		Admin admin = qr.query(conn, sql, new ResultSetHandler<Admin>() {   //ResultSetHandler实现该接口将结果集到其他对象。

			// 如何封装一个Admin对象
			public Admin handle(ResultSet rs) throws SQLException {
				if (rs.next()) {
					Admin admin = new Admin();
					admin.setId(rs.getInt("id"));
					admin.setUserName(rs.getString("userName"));
					admin.setPwd(rs.getString("pwd"));
					return admin;
				}
				return null;
			}

		}, 29);

		// 测试
		System.out.println(admin);
		// 关闭
		conn.close();
	}
	
	// 二、查询, 使用组件提供的结果集对象封装数据
	
	// 1)BeanHandler: 查询返回单个对象
	@Test
	public void testQueryOne() throws Exception {
		String sql = "select * from admin where id=?";
		// 获取连接
		conn = JdbcUtil.getConnection();
		// 创建DbUtils核心工具类对象
		QueryRunner qr = new QueryRunner();
		// 查询返回单个对象
		Admin admin =  qr.query(conn, sql, new BeanHandler<Admin>(Admin.class), 29);
		
		System.out.println(admin);
		conn.close();
	}
	// 2)BeanListHandler: 查询返回list集合,集合元素是指定的对象
	@Test
	public void testQueryMany() throws Exception {
		String sql = "select * from admin";
		conn = JdbcUtil.getConnection();
		QueryRunner qr = new QueryRunner();
		// 查询全部数据
		List<Admin> list = qr.query(conn, sql, new BeanListHandler<Admin>(Admin.class));
		
		System.out.println(list);
		conn.close();
	}
	@Test
//	3) ArrayHandler, 查询返回结果记录的第一行,封装对对象数组, 即返回:Object[]
//	4) ArrayListHandler, 把查询的每一行都封装为对象数组,再添加到list集合中
//	5) ScalarHandler 查询返回结果记录的第一行的第一列  (在聚合函数统计的时候用  (select count (*) from admin)),无论查询多少都返回第一行的第一列
//	6) MapHandler  查询返回结果的第一条记录封装为map
	public void testArray() throws Exception {
		String sql = "select * from admin";
		conn = JdbcUtil.getConnection();
		QueryRunner qr = new QueryRunner();
		// 查询
		//Object[] obj = qr.query(conn, sql, new ArrayHandler());
		//List<Object[]> list = qr.query(conn, sql, new ArrayListHandler());
		//Long num = qr.query(conn, sql, new ScalarHandler<Long>());    select count (*) from admin
		Map<String, Object> map = qr.query(conn,sql, new MapHandler());
		
		conn.close();
	}	
}

结果集(ResultSet)是数据中查询结果返回的一种对象,可以说结果集是一个存储查询结果的对象,
但是结果集并不仅仅具有存储的功能,他同时还具有操纵数据的功能,可能完成对数据的更新等.

BeanListHandler 是可供DBUtils查询器使用的一个Handler类,它的作用是将查询结果转换为一个列表。
列表中元素为查询结果所转换的JavaBean,Bean的类型为开发者所指定的Class。
就是先把在数据库里面查询的元素每一行都在Admin里面转换(toString)再放到List里面返回

猜你喜欢

转载自blog.csdn.net/lv_yishi/article/details/79756143