2015-03-19 2 views
1

Я создал базу данных Sqlite и все таблицы, необходимые для моего приложения, и поместил их в папку с ресурсами. При доступе к моему приложению я буду вставлять данные во все таблицы в базе данных. Теперь, если я переношу приложение через общий доступ к приложению, например, Shareit, я не могу видеть данные, которые я вставлял в новое приложение, которое я получил. Как сделать данные постоянными, чтобы при совместном использовании приложения все данные, добавленные во время выполнения, также должны совместно использоваться.Как вставлять данные в базу данных sqlite постоянно

+1

Просто используйте удаленную базу данных. База данных находится на сервере, а не на одном устройстве. –

ответ

-2

Чтобы добиться этого,

  1. Места базы ваших данных в папку активов.
  2. На странице всплеска скопируйте файл базы данных из папки с данными в папку базы данных проекта.

проверить, существует ли база данных уже существует или нет.

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(); 
     } 
    } 
+1

Отвечает ли ваш ответ на этот вопрос: «Теперь, если я переношу приложение через общий доступ к приложению, например, Shareit, я не могу видеть данные, которые я вставлял в новое приложение, которое я получил. Как сделать данные постоянными, чтобы, если я использую приложение, все добавленные временем среды выполнения также должны быть разделены. '? –

+0

спасибо за ваш быстрый ответ Yogendra. Каждый раз, когда я открываю новое приложение, база данных копируется из папки ресурсов в папку базы данных. Поскольку в базе данных нет данных, прикрепленных к базе данных, ничего не копируется. Есть ли способ сделать базу данных скопированной в папку баз данных постоянной? –

+0

пожалуйста, добавьте предыдущий способ -DBExist(). он будет проверять, тогда скопирует. – Yogendra

Смежные вопросы