写完一句,就execute一句。最后来给commit。jdbc缺省就是操作语句不更新,当你statement关闭或者commit才提交数据库。

解决方案 »

  1.   

    String sql = "";
    sql = "begin tran";
    sql += " update t1 ...";
    sql += " insert t2 ...";
    sql += " delete t3 ...";
    sql += " commit tran"
    dbconn.executeQuery(sql);oracle中:用过程吧.
    create or replace procedure proc_name
        sql varchar2(200);
    begin 
        sql:='update....';
        execute immediate sql;
        sql:='insert into ...';
        execute immediate sql;
        sql:='delete...';
        execute immediate sql;
        commit;
        exception 
            when others then 
                 rollback;
    end ;
      

  2.   

    to: dinya2003(OK) 
    我每条语句后面还有好多的参数呢,如条件什么的,那不是要传好这些参数进去?我系统中有大量的需要几条语句捆绑在一起执行的地方,如循环插入等,如果都要写成过程太麻烦了,请教有没有其他的办法,在程序中控制这些语句执行的事务。
      

  3.   

    如果你在Oracle里面能够保证你执行3条语句的Connection都是同一个,那么这样就能保证事务性!
      

  4.   

    leoiong(leoiong):
    我在java中,不知道如何解决,谢谢。
      

  5.   

    --参数例子:
    create or replace procedure proc_name(p_in in varchar2)   <---参数
        sql varchar2(200);
    begin 
        sql:='update......where Name= '||p_in ;
        execute immediate sql;
    ...为了保持事务一致,一次提交.出错回滚.写成循环也一样./
      

  6.   

    str_sql:='begin
                insert into ...;
                update ....;
                end;';
    execute immediate str_sql;
      

  7.   

    这个在pl/sql 存储过程里面执行没有问题
      

  8.   

    这个在pl/sql 存储过程里面执行没有问题:那我要在java中直接写怎么办呢
      

  9.   

    你可以试一下看看行不行
    如果不行的话
    写一个公用的存储过程
    专门执行动态pl/sql块或动态sql语句的,
    把语句写好,然后调用存储过程即可。
      

  10.   

    to bzszp(SongZip) :
    谢谢,我的程序中需要这样事务处理的地方不下百个,有些是很简单的,如:
    delete t1 where id = 1
    delete t2 where id = 1
    写成过程工作量比较大了。如果直接在前台程序中一起执行这两条,那会轻松好多,我的程序都是从sqlserver移植到oracle中的。我先去试试,看程序中行不行。
      

  11.   

    create table test(a number(10),b varchar2(5));然后我程序中:
            sql = "insert into test(a,b) values(1,'a')";
            dbconn.executeUpdate(sql);
            sql = "insert into test(a,b) values('a','a')";
            dbconn.executeUpdate(sql);
    这样不插入了第一条,不行啊,因为第二条出错,我要回滚才可以。
      

  12.   

    看这样是否支持:
    sql  = "begin
              insert  into  test(a,b)  values(1,'a');
              nsert  into  test(a,b)  values('a','a');
              exception when others then
              rollback;
              end;";  
    dbconn.executeUpdate(sql);
      

  13.   

    看这样是否支持:
    sql  = "begin
              insert  into  test(a,b)  values(1,'a');
              nsert  into  test(a,b)  values('a','a');
              exception when others then
              rollback;
              end;";  
    dbconn.executeUpdate(sql);--
    to bzszp(SongZip) :
    谢谢,还真得可以了,老大非常感谢啊,又解决了我一大难题!!!
      

  14.   

    然后我程序中:
            sql = "insert into test(a,b) values(1,'a')";
            dbconn.executeUpdate(sql);
            sql = "insert into test(a,b) values('a','a')";
            dbconn.executeUpdate(sql);
    这样不插入了第一条,不行啊,因为第二条出错,我要回滚才可以
    ==============
    在catch中dbconn回滚,没问题。