CallableStatement callstmt = null;
String proc = "{call pkgInsertCircuitPort.insertCircuitPort(?)}";
callstmt = getConn().prepareCall(proc);
callstmt.setString(1, "111111");
isSuccess = callstmt.execute();
execute的时候,通过日志,发现取值失败!!!
就是取不到操作2的数据

解决方案 »

  1.   

    好像不行吧
    第一只能用JDBC调用SQL控制事务
    第二可以在存储过程里面用PL/SQL控制事务
      

  2.   

    恩 以前做的直接把它扔到job里面去了
      

  3.   

    我的整个逻辑很复杂,不可能把所有的动作都放在存储过程里面做!
    还有就是我的存储过程没有使用commit和rollback;纯粹就是让java的事物来进行rollbak或commit;
      

  4.   

    利用spring事务管理, 一个service方法结束提交一次事务。
      

  5.   

    我测试了一下,只通过JAVA调用一个存储过程,存储过程里不写COMMIT,通过JAVA语句来ROLLBACK 是可以的。
    并且执行的结果可以在JAVA里边查询得到,代码如下create or replace package body test is
    PROCEDURE TEST_INSERT IS 
      BEGIN
           INSERT INTO ITEM01(CD,ITEM_NAME,STD) VALUES('00000009','TESTINSERT','CCC');
      END;
    end test;
    try {
                CallableStatement vCs = null;                    
                vCs = (CallableStatement) pConn.prepareCall("{call test.TEST_INSERT}");             pConn.setAutoCommit(false);
                vCs.execute();
                PreparedStatement pstmt = pConn.prepareCall("SELECT ITEM_NAME FROM ITEM01 WHERE CD = ?");
                pstmt.setString(1, "00000009");
                ResultSet rs = pstmt.executeQuery();
                while (rs.next()) {
                 String name = rs.getString("ITEM_NAME");
                 System.out.println(" name is " + name);
                }
                pConn.rollback();
            } catch (SQLException sqle) {
                throw sqle;
            }
    java后台效果
     name is TESTINSERT
    plsql查询表
    SQL> select * from item01 t
      2  /CD       ITEM_NAME            STD
    -------- -------------------- --------------------
    00000001 1111                 1
    00000002 2222                 1
    002      nametest1            st1d
    003      nametest1            st1dSQL
      

  6.   

    jinsedeme0881 回答的的没错,我后来试了一下,存储过程不commit是OK的
    多谢了
      

  7.   

    一定要将 pConn.setAutoCommit(false);这句加上是吧?!