求助,关于java调用oracle存储过程的事务控制

oss_dalu 2008-08-22 11:40:23
操作步骤:
1. java起事务
2. java调用jdbc数据库操作 (进行insert操作)
3. java调用oracle 存储过程,这个存储过程里面没有事务控制语句
4. java提交事务


发现操作3看不到操作2的数据变化,也就是说jdbc的事务和java调用的存储过程的事务是不一样的

问题是 可不可以使jdbc的事务和java调用 oracle的存储过程事务 是同一个?
也就是说可不可以用java控制oracle 存储过程的事务操作?
...全文
548 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qulimin18 2010-06-25
  • 打赏
  • 举报
回复
一定要将 pConn.setAutoCommit(false);这句加上是吧?!
oss_dalu 2008-10-06
  • 打赏
  • 举报
回复
jinsedeme0881 回答的的没错,我后来试了一下,存储过程不commit是OK的
多谢了
吉星9527ABC 2008-09-22
  • 打赏
  • 举报
回复
我测试了一下,只通过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 st1d

SQL
hwl1985 2008-08-22
  • 打赏
  • 举报
回复
恩 以前做的直接把它扔到job里面去了
harryzyp 2008-08-22
  • 打赏
  • 举报
回复
好像不行吧
第一只能用JDBC调用SQL控制事务
第二可以在存储过程里面用PL/SQL控制事务
oss_dalu 2008-08-22
  • 打赏
  • 举报
回复
CallableStatement callstmt = null;
String proc = "{call pkgInsertCircuitPort.insertCircuitPort(?)}";
callstmt = getConn().prepareCall(proc);
callstmt.setString(1, "111111");
isSuccess = callstmt.execute();


execute的时候,通过日志,发现取值失败!!!
就是取不到操作2的数据
jinsu_st 2008-08-22
  • 打赏
  • 举报
回复
利用spring事务管理, 一个service方法结束提交一次事务。
oss_dalu 2008-08-22
  • 打赏
  • 举报
回复
我的整个逻辑很复杂,不可能把所有的动作都放在存储过程里面做!
还有就是我的存储过程没有使用commit和rollback;纯粹就是让java的事物来进行rollbak或commit;

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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