但问题是并非所有手机都有root访问权限才能访问系统目录,而且我不能只将db文件放在SD卡中并从那里读取数据,因为你不知道如果手机中还有SD卡。我真的不知道这个,有人能帮我一把吗?我很欣赏。
答案 0 :(得分:0)
我有一个80兆字节的SQLite数据库,我是从Microsoft Access 10转换而来的。我将其下载到1)手机的SD卡,2)sdcard-ext或3)内部存储,具体取决于可用空间。 SQLite数据库是使用SQLite 3.7.4在PC上创建的。从版本2.2(8)开始,它在Androids上运行良好。为了处理,我创建了一个不使用open helper的DatabaseAdapter类。
这是从我的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,您可以将数据库下载到创建为
的输出文件中文件downloadOutput = new File(databasePath,“mysqlite.db”);
下载后,您可以使用上面所示的open()来准备数据库以进行访问。 (注意:数据库可以打开为可写,而不仅仅是如图所示只读。)
希望我没有解释......