2011-08-17 4 views
0

내 문제는 내 안드로이드 응용 프로그램에서 존재 sqlite 데이터베이스를 사용하고 있습니다. 내가 잘못 경로를 사용하는 것이 의심안드로이드에 존재 SQLite 데이터베이스를 사용하여

08-17 06:35:18.416: ERROR/Database(286): sqlite3_open_v2("data/data/com.jeston.existed.sqlite/databases/android_test_db.db", &handle, 1, NULL) failed 
08-17 06:35:18.437: ERROR/AndroidRuntime(286): Uncaught handler: thread main exiting due to uncaught exception 
08-17 06:35:18.457: ERROR/AndroidRuntime(286): android.database.sqlite.SQLiteException: unable to open database file 

:이 응용 프로그램은 내가 오류를 받고 있어요, 시작하는 동안 http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications

- 그것을 관리하기 위해, 나는 내 작업을 설명하는 잘 알려진 기사를 사용 mydatabase.I 자산 폴더에 내 android_test_db 파일을 내려 놓고, 블로그에 기록 된대로

private final static String DB_PATH = "data/data/com.jeston.existed.sqlite/databases/"; 
private final static String DB_NAME = "android_test_db.db"; 

그래서, 내 질문은 더이하는 Pathes이 올바른지이거나 준? 아니면 공통점이 틀렸어?

모두에게 감사드립니다.

답변

2

db 이름 확장명은 정확히 동일해야합니다. 또한, 당신의 주된 문제는 잘못된 패키지를 지정했다는 것입니다. 루트 패키지 여야합니다. 이 시도 :

private final static String DB_PATH = "data/data/com.jeston.existed/databases/"; 
+0

SQLiteDatabase.OPEN_READONLY의 것이 될 것 같은데, 더 -이 변경 후의 렸기 때문에 나는 실수가있어 : 데이터베이스 파일을 열 수 없습니다. 경험적으로, 나는 내 메서드에서 오류를 현지화했습니다 : public int getCountRecords ( ) { 커서 c = myDB.query (DB_NAME, 새 문자열 [] { "_id", "name", "age"} , null, null, null, null, null); return c.getCount(); }; 이 메소드는 예외를 throw합니다. "android_test_table"테이블이 없습니다. –

+0

오 그래, 왜 DB_NAME에서 쿼리합니까? 쿼리 (...)의 첫 번째 매개 변수는 테이블 이름이어야합니다. –

+0

예, 당신의 권리, 절대적으로. 고맙습니다, 문제는 첫 번째 주장이 데이터베이스 이름이고 테이블 이름이 아니라는 것입니다. –

0

OpenDatabase 메서드는 다음과 같이한다 :

public void openDataBase() throws SQLException{ 
    //Open the database 
    String myPath = DB_PATH + DB_NAME; 
    myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.NO_LOCALIZED_COLLATORS); 
} 

사용 SQLiteDatabase.NO_LOCALIZED_COLLATORS 대신

관련 문제