急问:关于用JDBC操作事务,con.setAutoCommit(false)中的false是什么意思,如果改动为true又是什么意思?谢谢

jmistudent4 2006-09-28 09:11:57

try {
con = ConnectionManager.getConnction();
con.setAutoCommit(false);//false是什么意思
   ....
pStatement.executeUpdate();
con.commit();//commit是什么意思
con.setAutoCommit(true);//这里又来个true又是什么意思

} catch (SQLException sqlE) {
sqlE.printStackTrace();
try {
con.rollback();//是不是当操作失败的时就回滚呀

} catch (Exception e) {
e.printStackTrace();
}
} finally {
try {
pStatement.close();
  con.close();
} catch (SQLException e) {
e.printStackTrace();
}

} }
我的问题用注释给标出来了,谢谢答复呀!!
另外,当用户执行查询操作的时要不要什么事务呀
...全文
2698 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
wmzsl 2006-09-28
  • 打赏
  • 举报
回复
来晚了!

false的意思就是不自动提交,也就是说你在完成操作的时候还需要手动的取做提交!
freedom2001 2006-09-28
  • 打赏
  • 举报
回复
你在对数据库进行insert,update,delete的时候如果没有设置自动提交,虽然你执行了这些操作,但是数据库里的数据是不会有变化的,你的操作都是记录在缓冲里的.只有在执行了提交,数据库的数据才会真正发生变化.
举例子,你向数据库insert一条数据,如果现在con.setAutoCommit(false)就是设置不自动提交,那你insert完以后数据库里实际上是没有这条记录的,你必须用con.commit手动提交,这样才能真正把这条记录插入到数据库中.如果你设置con.setAutoCommit(true),那在你insert之后,JDBC会自动执行commit操作,这条数据就插入到数据库了.简单说手动提交就是你必须写commit来提交你对数据库操作,自动提交就是你不需要做 commit动作,由JDBC替你来完成这项工作.
建议先别研究什么程序,好好看看数据库的资料吧,这个搞不明白你程序没法写

给你回帖子真累啊,你还是从基础的东西一点点来吧,写数据库操作的程序前,应该先把数据库的相关知识都搞明白了.
jmistudent4 2006-09-28
  • 打赏
  • 举报
回复
不好意思,我不太明白,什么是手动提交事务?什么是让JDBC自动提交事务?con.setAutoCommit(true)和con.commit()达到同一个目的吗(即都提交了事务)?
freedom2001 2006-09-28
  • 打赏
  • 举报
回复
con.commit();是自己手动提交事务
con.setAutoCommit(true);是让JDBC自动提交事务。
con.rollback();是取消提交回滚数据

如果con.setAutoCommit(true),在对数据库操作后,数据已真实的更新到数据库里,不需要再用commit,此时调用con.rollback()也不起用了

如果设成false,那就是JDBC不自动提交,需要手动的使用commit或者rollback来进行提交或者回滚数据.

查询的时候是不需要进行事务控制的,只要在对数据库多个不同数据需要同步处理的时候才需要事务控制.比如银行取款,他必须有一个取款记录和帐户变化记录一起发生,单独发生一个是不行的,这时候就可以设成false,在两个操作都完成以后使用commit来一起提交.如果其中一个出现问题了,那就直接用rollback把两个都进行回滚,以保证数据一直性
小兽 2006-09-28
  • 打赏
  • 举报
回复
eagleking012((菜鸟也疯狂))
正解
lbx19822004 2006-09-28
  • 打赏
  • 举报
回复
con.commit();是自己手动提交事务
con.setAutoCommit(true);是让JDBC自动提交事务。
con.rollback();是取消提交
如果你直接用过SQL在数据库软件中操作过数据就会明白了:
SQL语句如果不commit()的话,你看到的数据只是在缓存中被修改了并没有真正影响到储存在数据库中的数据,只有提交以后才真正改变了数据库中的数据。
cnyxlxw 2006-09-28
  • 打赏
  • 举报
回复
mark!
zuguanqun 2006-09-28
  • 打赏
  • 举报
回复
是事务,打错了
zuguanqun 2006-09-28
  • 打赏
  • 举报
回复
这是基于事物的
con.setAutoCommit(false);//事物不自动提交,需要人手动提交

con.commit(); //手动提交
con.rollback() ,如果有异常就回滚
eagleking012 2006-09-28
  • 打赏
  • 举报
回复
开启或关闭自动提交模式:

con.setAutoCommit(false) ; con.setAutoCommit(true) ;

一旦关闭了自动提交,除非通过调用 commit() 显式地告诉它提交语句,否则无法提交 SQL 语句(即,数据库将不会被持久地更新)。在提交之前的任何时间,我们都可以调用 rollback() 回滚事务,并恢复最近的提交值(在尝试更新之前)。
zblaoshu1979 2006-09-28
  • 打赏
  • 举报
回复
con.setAutoCommit(false);//false是什么意思
false是con对象不自动连接
   ....
pStatement.executeUpdate();
con.commit();//commit是什么意思
提交
con.setAutoCommit(true);//这里又来个true又是什么意思
自动提交

} catch (SQLException sqlE) {
sqlE.printStackTrace();
try {
con.rollback();//是不是当操作失败的时就回滚呀

jmistudent4 2006-09-28
  • 打赏
  • 举报
回复
再问,如果不用事务,是不是默认的情况是自动提交呀?
strawbingo 2006-09-28
  • 打赏
  • 举报
回复
try {
con = ConnectionManager.getConnction();
con.setAutoCommit(false);//false是什么意思 --设定不自动提交,即只有commit才生效
   ....
pStatement.executeUpdate();
con.commit();//commit是什么意思 --提交使在操作在数据库中生效,其他事物可见刚才所做的操作
con.setAutoCommit(true);//这里又来个true又是什么意思 --设定自动提交,每次执行自动commit

} catch (SQLException sqlE) {
sqlE.printStackTrace();
try {
con.rollback();//是不是当操作失败的时就回滚呀 --当设为false时有用,失败回滚

} catch (Exception e) {
e.printStackTrace();
}
} finally {
try {
pStatement.close();
  con.close();
} catch (SQLException e) {
e.printStackTrace();
}

} }

另外,当用户执行查询操作的时要不要什么事务呀
不需要控制事物
dafei2599 2006-09-28
  • 打赏
  • 举报
回复
开启关闭自动提交模式

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