SQLite
 sql >> Teknologi Basis Data >  >> RDS >> SQLite

Menggunakan Robolectric dengan SQLiteAssetHelper

Pertama salin database Anda dari folder aset ke folder database aplikasi Anda. Berikut adalah kode yang akan menyalin database

public class DataBaseWrapper extends SQLiteOpenHelper
 {
  private static String TAG = DataBaseWrapper.class.getName();
  private  String DB_PATH; //= "/data/data/com.example.yourproject/databases/";
  private static String DB_NAME = "Database.sqlite";
  private SQLiteDatabase myDataBase = null; 
  private final Context myContext;

  public DataBaseWrapper(Context context) 
  {
     super(context, DB_NAME, null, 1);

      this.myContext = context;
      DB_PATH="/data/data/" + context.getPackageName() + "/" + "databases/";
      Log.v("log_tag", "DBPath: " + DB_PATH);
     //  File f=getDatabasePath(DB_NAME);
  } 

  public void createDataBase() throws IOException{
   boolean dbExist = checkDataBase();
   if(dbExist){
    Log.v("log_tag", "database does exist");
    }else{
     Log.v("log_tag", "database does not exist");
     this.getReadableDatabase();
     try {
      copyDataBase();
        } catch (IOException e) {
      throw new Error("Error copying database");
      }
    }
   }

  private void copyDataBase() throws IOException{
  InputStream myInput = myContext.getAssets().open(DB_NAME);
  String outFileName = DB_PATH + DB_NAME;
  OutputStream myOutput = new FileOutputStream(outFileName);
  byte[] buffer = new byte[1024];
  int length;
   while ((length = myInput.read(buffer))>0){
    myOutput.write(buffer, 0, length);
   }
   myOutput.flush();
   myOutput.close();
   myInput.close();
  }

  private boolean checkDataBase(){

     File dbFile = new File(DB_PATH + DB_NAME); 
     //Log.v("dbFile", dbFile + "   "+ dbFile.exists()); 
     return dbFile.exists(); 

 }

 public boolean openDataBase() throws SQLException
 {
    String mPath = DB_PATH + DB_NAME; 
    //Log.v("mPath", mPath); 
    myDataBase = SQLiteDatabase.openDatabase(mPath, null, SQLiteDatabase.CREATE_IF_NECESSARY); 
    //mDataBase = SQLiteDatabase.openDatabase(mPath, null, SQLiteDatabase.NO_LOCALIZED_COLLATORS); 
    return myDataBase != null; 

 }


  @Override
  public synchronized void close() 
  {
     if(myDataBase != null)
      myDataBase.close();
     super.close();
  }

 @Override
 public void onCreate(SQLiteDatabase db) 
 {


  }

 @Override
 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
 {
    Log.v(TAG, "Upgrading database, this will drop database and recreate.");
  }
  }

Juga chk link ini .. mungkin berguna untuk menguji database SQLite di Robolectric

Cobalah hal-hal ini:

1.Hapus database Anda dari terminal

adb shell
cd /data/data/com.example.apploicationname/databases
rm *

dan instal ulang aplikasi Anda lagi di emulator.

  1. Cobalah untuk meningkatkan RAM emulator.. Kesalahan yang sama terjadi pada saya meskipun semua data saya ada di database tetapi ketika saya meningkatkan RAM emulator dari 1024 menjadi 2000 .. Berhasil.

  2. Salin database Anda dari DDMS ke sistem file sistem Anda dan buka melalui browser sqlite dan periksa apakah Tabel ada atau tidak. Tautan untuk browser sqlitehttp://sourceforge.net/projects/sqlitebrowser/files/sqlitebrowser/




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara memasukkan sejumlah besar data dalam database sqlite di Android

  2. Membaca database dari folder aset

  3. Pastikan Kursor diinisialisasi dengan benar sebelum mengakses data darinya

  4. Inisialisasi SQLite dan database

  5. PENINGKATAN OTOMATIS SQLite