将现有的SQLite数据库导入到Android应用程序中

3

我知道类似的问题已被提出,但我找不到适用于我的确切情况的解答。

我有一个应用程序,它创建数据库并填充等操作,但是我的设备上没有 root 访问权限,所以这就是我的问题。我需要将一些值填充到此数据库中,然后将其导入到我的应用程序/设备中。

如果我有 root 访问权限,我可以简单地去 /data/data/com.my.application/databases 文件夹中更换数据库,但由于我没有 root 访问权限,我需要能够将我更改的数据库导入到此位置并替换标准数据库。

有人能帮忙提供一些代码或导入数据库到此文件夹的示例吗?我只需要能够导入和替换现有的数据库。

谢谢, Wihan


在这里找到了一个看起来可行的答案。https://dev59.com/43I95IYBdhLWcg3w8y2N - Wihan Fourie
2个回答

5
你可以使用这个库在你的设备上使用已导入的数据库:

https://github.com/jgilfelt/android-sqlite-asset-helper

如文档所述,您只需要将数据库文件放在名为databases的目录下的assets文件夹中/assets/databases/database.db

然后创建一个继承自SQLiteAssetHelper的DBHelper类,如下所示:

public class DBHelper extends SQLiteAssetHelper {

    private static final String DATABASE_NAME = "example.db";
    private static final int DATABASE_VERSION = 1;

    public DBHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

}

现在您可以通过内容提供程序等方式访问您的数据。

此外,您可以使用http://sqlitebrowser.org/在计算机上创建预加载数据库。

希望这有所帮助。


0
public String loadJSONFromAsset(Context context) {
    String json = null;
    try {
        InputStream is = context.getAssets().open("Hospital.db");
        int size = is.available();
        OutputStream myoutput = new FileOutputStream("/data/data/-----PACKAGE NAME------/databases/Hospital.db");

        byte[] buffer = new byte[size];
        int length;
        while ((length = is.read(buffer)) > 0) {
            myoutput.write(buffer, 0, length);
        }

        // Close the streams
        myoutput.flush();
        myoutput.close();
        is.close();
        // byte[] buffer = new byte[size];
        // is.read(buffer);
        // is.close();
        // json = new String(buffer, "UTF-8");
    } catch (IOException ex) {
        ex.printStackTrace();
        return null;
    }
    return json;
}

需要这些被注释掉的行吗? - user7294900
请将其替换为您的软件包名称!@user7294900 - Xenolion

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接