如何永久地在sqlite数据库中插入数据

时间:2015-03-19 16:39:25

标签: android sqlite

我创建了Sqlite数据库和我的应用程序所需的所有表,并将其放在assets文件夹中。访问我的应用程序时,我将数据插入数据库中的所有表。现在如果我通过像Shareit这样的应用程序共享转移应用程序,我无法看到我在新收到的应用程序中插入的数据。如何使数据永久化,以便如果我共享应用程序,所有添加的运行时数据也必须共享。

1 个答案:

答案 0 :(得分:-2)

要实现它,

  1. 将您的数据库放入资产文件夹。
  2. 在启动页面上将资产文件夹中的数据库文件复制到项目的数据库文件夹中。
  3. 检查数据库是否已经存在。

    private void isDBExist() {
    
        String outFileName = "/data/data/" + getPackageName() + "/databases/"
                + DatabaseHandler.DATABASE_NAME;
        File f = new File(outFileName);
        if (!f.exists()) {
            f.getParentFile().mkdirs();
            copyDataBase(DatabaseHandler.DATABASE_NAME);
        } 
    
    }
    

    如果数据库不存在,则将数据库文件从资产文件夹复制到数据库文件夹中。

    private void copyDataBase(String DB_NAME) {
            // Open your local db as the input stream
    
            // ContextWrapper cw =new ContextWrapper(getApplicationContext());
            String DB_PATH = "/data/data/" + getPackageName() + "/databases/";
            if (android.os.Build.VERSION.SDK_INT >= 17) {
                DB_PATH = getApplicationInfo().dataDir + "/databases/";
            } else {
                DB_PATH = "/data/data/" + getPackageName() + "/databases/";
            }
    
            InputStream myInput;
    
            Log.i("Database", "New database is being copied to device!");
            byte[] buffer = new byte[1024];
            OutputStream myOutput = null;
            int length;
            // Open your local db as the input stream
    
            try {
                myInput = getAssets().open(DB_NAME);
                // transfer bytes from the inputfile to the
                // outputfile
                File f = new File(DB_PATH + DB_NAME);
                f.createNewFile();
    
                // dbFile.getParentFile().mkdirs();
    
                myOutput = new FileOutputStream(f);
                while ((length = myInput.read(buffer)) > 0) {
                    myOutput.write(buffer, 0, length);
                }
                myOutput.close();
                myOutput.flush();
                myInput.close();
                Log.i("Database", "New database has been copied to device!");
    
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }