2012-09-07 2 views
0

데이터베이스 관련 앱을 구현 중입니다.데이터베이스가 열리지 않는 예외는 예외입니까?

여러 번 열리고 닫는 데이터베이스 연결을 삽입, 업데이트 및 삭제하려고합니다.

괜찮습니다.

하지만 데이터베이스가 다른 상황에서 예외적으로 열리지 않는 경우가 있습니다.

어떻게 이러한 문제를 해결할 수 있습니까?

+0

데이터베이스를 열 수 없으면 여기에 log cat을 게시하십시오. 우리는 응용 프로그램의 마음을 읽을 수 없습니다 :) –

+0

이것은 일반적으로 2 개 이상의 스레드가 동일한 테이블이나 데이터를 수정하려고 할 때 발생합니다. 다음 디자인 패턴을 따르십시오 http://www.androiddesignpatterns.com/2012/05/correctly-managing-your-sqlite-database.html. DAO 호출마다 db를 열고 닫을 필요가 없습니다. – vrs

+0

가능한 경우 항상 코드를 입력하고 답변과 upvote를 수락하십시오. 또한 연구 기초 질문을하십시오. –

답변

1

당신이 적절한 예외 처리를하지 않으면 어떤 원인인지 알 수 없습니다.

그러나 좋은 생각은 안드로이드와 SQL 라이트에 대한 좋은 ORM 매퍼를 채택하는 것이고 이것은 데이터베이스 상호 작용과 예외 처리를 개선하고 그것을 효율적으로 열고 닫을 것입니다.

원하는 경우 SUGAR 또는 ORMLight을 선택할 수 있습니다. 내 생각에 이것은 당신의 문제를 해결하는 데 도움이 될 것입니다.

1

제공 한 정보를 바탕으로 문제는 비즈니스 로직 및 아무도 없다고 추측 할 수 있지만 근본 원인을 알 수 있어야합니다. 코드가 없으면 정확한 장소를 알려 드릴 수 없습니다. 가능한 이유 중 하나는 비즈니스 논리에 따라 닫힌 데이터베이스에서 일부 작업 (삽입, 업데이트)을 시도하는 것일 수 있습니다.

DB가 필요할 때 항상 열려 있는지 확인하기 위해 해결 방법을 사용할 수 있습니다. 게으른 초기화 접근법을 사용하여 데이터베이스 게터 메소드를 구현하면 적어도 액세스해야 할 때 DB가 열려 있음을 보장합니다. 1. 메이크업 DB 객체 반환하기로되어 공공 방법 : 코드 사용 도처에서, 이제 DB를 액세스하려면이 방법을

public SQLiteDatabase getDB() { 
    if ((mDataBase == null) || (!mDataBase.isOpen())) { 
     // create or open your database using an OpenHelper 
     mDataBase = SQLiteOpenHelper.getWritableDatabase(); 
    } 
    return mDataBase; 
} 

를 대신 직접 접근 여기

내가 이야기하고있는 무슨이다 변수 mDataBase.

코드는 단지 아이디어 만주고 실제로 컴파일 할 수는 없습니다. 그래도이 대안을 사용하는 대신 비즈니스 논리를 수정하는 것이 좋습니다.

관련 문제