JDBC事务

JDBC事务控制
1.什么时事务:一个包含多个步骤或者业务操作。如果这个业务或者多个步骤被事务管理,则这多个步骤要么同时成功,要么回滚
(多个步骤同时执行失败),这多个步骤时一个整体,不可分割的。
2.操作:
开启事务:mysql--->start transaction
提交事务:commit
回滚事务:rollback
3.使用Connection对象来管理事务
开启事务:setAutoCommit(boolean autoCommit);执行该方法里面传入false值,手动开启事务再执行sql语句之前开启事务
提交事务:commit()--->当所有的sql语句执行完毕才提交事务
回滚事务:rollback();---->当事务中发生异常时回滚事务 回滚事务放在catch语句
4.实例:以银行转账为例:让张三给李四转账10000块钱
//含有事务的转账
public static void transform02() {
double momey = 10000;
String username01 ="张三";
String username02 = "李四";

	//张三给李四转账10000钱
	//定义实现转账的两条sql语句
	String sql01 ="update account set balance = balance-? where username=?";
	String sql02 ="update account set balance = balance+? where username=?";
	//使用Connection对象手动开启事务 setAutoCommit
	Connection con=DBUtil.getConnection();
	try {
		con.setAutoCommit(false);
		//通过con获取预处理对象,先让张三的钱减少10000块钱
		 ps01 = con.prepareStatement(sql01);
		ps01.setDouble(1, momey);
		ps01.setString(2, username01);
		//执行sql语句
		int count = ps01.executeUpdate();
		//手动制造一个异常
		//int i=1/0;
		//再让李四的钱增加1完
		 ps02 = con.prepareStatement(sql02);
		ps02.setDouble(1, momey);
		ps02.setString(2, username02);
		//执行sql语句
		int count02 = ps02.executeUpdate();
		//提交事务
		con.commit();
		System.out.println("转账成功!");
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		//事务回滚
		try {
			System.out.println("转账失败!");
			con.rollback();
		} catch (SQLException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		e.printStackTrace();
	}finally {
		//把打开的各种链接对象释放掉
		try {
			ps01.close();
			ps02.close();
			con.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

链接池
1.什么时链接池:其实就是一个容器,再这个容器当中存放着多个链接对象
当系统开始运行时,可以让系统提前创建多个链接对象,放到容器中(连接池),当客户端需要链接对象时
,可以从连接池中申请一个链接,去访问数据库,当该链接使用完毕时,不再释放归还给系统,而是把这个链接对象归还给连接池
2.好处:
可以大大节省系统开销
可以提高访问的速度
3.实现操作
javax.sql 连接池
JNDL---> java naming and Directory Interface Java命名和目录接口
使用JNDI降低程序和数据库的耦合度,使你的程序更加方便配置和维护以及部署
是javaEE规范中的重要规范之一。是EJB的相关的知识。
DataSource接口它里面并不提高具体的实现,而是由驱动程序供应商(数据库厂商)提供
1.C3P0:它是数据库连接池的一套技术
2.druid:也是一套数据库连接池的技术,由阿里巴巴提供的。
4.C3P0数据库连接池技术
步骤:
1.去官网下载两个jar包:c3p0-0.9.5.2.jar、mchange-commons-java-0.2.12.jar
植入到工程的classpath类路径下,不要忘记导入mysql驱动jar包mysql-connector-java.jar
定义配置文件:
文件类型:c3p.properties 或者 c3p0-config.xml
路径:放到classpath类路径下 对于工程来说直接放到src下面即可
获取DataSource对象:数据库链接池对象 通过实例化ComboPoolDataSource来获取从连接池中获取链接对象
5.Druid 德鲁伊链接池技术
步骤:
1.去官网下载一个德鲁伊的jar包--->druid-1.0.9.jar
2.定义配置文件:使用properties文件类型的,名字随便起
3.手动加载配置文件信息:Properties集合
4.获取DataSource对象:通过工厂方式来实现的,DruidDataSourceFactory
5.从连接池中获取链接对象:getConnection()
JDBCTemplate
Spring框架提供了对JDBC操作的简单封装,使用JDBCTemplate对象来简化JDBC开发流程
步骤:
从官网下载对于的Spring-jdbc相关的jar包,导入到工程类路径下,放到lib文件夹下即可
创建JDBCTemplate对象中的api方法实现crud操作
DML操作:update()
DQL操作:查询不用select 使用query
query();讲查询的结果集封装成javaBean对象
queryForMap();讲查询的结果集封装成map集合,只能封装一条记录:键key是字段,值value是字段值,结果集记录数只能是1
queryForList();将结果集封装成List集合,再list集合中有多条记录,每一条记录都是一个map集合
List<Map<Object,Obejct>>list;
queryFoObject();将结果集封装成一个对象,一般用于聚合函数查询总记录数 int count();

posted on 2021-01-07 22:10  猛男学Java  阅读(93)  评论(0编辑  收藏  举报

导航