JAVA 里面怎写Oracle的数据库回滚

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA 里面怎写Oracle的数据库回滚相关的知识,希望对你有一定的参考价值。

JAVA 里面怎写Oracle的数据库回滚 麻烦写个例子

//举例子,比如你在写一个级联删除的方法的时候,为了保证数据完整性,删除的时候一定要确定该删的都删了才行,否则就要回滚,下面是删除方法的例子:public boolean delete(int sID) //成功删除会返回true;
 dbc = new DataBaseConnection();//根据你自己的方式创建数据库的连接
 Connection con = dbc.getConnection();//得到Connection
 try
  con.setAutoCommit(false);// 更改JDBC事务的默认提交方式,默认是true,是自动提交;
  dbc.executeUpdate("delete from xiao where ID=" + sID);//删除
  dbc.executeUpdate("delete from xiao_content where ID=" + sID);//删除
  dbc.executeUpdate("delete from xiao_affix where bylawid=" + sID);//删除
  con.commit();//提交JDBC事务,如果没问题,这时才真正的删除了;
  con.setAutoCommit(true);// 恢复JDBC事务的默认提交方式,这是个好习惯;
  dbc.close();//关闭连接
  return true;//删除成功
 
 catch (Exception exc)
  con.rollBack();//回滚JDBC事务,出现异常,为保证数据完整性,此次操作回滚,不删除;
  exc.printStackTrace();//输出异常信息;
  dbc.close();//关闭连接
  return false;//删除失败
 
//顺便说一下,java中JDBC的事务管理,跟你用的是什么数据库没关系,用什么数据库都是这样;
参考技术A 你是用JDBC吗?下面这段是JDBC的事务处理控制的例子,包括提交和回滚java 代码
try

conn = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;User=JavaDB;Password=javadb;DatabaseName=northwind);

//点禁止自动提交,设置回退

conn.setAutoCommit(false);

stmt = conn.createStatement();

//数据库更新操作1

stmt.executeUpdate(“update firsttable Set Name='testTransaction' Where ID = 1”);

//数据库更新操作2

stmt.executeUpdate(“insert into firsttable ID = 12,Name = 'testTransaction2'”);

//事务提交

conn.commit();



catch(Exception ex)

ex.printStackTrace();

try

//操作不成功则回退

conn.rollback();



catch(Exception e)

e.printStackTrace();



参考技术B 用jdbc的话 …… Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
String tableName = args[0];
Integer id = JdbcUtil.parseInt(args[1]);
String name = args[2];
String command = args[3];
try
con = JdbcUtil.getConnection();
con.setAutoCommit(false);
String sql = "insert into "+tableName+
" values(?,?)";
ps = con.prepareStatement(sql);
ps.setInt(1,id);
ps.setString(2,name);
ps.executeUpdate();
con.commit();//手动提交 catch(Exception e)
System.out.println(e.getMessage());
try
con.rollback();//手动回滚
catch(Exception ex)
System.out.println(ex.getMessage());

finally
JdbcUtil.close(rs,ps,con);
用hibernate的话Session s = HbnUtil.getSession();
try
s.beginTransaction();//开启事务
String hql = "from Account";
List accts = s.createQuery(hql).list();
printAccts(accts);
s.getTransaction().commit();//事务提交
catch (HibernateException e)
e.printStackTrace();
s.getTransaction().rollback();//事务回滚
finally
s.close();
HbnUtil.closeSessionFactory();
参考技术C con.rollback()就可以回滚~是不是做数据同时插入删除用的?

如果实现oracle中DDL语句的回滚

如题,大家都知道DDL是自动提交的语句,那么有没有办法实现撤消已经成功执行的DDL或相应组件能实现这样的功能?比如我要修改表T的结构,其中分别要删除字段A,执行成功了,然后再修改字段B的类型由字符类型改变为数字类型,但因为该表中字段B不为空而导致修改字段B的类型将失败,我想回归到未做任何修改之前,但又不能使用数据库还原,因为这一还原会影响其它用户正在进行的操作,应该只影响我当前用户对这个表的操作,虽然有flashback功能,但这个只是10g以上版本才有的功能,而我想要的实现不应该依赖于此功能,要不然不同数据库版本就不通用了,而这个操作也不能有过日志还原功能,因为不应该人为干预,因为我要做的是一个可以修改表结构的工具,应该是程序自动实现的,虽然采用临时表来保留修改之前的数据行,还原结构后再把数据行重新替换回去可以达到效果,不过这样做势必要耗费很大的开消,特别是在数据量大的时候特别明显,请问大侠们有没有更好的实现思路或现成的组件能达到这个功能要求的?谢谢!!!
谢谢大家,大家都知道DDL语句不能回滚,请不要再回答“DDL语句不能回滚”之内的回答了,浪费表情!我这里提问的目的是想征求新的思路!请认真阅读前面的提问内容后再回答!谢谢!

参考技术A ddl语句的回滚不可以回滚 参考技术B DDL语句无法回滚,因为DDL语句执行前和执行后各提交一次.
FLASHBACK TABLE 语句说明:
Also, Oracle Database cannot restore a table to an earlier state across any DDL operations that change the structure of the table.

参考资料:Oracle SQL Language Reference

以上是关于JAVA 里面怎写Oracle的数据库回滚的主要内容,如果未能解决你的问题,请参考以下文章

java:Oracle(事务,分页,jdbc)

6. Oracle 回滚(ROLLBACK)和撤销(UNDO)

oracle 提交事务后为啥不能撤销或回滚,不是有撤销段吗

如果实现oracle中DDL语句的回滚

Oracle 回滚(ROLLBACK)和撤销(UNDO)

使用 Oracle OCCI 回滚事务