2010-04-06 3 views
1

우리는 동시에 데이터베이스의 동일한 연결 개체를 사용하여 여러 데이터베이스 테이블과 함께 작업 할 수 있습니다.은 동시에 데이터베이스의 여러 테이블에 삽입

테이블 1에 값을 삽입하고 데이터베이스 2의 테이블 2에 동일한 값의 데이터베이스 연결 개체가있는 것으로 가정합니다.

코드에서 sqlite 데이터베이스를 사용하고 commit() 중에 데이터베이스 잠김 예외가 발생합니다.

답변

1

모든 트랜잭션이 전체 데이터베이스를 잠급니다. 진행중인 트랜잭션 중에는 sqlite 데이터베이스에 액세스 할 수 없습니다.

+0

예외가 발생했습니다. 데이터베이스 잠김 예외 또는 데이터베이스 잠김 예외가 발생할 수 있습니다. 예외 : 부적절한 상태에서 호출 된 call() stacktrace java.lang.IllegalStateException : org.ibex에서 부적절한 상태로 호출 된 call() org.sqlite의 org.sqlite.NestedDB.call (NestedDB.java:406)에서 .nestedvm.Runtime.call (Runtime.java:655) at org.ibex.nestedvm.Runtime.call (Runtime.java:647). org.sqlite.NestedDB.reset (NestedDB.java:135)에서 NestedDB.call (NestedDB.java:389) org.sqlite.RS.close (RS.java:98) – rajkumari

+0

에 있거나 데이터베이스 잠김 예외가 obj로 인해 발생했습니다. Connection.commit() line – rajkumari

+0

잠긴 예외는 DB가 사용 중임을 의미합니다. 당신은 db 작업을위한 wrapper 라이브러리를 사용해야 만한다. 코드로 게시물을 업데이트하십시오. –

1

당신은 모두 같은 연결을 사용하여, 테이블 당 하나의 명령문이 필요합니다

INSERT INTO t1(x, y, z) VALUES(1, 2, 4); 
INSERT INTO t2(a, b, c) VALUES("FOO", "BAR", 2.1); 

이들은 하나의 작업 단위로 삽입되어야한다.

동일한 개체에서 값을 삽입하는 경우 문제가 발생할 가능성이 큽니다. "한 번만 말해보십시오"는 제안은 두 개의 서로 다른 테이블에 동일한 값을 저장할 필요가 없다는 것을 의미합니다. 한 번 삽입하고 트리거를 사용하여 기록 테이블에 넣거나 그런 식으로.

+0

다음 예외가 발생했습니다. 데이터베이스 잠김 예외와 관련이 있거나 데이터베이스 잠김 예외가 발생할 수 있습니다. 예외 : 부적절한 상태의 스택 추적으로 호출 된 call() java.lang.IllegalStateException : org.ibex에서 부적절한 상태로 호출 된 call() org.sqlite의 org.sqlite.NestedDB.call (NestedDB.java:406)에서 .nestedvm.Runtime.call (Runtime.java:655) at org.ibex.nestedvm.Runtime.call (Runtime.java:647). org.sqlite.NestedDB.reset (NestedDB.java:135) at org.sqlite.RS.close (RS.java:98)에서 NestedDB.call (NestedDB.java:389) – rajkumari

+0

잘 모른다. 몇 가지 코드를 게시하십시오. – duffymo

관련 문제