JDBC高级开发:手动与自动事务管理实战

需积分: 0 0 下载量 23 浏览量 更新于2024-06-30 收藏 229KB DOCX 举报
本篇文章主要介绍了JDBC高级开发中的事务管理和在MySQL数据库中的事务操作。首先,事务被定义为逻辑上的一组操作,它们要么全部成功,要么全部失败,确保数据一致性。在MySQL中,有两种事务管理方式:自动提交和手动提交。 1. **手动提交示例**: - 使用`starttransaction;`语句开始一个事务。 - 更新操作,例如:`updateaccountsetmoney=money-1000wherename='jack';` 和 `updateaccountsetmoney=money+1000wherename='rose';` - 在所有操作完成后,使用`commit;`提交事务,或者在遇到错误时使用`rollback;`回滚事务以撤销操作。 2. **自动提交模式**: - MySQL默认为自动提交模式,这意味着每执行一条SQL语句都会自动提交事务。可以通过设置`setautocommit=0;`将全局变量`autocommit`改为`OFF`,来关闭自动提交并手动管理事务。 3. **JDBC事务操作**: - 为了在Java应用中进行事务管理,通常会编写一个事务处理模板代码,如`demo01()`方法: - 首先,使用`Connection conn = null;`获取数据库连接。 - 调用`conn.setAutoCommit(false);`开启事务,防止自动提交。 - 进行数据库操作,比如增加或减少账户余额。 - 如果操作成功,调用`conn.commit();`提交事务;如果出现异常,则调用`conn.rollback();`回滚事务。 - 无论成功还是失败,最终都会通过`conn.close();`释放资源。 4. **扩展至Oracle数据库**: - Oracle数据库也有自己的事务管理机制,但默认情况下不自动提交,用户需要显式地调用`commit()`或`rollback()`来管理事务。 总结起来,本文详细讲解了如何在JDBC中利用MySQL的自动提交和手动提交模式进行事务管理,以及如何在实际代码中实现事务操作,确保数据的完整性和一致性。同时,还提及了Oracle数据库与MySQL在事务管理上的区别。

clc,clear,close all; b=dir('E:\Work\工作事务文件夹\潮汐课程设计\数据\B站水位数据.txt'); for i=1:length(b) fid=fopen(b(i).name); dataB{i}=textscan(fid,'%f-%f-%f %f:%f %f'); fclose(fid); end a=dir('E:\Work\工作事务文件夹\潮汐课程设计\数据\A站水位数据.txt'); for i=1:length(a) fid=fopen(a(i).name); dataA{i}=textscan(fid,'%f-%f-%f %f:%f %f'); fclose(fid); end %% %求日月距平 yearA=dataA{1,1}{1,1} yearB=dataB{1,1}{1,1} monthA=dataA{1,1}{1,2} monthB=dataB{1,1}{1,2} heightB=dataB{1,1}{1,6} heightA=dataA{1,1}{1,6} MSLB_L=mean(heightB); MSLA_L=mean(heightA); for i=1:1096%%三年的日距平 MSLA_S_day(i)=sum(heightA(i*24-23:i*24))/24;% A站日距平 MSLB_S_day(i)=sum(heightB(i*24-23:i*24))/24;% B站日距平 end MSLA_S_day=MSLA_S_day-MSLA_L; MSLB_S_day=MSLB_S_day-MSLB_L; T=1991; for i=1:3%%三年的月距平 m=find(yearA==T); T=T+1 hA=0; k=0; for j=1:12 k=monthA(m,1); hA=heightA(m,1); n=find(k==j); MSLA_S_month(1,(i-1)*12+j)=sum(hA(n,1))/length(n); end end T=1991; for i=1:3 m=find(yearB==T); T=T+1 hB=0; k=0; for j=1:12 k=monthB(m,1); hB=heightB(m,1); n=find(k==j); MSLB_S_month(1,(i-1)*12+j)=sum(hB(n,1))/length(n); end end MSLA_S_month=MSLA_S_month-MSLA_L; MSLB_S_month=MSLB_S_month-MSLB_L; figure(1) plot(MSLA_S_day) hold on plot(MSLB_S_day) legend('A站三年日距平','B站三年日距平') set(gca,'XTickLabel',{'1月','6月','12月','6月','12月','6月','12月'}); figure(2) plot(MSLA_S_month(1,:)) hold on plot(MSLB_S_month(1,:)) legend('A站三年月距平','B站三年月距平') set(gca,'XTickLabel',{'1月','6月','12月','6月','12月','6月','12月'}); %%保存数据 save MSLA_S_month ; save MSLB_S_month; save MSLA_S_day; save MSLB_S_day; save MSLA_L; save MSLB_L; 分析一下代码每一步

2023-07-10 上传