我在android中的SD卡中有数据库文件,我想直接将SQLite数据库连接到SD卡路径并直接使用它们。
有没有办法做到这一点?
如果没有,我应该将数据库文件复制到/data/data/package/databases/
吗?有没有办法做到这一点?
我花了大约4个小时尝试这个,但我还没有得到任何结果!
答案 0 :(得分:1)
看一下这篇文章。对你来说应该够了。
修改强>
Handling SQLite is very easy and methodological procedure.
程序1 (这是内部存储) 检查你的外部路径中是否已经有数据库。为此,请使用下面的代码。请注意这组代码应该写 在DBhelper类的onCreate方法中。
if (!new File("/data/data/" + this.getPackageName()
+ "/database.sqlite").exists()) {
try {
FileOutputStream out = new FileOutputStream("data/data/"
+ this.getPackageName() + "/database.sqlite");
InputStream in = getAssets().open("databases/dic.db");
byte[] buffer = new byte[1024];
int readBytes = 0;
while ((readBytes = in.read(buffer)) != -1)
out.write(buffer, 0, readBytes);
in.close();
out.close();
} catch (IOException e) {
}
}else{
/database already exists.Do nothing
}
您应该将此代码放在MainActivity的onCreate函数中。您可以在整个项目中轻松使用自己的数据库。要访问您的数据库,您可以使用以下代码:
SQLiteDatabase sqliteDB = SQLiteDatabase.openOrCreateDatabase(
"/data/data/" + this.getPackageName() + "/database.sqlite",
null);
Cursor cursor = sqliteDB.rawQuery("SELECT * FROM table", null); // example of query
程序2 (这适用于外部存储) 在DBHelper类中创建一个COnstructor
public DatabaseHelper(final Context context){ super(context,Environment.getExternalStorageDirectory() + File.separator + FILE_DIR + File.separator + DATABASE_NAME,null,DATABASE_VERSION); }
当您要创建此DBHelper类的对象时,将在外部Path.And中创建新数据库并在OnCreate中检查 是否存在这样的特定路径:
if (!new File(Environment.getExternalStorageDirectory()
+ File.separator + FILE_DIR
+ File.separator + DATABASE_NAME).exists()) {
SQLiteDatabase.openOrCreateDatabase(Environment.getExternalStorageDirectory()
+ File.separator + FILE_DIR
+ File.separator + DATABASE_NAME,null);
}else{
/database already exists.Do nothing
}
答案 1 :(得分:1)
是的,用...打开数据库
File file = new File("/sdcard/my.db" );
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(file, null);
...不要忘记添加外部存储权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
上面的路径sdcard
可能会被
Environment.getExternalStorageDirectory() +"/" + "my.db"