JDBC dbutils以及c3p0 dbcp连接池的使用

1. jdbc:
java操作数据库.jdbc是oracle公司指定的一套规范(一套接口)
驱动:jdbc的实现类.由数据库厂商提供.
我们就可以通过一套规范操作不同的数据库了(多态)
jdbc作用:
连接数据库
发送sql语句
处理结果

2. jdbc操作步骤:★
1.数据库和表
2.创建一个项目
3.导入驱动jar包
4.编码:
注册驱动
获取连接
编写sql
创建预编译的语句执行者
设置参数
执行sql
处理结果

释放资源

	// 1.注册驱动
		// 由于源码中也注册了一次,相当于注册两次,造成浪费
		// 所以用反射 将类的字节码文件直接加载到内存,则静态代码块自动执行,就注册成功
		// DriverManager.registerDriver(new Driver());
		//驱动类类名的字节码文件
		Class.forName("com.mysql.jdbc.Driver");
		// 2.获得连接
		// public static Connection getConnection(String url,String user,String
		// password)
		// url:数据库的地址 格式: jdbc:mysql://连接主机IP:端口号/数据库名字
		String url = "jdbc:mysql://localhost:3307/mydata";
		java.sql.Connection c = DriverManager.getConnection(url, "root", "123");
		// System.out.println(c);
		// 3.通过连接对象获取对SQL语句的执行者对象
		Statement stm = c.createStatement();
		// 4.执行SQL语句
		// int executeUpdate(String sql)只能针对数据库的增 删 改操作
		int row = stm.executeUpdate("UPDATE user3 SET uname='汽车',uprice=30000 WHERE uid=5;");
		System.out.println(row);
		// 释放资源
		c.close();

	// 1.注册驱动
		Class.forName("com.mysql.jdbc.Driver");
		// 2.获得连接
		String url = "jdbc:mysql://localhost:3307/mydata";
		java.sql.Connection c = DriverManager.getConnection(url, "root", "123");
		// 3.获取对SQL语句的执行者对象
		Statement st = c.createStatement();
		// 4.执行SQL语句 select语句
		ResultSet rs = st.executeQuery("SELECT * FROM user3;");
		// 5.处理结果集
		while(rs.next()){
			System.out.println(rs.getInt("uid")+" "+rs.getString("uname")+" "
					+rs.getDouble("uprice")+" "+rs.getString("udesc"));
		}
		// 6.释放资源
		rs.close();
		st.close();
		c.close();

3. dbutils

  核心类或接口
QueryRunner:类名
作用:操作sql语句
构造器:
new QueryRunner(Datasource ds);
注意:
底层帮我们创建连接,创建语句执行者 ,释放资源.
常用方法:
query(..):
update(..):

DbUtils:释放资源,控制事务 类
closeQuietly(conn):内部处理了异常
commitAndClose(Connection conn):提交事务并释放连接
....

ResultSetHandler:封装结果集 接口

ArrayHandler, ArrayListHandler, BeanHandler, BeanListHandler, ColumnListHandler, KeyedHandler, MapHandler, MapListHandler, ScalarHandler
 
ArrayHandler, 将查询结果的第一条记录封装成数组,返回
ArrayListHandler, 将查询结果的每一条记录封装成数组,将每一个数组放入list中返回
★BeanHandler, 将查询结果的第一条记录封装成指定的bean对象,返回
★BeanListHandler, 将查询结果的每一条记录封装成指定的bean对象,将每一个bean对象放入list中 返回.
ColumnListHandler, 将查询结果的指定一列放入list中返回 
MapHandler, 将查询结果的第一条记录封装成map,字段名作为key,值为value 返回
★MapListHandler, 将查询结果的每一条记录封装map集合,将每一个map集合放入list中返回
★ScalarHandler,针对于聚合函数 例如:count(*) 返回的是一个Long值

	private static void beanListHander() throws Exception {
		/*
		 * QueryRunner 实现数据库查询操作的第四种方式: 将结果集的第行数据封装成javaBean对象
		 * 再将javaBean对象封装到List集合中
		 */
		Connection conn = JDBCdemo6_1.getConnection();
		QueryRunner qr = new QueryRunner();
		String sql = "SELECT * FROM user3;";
		// BeanHandler<User3>(Class<User3> type)
		List<User3> list = qr.query(conn, sql, new BeanListHandler<User3>(User3.class));
		for (User3 user : list) {
			System.out.println(user);
		}

	}
	private static void beanHander() throws Exception {
		/*
		 * QueryRunner 实现数据库查询操作的第三种方式: 将结果集的第行数据封装成javaBean对象 JavaBean对象 就是一个类
		 * 类的成员变量和表中的字段一样,类名和表名一样
		 */
		Connection conn = JDBCdemo6_1.getConnection();
		QueryRunner qr = new QueryRunner();
		String sql = "SELECT * FROM user3 WHERE uid=?;";
		// BeanHandler<User3>(Class<User3> type)
		User3 us = qr.query(conn, sql, new BeanHandler<User3>(User3.class), 2);
		System.out.println(us);
	}
	private static void scalarHandler() throws Exception {
		/*
		 * QueryRunner 实现数据库查询操作的第六种方式: 适用于只有一个结果集的查询
		 */
		Connection conn = JDBCdemo6_1.getConnection();
		QueryRunner qr = new QueryRunner();
		String sql = "SELECT COUNT(*) FROM user3;";
		Long row = qr.query(conn, sql, new ScalarHandler<Long>());
		System.out.println(row);
	}
