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

时间:2015-11-12 09:23:12

标签: android sqlite android-sqlite

所以我知道有类似的问题已被问到,但我找不到适合我的确切案例。

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

如果我有root访问权限,我可以直接替换/data/data/com.my.application/databases文件夹中的数据库,但由于我没有root访问权限,我需要能够导入这个数据库我改成了这个位置并替换了标准位置。

任何人都可以帮我一些代码或如何将数据库导入此文件夹的示例吗?我只需要能够导入和替换现有的。

谢谢, 的Wihan

2 个答案:

答案 0 :(得分:4)

您可以使用此库在设备上使用导入的数据库:

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

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

然后创建一个从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/在计算机上创建预装数据库。

希望它有所帮助。

答案 1 :(得分: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;
    }