2012-06-20 5 views
2

을 열 수 없습니다, 두 개의 프로세스가,의 프로세스 A와 B가안드로이드 android.database.sqlite.SQLiteException : 내 안드로이드 응용 프로그램에서 데이터베이스 파일

프로세스 A가 시도하는 경우 sqlite가 데이터베이스에 액세스 할 수 있다는 재미 가정 해 봅시다 , 다 괜찮아. 프로세스 B가 그렇게하면 그러나, 다음과 같은 예외가

android.database.sqlite.SQLiteException을 표시됩니다 : 데이터베이스 파일을 열 수 없습니다 : 은 배타적 BEGIN을;

실제로 내 응용 프로그램은 SQLite 데이터베이스를 사용하려고하지 않습니다. 대신 Google 웹 로그 분석을 사용하여 사용자를 추적하고 SQLite 데이터베이스를 사용합니다.

왜 이런 일이 발생합니까? 고맙습니다.

답변

2

실제로 사용하고있는 것은 Transaction입니다. 트랜잭션이 진행 중이면 다른 프로세스가 데이터베이스에 액세스 할 수 없습니다.

나는 때때로 그런 일이 예외를

을 받고 그 이유는 생각 beginTransaction가되지 오픈 데이터베이스 접속에 대해 불려 갔을

  1. .
  2. SQL 문이 포함 된 구문 오류
+0

하지만 앞서 언급 한 것처럼 Google Analytics는 sqlite 데이터베이스를 사용하고 예외를 호출합니다. 심지어 beginTransaction을 호출하더라도 애널리틱스 대신 데이터베이스 만 잠글 수 있습니다. – Bear

+0

@Bear 귀하의 Google 웹 로그 분석은 귀하의 데이터베이스에 대한 독점적 인 통제권을 가지고 있으며 귀하의 요청이 통합되지 않도록합니다. – Akram

1

프로세스 A가 sqlite 데이터베이스에 액세스하려고하면 모든 것이 정상입니다. 그러나 프로세스 B가 예외를 표시하면 예외가 표시됩니다.

Sqlite는 응용 프로그램 데이터베이스 디렉토리의 데이터베이스 만 열 수 있습니다. 이 과정에서 데이터베이스를 디렉토리를 읽을 수 없습니다 해하지 프로세스 B에 액세스 할 수 있도록 귀하의 경우 데이터베이스에

DB_PATH = "/data/data/"+ context.getPackageName() + "/databases/"; 

는 디렉토리 프로세스에 존재한다.

위의 경로를 제공하여 프로세스 B 디렉토리에서 해당 데이터베이스 파일을 복사 할 수 있습니다.

+0

getApplicationContext help? – Bear

+0

프로세스 A와 프로세스 B가 의미하는 바는 각각 다른 프로젝트입니까? 여기에 소스 코드를 공유하면 도움이 될 것입니다. –

+0

그들은 동일한 프로젝트입니다 – Bear

2
  • 당신은 close프로세스의 데이터베이스와의 연결을 가지고 먼저 프로세스 B와 데이터베이스를 사용하기 전에.
  • 이렇게하면 concurrency이 해결됩니다.
  • 우리는 나는이 문제가 될 수있는 희망

db.close();를 사용합니다.

관련 문제