У меня есть 80-мегабайтная база данных SQLite, которую я преобразовал из Microsoft Access 10. Я загружаю ее в 1) sdcard телефона, 2) sdcard-ext или 3) внутреннее хранилище в зависимости от доступного пространства.База данных SQLite была создана на ПК с использованием SQLite 3.7.4.Он отлично работает на Android от версии 2.2 (8) и выше.Для обработки я создал класс DatabaseAdapter, который не использует open helper.
Вот база данных, открытая из моего класса DatabaseAdapter:
public DatabaseAdapter open() {
MyLog.d(TAG, "open");
try {
String databaseFile = databasePath + File.separator
+ GC.DATABASE_NAME;
theDB = SQLiteDatabase.openDatabase(databaseFile, null,
SQLiteDatabase.OPEN_READONLY
| SQLiteDatabase.NO_LOCALIZED_COLLATORS);
} catch (SQLiteException e) {
MyLog.d(TAG, "open error: " + e.getMessage());
theDB = null;
}
if (theDB == null) {
return null;
}
return this;
}
Конструктор проходит путь.Последовательность использования:
DatabaseAdapter dbAdapter = new DatabaseAdapter(databasePath);
if (dbAdapter.open() == null) {
// ooops. no database open...
return;
}
Cursor cursor = dbAdapter.someQuery(arg1, where, limit);
if (cursor != null)
while (cursor.moveToNext()) {
field1 = cursor.getString(0);
// etc.
}
cursor.close();
}
dbAdapter.close();
Ключом к открытию внешней базы данных является флаг NO_LOCALIZED_COLLATORS.Без этого open попытается получить доступ к таблице локализации Android.При создании внешних баз данных таблица не создается, и при запуске на телефоне происходит разрыв таблицы, не найденной.
Чтобы определить путь, который вы хотите использовать для базы данных, используйте Environment.getExternalStorageState () и соответственно используйте sdcard или внутреннее хранилище.
Используйте getExternalStorageDirectory (), чтобы получить каталог sdcard.Используйте this.getApplicationContext (). GetFilesDir () .getPath (), чтобы получить внутренний путь к хранилищу.Предполагая, что вы используете локальный или внешний путь в databasePath, вы можете загрузить базу данных в выходной файл, созданный как
File downloadOutput = новый файл (databasePath, "mysqlite.db");
После загрузки вы можете использовать функцию open (), показанную выше, чтобы подготовить базу данных для доступа.(Примечание: базу данных можно открыть как доступную для записи, а не только для чтения, как показано на рисунке.)
Надеюсь, я не слишком объяснил ...