我有一个java这样的业务: 1-Call存储过程SP_INSERTS:插入数据而不提交 2-调用Web服务:检索数据以进行下一步调用。 3-调用存储过程SP_UPDATES:更新在第一步中创建的数据。 4-提交或回滚,如果一切正常或不正常。
我遇到的问题是,在第三步中,存储过程没有找到第一步中插入的数据(找不到数据),只有在第二步之后我才可以找到数据。你知道我能做什么吗?有提示吗?
答案 0 :(得分:1)
我不是Java专家,但是只要所有这些工作都在同一笔交易中完成,您就应该很好。我认为默认情况下,JDBC驱动器处于自动提交模式,因此每个语句在完成后都会提交。您可以使用以下方式更改此行为:
import React from "react";
import styles from "./KanbanCard.module.css";
/*
* The Kanban Board Card component
*/
class KanbanCard extends React.Component {
constructor(props) {
super(props);
this.state = {
collapsed: true,
index: {
name: this.name,
description: this.description,
project_stage: this.project_stage
},
};
}
render() {
return (
<div
className="card text-white bg-secondary mb-3"
draggable={true}
onDragEnd={(e) => {this.props.onDragEnd(e, this.props.project);}}
>
<div className="card-header"><h4>{this.props.project.name}</h4></div>
<div className="card-body text-white">
<div className="card-title"><strong>Description: </strong></div>
{(this.state.collapsed)
? null
: (<div className="card-text">{ this.props.project.description }<br/></div>)
}
<div
style={{'width': '100%'}}
onClick={(e) => {this.setState({collapsed: !this.state.collapsed});}}
>
{(this.state.collapsed) ? String.fromCharCode('8757') : String.fromCharCode('8756')}
</div>
</div>
<div className="card-footer" >
<div>
<button
className="btn btn-dark" onClick={(e) => {this.props.removeCard(this.props.index);}}>Delete
</button>
</div>
</div>
</div>
)
}
}
export default KanbanCard;
这要求所有这些步骤都由同一连接完成,因此,如果您使用某种类型的连接池,则可能无法正常工作。
请参阅:https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html#disable_auto_commit
答案 1 :(得分:-4)
source link 请在提供的链接中找到类似的情况,如它所描述的..您可以在您的过程中插入和更新您的程序,并根据需要进行操作,但是您不想这样做。.因此简而言之解决方案:进行插入和更新在一个过程中按顺序执行,并且您之间的逻辑作为过程使用 autonomous_transaction oracle关键字不影响 插入或更新语句。