现在回归原始做jdbc的程序。主要功能是实现一个sql脚本管理功能(版本控制)一共3张表
表一: sripit_info (主要存脚本的描述性信息,和最新的版本号和内容ID)
主要字段说明: id(主键),creator,createTime,version(最新版本号),content_id(最新版本对应的内容id)
表二:script_content(维护版本和脚本内容)
主要字段:id(主键),script_id(外键,表示属于哪个脚本),version(版本号),content(sql代码内容,是个 blob大字段)
表三:script_sqls (把不同版本的脚本内容拆分成单条sql放在这张表中)
主要字段:id(主键),text(一条sql文),content_id(外键,表示这条sql所对应的版本的内容id)
另外就是建个seq_script(orcale 的 sequence)
我想的设计流程是(假设是一个新增操作):
1、取得一个sequence,并另保存为sripit_id
2、插入 sripit_info 表
3、取得一个sequence,并另保存为content_id
4、插入 script_content 表,其中的外键可以用之前的sripit_id得到
5、批处理插入 script_sqls 表(把脚本的sql文拆分为单条sql语句,外键可以从content_id得到)
6、更新版本,把 content_id 和version信息 更新到sripit_info 表
7、完成
我现在的问题是,以上的每一步都是一个事务,但是业务上后面的事务都要依赖与之前的事务完成才能进行。
我不知道jdbc怎么去控制业务上的事务, 我已经设置了connection的autocommit为false.然后以上涉及insert的操作都是成功commit,失败rollback的。但是如何把整个业务设计成一个事务,就是以上7步只要有一步不成功,全部都rollback ,怎么做?
例如 我步骤2(插入 sripit_info 表)成功了,数据库确实是commit进去了,能查到了。但是后面的步骤4(插入 script_content 表)出错了,被rollback,没有提交到数据库,但我希望此时之前的操作也能都rollback。要怎么设计呢?
刚刚换单位,居然这边都不用spring和hibernate。全部是jdbc,小弟对jdbc的事务不是很清楚,请大家帮我解惑,谢谢
问题补充
我暂时吧所以业务写在一个事务里面了
关于jdbc多表操作事务的一些疑问,怎么去控制事务
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
5条回答 默认 最新
- sunweiherber 2009-03-12 13:17关注
在你的DAO层再加一层(比如BO层),在BO层声明Transaction,取得一个connection.
在DAO层把connection作为参数.
在BO层调用DAO层的方法,把connection传进去.
事务的提交在BO层完成.本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥30 STM32 INMP441无法读取数据
- ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
- ¥15 用visualstudio2022创建vue项目后无法启动
- ¥15 x趋于0时tanx-sinx极限可以拆开算吗
- ¥500 把面具戴到人脸上,请大家贡献智慧
- ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
- ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
- ¥30 c#打开word开启修订并实时显示批注
- ¥15 如何解决ldsc的这条报错/index error
- ¥15 VS2022+WDK驱动开发环境