Java Oracle Transaction - PullRequest
       6

Java Oracle Transaction

2 голосов
/ 20 сентября 2011

Я хочу вставить данные в базу данных в разные таблицы.Из-за ограничений я должен сделать это в определенном порядке.Это означает, что сначала вставьте в таблицу a, затем b, затем c, .... и не смешивайте таблицы.Но я пишу программу, которая получает несколько CSV-файлов и должна импортировать их в базу данных, но программа не может знать, каков правильный порядок.Поэтому я думал, что транзакция будет правильным путем, потому что я слышал, что согласованность данных должна существовать только в конце транзакции.Но это не работает

Мой код выглядит так:

Connection connection = DriverManager.getConnection(url, user, pw);
connection.setAutoCommit(false);
Statement statement = connection.createStatement();
statement.addBatch("INSERT INTO c ....");
statement.addBatch("INSERT INTO a ....");
statement.addBatch("INSERT INTO b ....");
statement.addBatch("INSERT INTO a ....");
// ...
statement.executeBatch();
statement.close();
connection.commit();

Но я получу ORA-02291 (нарушение ограничения целостности): - (

Ответы [ 2 ]

8 голосов
/ 20 сентября 2011

Вам нужно сделать ограничение отложенным, таким образом, оно не проверяется до фиксации. Есть хорошая статья об этом здесь

> drop table c
table C dropped.
> drop table p
table P dropped.
> create table p (id number primary key)
table P created.
> create table c (id number primary key, p_id number)
table C created.
> alter table c add constraint pk_p foreign key (p_id) references p (id) deferrable
table C altered.
> insert into c values ( 1, 1 )
1 rows inserted.
> insert into p values ( 1 )
1 rows inserted.
> commit
commited.
0 голосов
/ 20 сентября 2011

Транзакция не поможет вам с этой проблемой. Вы можете попытаться отключить необходимые ограничения, вставить свои данные, а затем снова включить ограничения.

...