2016-04-01 17 views
-1

sqlite veritabanı güncelleştirmesi sağlayan bir işlev yapıyorum. Android App'e ilk kez girdiğimde veri klasörüme kopyalanan varlıklar klasöründe bir veritabanı (demo.db gibi) var.Bir sqlite tabloyu varlıklardan veriye veya verilere kopyalayın Android

MySQLiteHelpter SQLiteOpenHelper uzanır:

benim bir uygulama için yeni sürümüne sahip Ancak, ben zaten verilerde oluşturuldu varlıklar klasöründe sqlite tablo değiştirmeniz gerekiyor/veri folder.Here benim kodudur

Internet'te arama gibi
public static void loadDB(Context context, String dbName) { 
    String packName = context.getPackageName(); 
    String dbPath = "data/data/" + packName + "/databases"; 

    try { 
     File e = new File(dbPath); 
     if(!e.exists()) { 
      e.mkdirs(); 
     } 

     File dest = new File(e, dbName); 
     if(dest.exists()) { 
      return; 
     } 

     dest.createNewFile(); 
     InputStream in = context.getResources().getAssets().open(dbName); 
     int size = in.available(); 
     byte[] buf = new byte[size]; 
     in.read(buf); 
     in.close(); 
     FileOutputStream out = new FileOutputStream(dest); 
     out.write(buf); 
     out.close(); 
    } catch (Exception var10) { 
     var10.printStackTrace(); 
    } 

} 

, benimkine benzer bazı soru bulduk: İşte

@Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     for(int i = oldVersion; i <= newVersion; i++){ 
      switch (i){ 
       case 8: 
        //delete the older table 
        db.execSQL("drop table if exists " + DFY_BD_DISTRICT); 

        //do something. 
        //I need to copy the table from the assets folder even I have already created the database in the previous version. 

        break; 
      } 
     } 
    } 

ilk kez veri/veri klasörüne benim veritabanını kopyalamak için kullanmak benim kodudur https://stackoverflow.com/questions/12264860/android-sqlite-database-copying-table-from-assets-to-local-app-database Buna sevindim Bana biraz yardım edebilirseniz:) Daha fazla kod veya daha fazla soruna ihtiyacınız varsa, kodumu mümkün olan en kısa sürede yapıştıracağım.

cevap

0

Yerel varlık veritabanını android cihaza kopyalamak için aşağıdaki işlevi kullanabilirsiniz.

String DB_PATH = "/data/data/com.example.app/databases/" 


public String initialiseDB(String dbName,String copyas,Context context) 
    { 

     try 
     {    
      File f = new File(DB_PATH); 
      if (!f.exists()) 
      { 
       f.mkdir(); 
      } 

      // Open your local db as the input stream 
      InputStream myInput = context.getAssets().open(dbName); 

      // File for creating the database 
      String outFileName = DB_PATH + copyas; 

      File tmpFile = new File(outFileName); 


      // check if the database already exist 

      if (!tmpFile.exists()){ 
      //Log.d(LOG_TAG, outFileName + "database not available, initialising seed"); 
      OutputStream myOutput = new FileOutputStream(outFileName); 

      // transfer bytes from the input file to the output file 
      byte[] buffer = new byte[1024]; 
      int length; 
      while ((length = myInput.read(buffer)) > 0) 
      { 
       myOutput.write(buffer, 0, length); 
      } 



      // Close the streams 
      myOutput.flush(); 
      myOutput.close(); 
      myInput.close(); 
} 


     } catch (Exception e) 
     { 
      e.printStackTrace(); 
      Log.e(LOG_TAG, e.toString()); 
      return "failure"; 
     } 

     return "SUCCESS"; 

    } 

Umarım bu size yardımcı olacaktır ... Bunu başarmak için herhangi bir sorununuz varsa lütfen bize bildirin.

+0

Kodunuz için teşekkür ederiz ~ Ama kodunuz veritabanına veriyi bir veri kopyalamaktan ziyade veriyi veri/veri klasörüne kopyalamaktan ziyade veriyi veriye kopyalamak gibi görünüyor ~ – LinaInverce

+0

Bu kod normalde Android 6.0+? –

+0

Durumunuzda, @ LinaInverce ---- güncellemedeki eski db verilerini silebilir ve yeni db'yi programatik olarak varlıklardan kopyalayabilirsiniz. – beginner