- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
JDBC 编程之事务处理
数据库是多用户共享的资源,当多个用户并发的存取
数据时,在数据库中就会产生多个用户同时存取同一数据的 情况,若对并发操作不加控制,就可能会产生读取和存储不 正确的数据,破坏数据的一致性,而事务是并发控制的基本 单位,所谓事务是一个操作,这些操作要么都执行,要么都 不执行。它是一个不可分割的工作单位,比如说银行转账系 统,从一个账户扣款,并使用另一个账户收款,这两个操作 要么都执行,要么都不执行,所以,应该把它们看成是一个 事务。
、事务概述
事务是数据库维护数据一致性的单位,在每个事务
束时都能保持数据的一致性,对于我们编程人员,可以把数 据库事务看成是一组 SQL 语句, SQL 语句是一个逻辑单元, 他们是不可分割的。它们的执行结果应该作为一个整体,永 久性的修改数据库的内容,或者作为一个整体取消对数据库 的修改。
、事务的四个特征
事务的四个特征分别是原子性、一致性、隔离性、持久
性。
1、原子性:是指事务中包含的操作都被看作是一个逻
辑单位,这个逻辑单元中的操作要么全部成功,要么全部失 败。这也意味着事务中的所有元素作为一个整体提交或回
滚,事务的所有元素是不可分割的,是一个完事的操作。
2、
2、
致性:是指事物开始之前和事务结束以后,数据
库都牌一致性的状态,数据库的完事性约束没有被破坏。
3、隔离性:是指对数据库修改的多个事务是彼此隔离
的,这说明事务必须是独立的,不应该以任何形式影响其它 事务。
4、持久性:是指事务完成之后对系统的影响是永久的,
该修改真实的修改了数据库,即使系统出现故意也会一直保 留。
、事务的语句
1、开始事务:begin transaction2、提交事务:committransaction
1、开始事务:
begin transaction
2、提交事务:
committransaction
3、回滚事务:
roolbacktransaction
四、 JDBC 应用程序示例
1、新建类,名称为 TransactionDemo.java ,该类包含主
方法;
2、创建静态方法 getConnecion (),作用是加载 MySQL
的驱动程序并创建数据连接。
publicstatic Connection getConnection () {
Connection conn=null ;
try {
Class.forName( com.mysql.jdbc.Driver );
try { conn=DriverManager.getConnection ( jdbc : mysql :
//localhost : 3306/xqy_db , root , admin );
} catch ( SQLException e ) { e.printStackTrace(); } catch ( ClassNotFoundException e ) { e.printStackTrace(); return conn ;
3、创建静态insertUserData ()用于向用户表中插入
条记录。
publicstaticvoidinsertUserData () {
Connection conn=getConnection ();
String sql=insert into tbl_user (id,name,password,
email) values ( 10,Tom, 123456,Tom@126.com) ;
try {
Statement st=conn.createStatement(); inti=st.executeUpdate(sql);
System.out.println ( 向用户表中插入了 +i+ 条记录 );
st.close(); conn.close(); } catch ( SQLException e ) { e.printStackTrace();
4、创建静态用于向地址表中插入一条记录。此时地址
表中已经存在一条 id 为 1 的记录。
String sql=insert into tbl_address (id, city, country,
user_id) values ( 3, ShangHai, China, 10) ;
5、在主方法 main ()中调用 insertUserData ()和。
6、运行程序
会发现 insertUserData ()方法执行成功,而
idinsertAddressData ()方法出现异常,主键冲突,即已经有 为 1 的记录了, 插入数据不成功, 造成了数据不一致的问题。
id
以上问题使用事务处理机制,就可以保证数据的一致性。
五、使用事务改进 JDBC 应用程序示例
文档评论(0)