1 con.setAutoCommit(false);// 更改JDBC事务的默认提交方式
2 dbc.executeUpdate("delete from bylaw where ID=" + sID);
3 dbc.executeUpdate("delete from bylaw _content where ID=" + sID);
4 dbc.executeUpdate("delete from bylaw _affix where bylawid=" + sID);
5 con.commit();//提交JDBC事务
问题:
1,第1条将jdbc提交方式改成事务提交后,2,3,4条更新数据库的时候,那些更新的sql语句放在哪儿呢,是放在Connection对象中,然后在调用commint()方法的时候提交给数据库吗
2,如果不是使用事务提交方式的时候,当执行2,3,4条的时候,sql语句放在哪儿呢
3,之所以是有上述问题,是因为不理解spring声明式事务,spring中在为某个方法声明一个事务后,如果使用的是jdbc事务管理器,那么这个jdbc事务管理器是如果从一个方法中获取相应的sql语句的呢
谢
2 dbc.executeUpdate("delete from bylaw where ID=" + sID);
3 dbc.executeUpdate("delete from bylaw _content where ID=" + sID);
4 dbc.executeUpdate("delete from bylaw _affix where bylawid=" + sID);
5 con.commit();//提交JDBC事务
问题:
1,第1条将jdbc提交方式改成事务提交后,2,3,4条更新数据库的时候,那些更新的sql语句放在哪儿呢,是放在Connection对象中,然后在调用commint()方法的时候提交给数据库吗
2,如果不是使用事务提交方式的时候,当执行2,3,4条的时候,sql语句放在哪儿呢
3,之所以是有上述问题,是因为不理解spring声明式事务,spring中在为某个方法声明一个事务后,如果使用的是jdbc事务管理器,那么这个jdbc事务管理器是如果从一个方法中获取相应的sql语句的呢
谢
解决方案 »
- 关闭tomcat时报错
- 关于jdk版本的问题
- 关于多线程定时服务的解决方案
- Hibernate的保存问题
- 关于一个form里面2个按钮,点击一个按钮之前,另一是灰色,点击后,另一个按钮可用
- 省、市、县 三级问题(在线等。急~~~)
- HTTP服务器和数据库缓存服务器如何协调处理数据
- 奇怪的tomcat问题
- 关于apache2050与tomcat5的整合!
- tomcat 启动失败求教。不部署可以正常启动,工程应该没有问题,之前在公司可正常运行,在我电脑也可以用,今天不知道什么情况!部署自己电脑后不好使了,报错如下
- 使用@SuppressWarning 需要调用execute()方法吗
- 代码显示颜色怎么调整?
//开启事物
2 dbc.executeUpdate("delete from bylaw where ID=" + sID);
3 dbc.executeUpdate("delete from bylaw _content where ID=" + sID);
4 dbc.executeUpdate("delete from bylaw _affix where bylawid=" + sID);
5 con.commit();//提交JDBC事务
//关闭事物如果没有申明spring的事物,请使用以上语句方式。
如果申明spring的事物直接con.commit();//即可完成数据的操作
多条Sql语句更新时,我用方法调用.即是每一条SQl语句写一个特定的方法去实现.
在jdbc执行executeUpdate,就相当于在数据库执行了sql命令,不管你是否设置了自动提交
如果设置了自动提交为true,执行了的sql马上生效,不然,处理数据会放在数据库的回滚段中,等待用户去commit或者rollback在java中执行con.setAutoCommit(true/false);
相当于在db中执行:
SET AUTOCOMMIT ON/OFF
1. 这些在commit之前都是针对当前的Connection进行的。 con.setAutoCommit(false);// 更改JDBC事务的默认提交方式 dbc.executeUpdate("delete from bylaw where ID=" + sID);
dbc.executeUpdate("delete from bylaw _content where ID=" + sID);
dbc.executeUpdate("delete from bylaw _affix where bylawid=" + sID);
添加一条:
select ^^
这个时候select 也能查到上面更改完的数据,不过其他的connnection中是查不到的,因为数据库中的数据并没有改变。还有就是 commit之前,del 已经执行了,所以sql语句应该也被销毁了。(这点不是非常确定 )
问题1和问题2:无论语句1设置值是false还是true
2,3,4条更新数据库的时候,那些更新的sql语句都提交到数据库了,
数据库是否真执行取决于autocommit了,如果是true,就是每收到一条sql就立即执行,
否则必须等到commit才真正执行,没有commit不执行。所以问题3也可以解释了,connection是不保留sql语句的,sql语句保存在数据库执行引擎中。
spring的事物管理主要是保证整个事务是同一个connection就是了(当然JTA不是这样的)
我也是用的。
本地是不需要存储SQL语句的。
提交、回滚都是需要服务器支持的,JDBC只是将命令发送到数据库中你commit之后 数据库里面的值才改变
本地是不需要存储SQL语句的。
提交、回滚都是需要服务器支持的,
JDBC只是将命令发送到数据库中.
2,如果不是使用事务提交方式的时候,当执行2,3,4条的时候,sql语句放在哪儿呢
答:其实这两个问题其实是一个意思。这些Sql都执行了,如果数据库的隔离级别设置成“未提交读”,那么可以查询到数据。只有事务提交了,才能正常看到,因为基本上所有数据库的隔离级别都是“已提交读”,如sqlserver2000,或是"可重复读",如mysql和oracle。
3,之所以是有上述问题,是因为不理解spring声明式事务,spring中在为某个方法声明一个事务后,如果使用的是jdbc事务管理器,那么这个jdbc事务管理器是如果从一个方法中获取相应的sql语句的呢
答:参照11楼说的。