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语句的呢
谢
解决方案 »
- 在公司里Struts的标签常用吗?
- 如果在websphere下配置调用ejb3,高手求援,高分??????
- 用MyEclipse应用gis时,必须先按gis环境吗?我已经有个现成的gis项目啦,
- 高分请教一个Proxool dataSource JNDI 的问题,希望明白的朋友能解答~!
- java org.apache.axis.client.AdminClient deploy.wsdd 为什么老是不行?
- help
- 这个问题解决了,给40分儿
- 有关Message Driven Bean的难题!!!
- 如何用实现对黑名单中的网址进行拦截
- Hibernate映射报错 求解
- 使用@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楼说的。