내 자신의 SQLite 데이터베이스, Android 및 greenDAO 생성기를 사용하여 내 Android 앱에 대한 클래스를 생성하는 간단한 예제를 수행하려고합니다.
내 데이터베이스 파일은 다음과 같이 정의됩니다.
1) 다음 구조로 "OneTableDB"(확장자 없음, SQLite 3)라는 데이터베이스를 만듭니다.
개체 : 교수
항목 : android_metadata
그런 다음 android_metadata를 'en_US'값으로 채웠고 엔티티에는 행이 거의 없습니다.
2) 내 Android 앱 구조에 위치 : proj_root / databases / 데이터베이스 파일의 전체 경로 : proj_root / databases / OneTableDB
3) 데이터베이스가 있는지 여부를 확인하는 방법이 있습니다 (제 경우에는 데이터베이스 폴더 안에 배치했기 때문에 존재해야 함)
private boolean databaseExists() {
SQLiteDatabase sqliteDatabase = null;
try {
String databasePath = DB_PATH + DB_NAME;
File f = new File(DB_PATH + DB_NAME);
f.exists();
sqliteDatabase = SQLiteDatabase.openDatabase(databasePath, null,
SQLiteDatabase.OPEN_READONLY);
} catch (SQLiteException e) {
e.printStackTrace();
}
if (sqliteDatabase != null) {
sqliteDatabase.close();
}
return sqliteDatabase != null ? true : false;
}
//DB_PATH = /data/data/com.myapp.android_dao_tests/databases/
//DB_NAME = OneTableDB
f.exists ()에서 디버깅하면 false 값을 반환 한 다음 중단됩니다.
sqliteDatabase = SQLiteDatabase.openDatabase(databasePath, null,
SQLiteDatabase.OPEN_READONLY);
디버깅하는 동안 경로가 올바른지 확인하기 위해 adb 셸을 사용했으며 실제로 /data/data/com.myapp.android_dao_tests/로 이동할 수 있으며 데이터베이스 폴더가 없습니다!
이 문제를 어떻게 해결할 수 있습니까?
미리 감사드립니다.
DB "템플릿"은 apk에 번들링 될 수 있도록 assets / 폴더에 저장됩니다. 그런 다음 코드는 자산 /에서 데이터베이스 /로 DB를 복사하여 일반 SQLite DB로 액세스 할 수 있도록합니다.
추가 조사 결과, 안드로이드는 새로운 DB를 자신의 것으로 인정하지 않는 것 같습니다. 분명히 내장 된 DB 메커니즘은 이러한 방식으로 사용되지 않았습니다.
접근하는 올바른 방법은 데이터를 assets /에 텍스트 형식으로 유지하는 것입니다. 앱이 시작되고 DB가 없음을 발견하면 스키마 자체를 생성하고 자산 / 폴더.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다