java_web学习第十天(JDBC数据库驱动----分页、事务)

数据库分页:limit x,y   x开始索引的位置,从零开始,y要取的数量
/**
	 * 分页
	 * @param pageNum
	 * @param page
	 * @throws SQLException
	 */
	public static void pageLimite(int pageNum,int page) throws SQLException{
		int startIndex = (page-1) * pageNum;//开始位置
		//pageNum 页数
		//page第几页
		
		//1.查找总条数
		ResultSet totalNumSet = getStatement().executeQuery("select * from student");
		int totalNum = 0;
		while(totalNumSet.next()){
			totalNum++;
		}
		System.out.println("totalNum------------->"+totalNum);
		//2.不够页数,展示余数
		if((totalNum - startIndex) < 10){
			pageNum = totalNum - startIndex;
		}
		
		//3.执行分页查询
		ResultSet executeQuery = getStatement().executeQuery("SELECT * FROM student limit "+startIndex+","+ pageNum);
		while(executeQuery.next()){
			System.out.println("id--------------->"+executeQuery.getInt("id"));
			System.out.println("name---------->"+executeQuery.getString("name"));
			System.out.println("description----------->"+executeQuery.getString("description"));
			System.out.println();
		}
}
事务:
	Transaction,是一个操作序列,这些操作要么都执行,要么都不执行,简而言之:就是执行几个sql语句,当所有的语句都执行成功,那么就成功,如果其中一个执行失败,那么成功执行的也不会提交,都是失败的。
	从上面可以看出,事务的提出,是为了解决并发情况下保持数据一致性的问题,要么都执行,要么都不执行。
事务的特性:
	1.原子性(Atomic) 把事务中的操作看做是一个不可分割的单元,这个单元中的操作要么都执行成功,要么都执行失败。
	2.一致性(Consistency) :事务必须使数据库从一个一致性状态到另外一个一致性状态。
	3.隔离性(Isolation): 事务的隔离性是多个用户并发访问数据库的时候,数据库为每个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
	4.持久性(Durability): 持久性是指一个事务一旦被提交,它对数据库中的数据的改变就是永久性的。


jdbc中使用事务:
	Connection.setAutoCommit(false);	//设置自动提交	
	Connection.rollback();	//程序回滚
	Connection.commit();	//提交事务
设置事务回滚点
	Savepoint sp = conn.setSavepoint();
	Conn.rollback(sp);
	注意:事务回滚后一定要将事务提交


在具体的应用中,有很多人在同一个时刻操作数据,如果其中有一个操作失败,那么所有的都失败。还有就是前后两次数据的查询结果不一致,原因是在这个时候有人执行了更新操作。等等问题。
这样的问题有:脏读,幻读,不可重复读。


脏读:指一个事务读取了另外一个事务未提交的数据。
	这是非常危险的,假设A向B转帐100元,对应sql语句如下所示
	update account set money=money+100 while name=‘b’;	
	update account set money=money -100 while name=‘a’;
	
	当两条语句位于同一事务时,当执行完sql事务还未提交时,B查询自己的帐户,会发现自己多了100元钱。此时,A等B查询完账户后可以将事务回滚,这样B就会损失1	00元。


不可重复读:是指在一个事务内两次查询的数据不一致,原因是在两次查询的过程中,另一事务更新了原有数据
	例如银行想查询A帐户余额,第一次查询A帐户为200元,此时A向帐户内存了100元并提交了,银行接着又进行了一次查询,此时A帐户为300元了。银行两次查询不一致	,就会导致最终多份报表结果不一致


	和脏读的区别是,脏读是读取前一事务未提交的脏数据,不可重复读是在事务内重复读取了别的线程已提交的数据。


幻读:也称虚读,是指在一个事务内两次查询中数据笔数不一致,事务1查询到几行数据,而事务2却在此时插入了几行新数据,当事务1再次查询时,会发现多了几行类似虚幻	的数据
	例如银行做报表统计account表中所有用户的总额时,此时总共
	五个账户,总金额为500元,这时有一个新的账户产生了,并且
	存了100元,这时银行再统计会发现帐户总金额为600元了,造
	成虚读同样会使银行遇到同样的困惑


MySql数据库共定义了四种隔离级别:
	serializable:可串行化,能避免脏读、不可重复读、幻读情况的发生
	repeatable read:可重读,能避免脏读、不可重复读情况的发生
	read committed:读取提交的内容,可避免脏读情况发生
	read uncommitted:读取未提交的内容最低级别,避免不了任何情况。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值