4. dbcp连接池

public class DataSource2 {
	private static BasicDataSource bds = new BasicDataSource();
	static {
		// 连接驱动类 数据库驱动名称    必须配置
		bds.setDriverClassName("com.mysql.jdbc.Driver");
		// 数据库地址
		bds.setUrl("jdbc:mysql://localhost:3307/mydata");
		bds.setUsername("root");
		bds.setPassword("123");
		//对象连接池中的连接对象配置    可以不配置,有默认的
		bds.setInitialSize(10);//初始化的连接数
		bds.setMaxActive(8);//最大连接数量
		bds.setMinIdle(2);//最大空闲连接数
		bds.setMaxIdle(5);//最小空闲连接数
	}
	public static DataSource getBasicDataSource(){
		return bds;
	}
}
public class Test2 {
	private static QueryRunner qr = new QueryRunner(DataSource2.getBasicDataSource());

	public static void main(String[] args) {
		
	//	delete();
		select();
	}
	private static void select() {
		String sql = "SELECT * FROM user2;";
		try {
			List<Object[]> list = qr.query(sql, new ArrayListHandler());
			for(Object[] obj:list){
				for(Object ob:obj){
					System.out.println(ob);
				}
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	private static void delete() {
		String sql = "DELETE FROM user2 WHERE num=?;";
		try {
			qr.update(sql, 6);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

5. u3p0连接池  能自动回收空闲的连接

	public void method_3() throws Exception{
		//ComboPooledDataSource cds=new ComboPooledDataSource();
		// 使用命名的配置    针对不同的数据库      如果命名匹配不到 	则执行默认的配置
		ComboPooledDataSource cds=new ComboPooledDataSource("itcast");
		Connection conn=cds.getConnection();
		String sql="insert into user1 values(?,?)";
		PreparedStatement pst=conn.prepareStatement(sql);
		pst.setInt(1, 8);
		pst.setString(2, "鳄鱼");
		int row=pst.executeUpdate();
		System.out.println(row);
	}
配置文件:名称:c3p0.properties 或者 c3p0-config.xml  放在src目录下

<c3p0-config>
	<!-- 默认配置,如果没有指定则使用这个配置 -->
	<default-config>
		<!-- 基本配置 -->
		<property name="driverClass">com.mysql.jdbc.Driver</property>
		<property name="jdbcUrl">jdbc:mysql://127.0.0.1:3307/day</property>
		<property name="user">root</property>
		<property name="password">123</property>
	
		<!--扩展配置-->
		<property name="checkoutTimeout">30000</property>
		<property name="idleConnectionTestPeriod">30</property>
		<property name="initialPoolSize">10</property>
		<property name="maxIdleTime">30</property>
		<property name="maxPoolSize">100</property>
		<property name="minPoolSize">10</property>
		<property name="maxStatements">200</property>
	</default-config> 
	
	
	<!-- 命名的配置 -->
	<named-config name="itcast">
		<property name="driverClass">com.mysql.jdbc.Driver</property>
		<property name="jdbcUrl">jdbc:mysql://127.0.0.1:3307/day</property>
		<property name="user">root</property>
		<property name="password">123</property>
		
		
		<!-- 如果池中数据连接不够时一次增长多少个 -->
		<property name="acquireIncrement">5</property>
		<property name="initialPoolSize">20</property>
		<property name="minPoolSize">10</property>
		<property name="maxPoolSize">40</property>
		<property name="maxStatements">20</property>
		<property name="maxStatementsPerConnection">5</property>
	</named-config>
</c3p0-config> 




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值