将数据库连接到android中的本地文件夹

时间:2014-09-16 17:39:55

标签: android sqlite

我在android中的SD卡中有数据库文件,我想直接将SQLite数据库连接到SD卡路径并直接使用它们。

有没有办法做到这一点?

如果没有,我应该将数据库文件复制到/data/data/package/databases/吗?有没有办法做到这一点?

我花了大约4个小时尝试这个,但我还没有得到任何结果!

2 个答案:

答案 0 :(得分:1)

看一下这篇文章。对你来说应该够了。

http://androidexample.com/SQLite_Database_Manipulation_Class_-_Android_Example/index.php?view=article_discription&aid=51

修改

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"