SQLite
 sql >> база данни >  >> RDS >> SQLite

Използване на Robolectric с SQLiteAssetHelper

Първо копирайте вашата база данни от папката с активи в папката на базата данни на приложението. Ето кода, който ще копира базата данни

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.");
  }
  }

Също така проверете тази връзка .. може да е полезно за uTesting SQLite база данни в Robolectric

Опитайте тези неща:

1. Изтрийте вашата база данни от терминал

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

и инсталирайте отново приложението си на емулатора.

  1. Опитайте се да увеличите RAM паметта на емулатора. Същата грешка идваше при мен въпреки всичките ми данни в базата данни, но когато увеличих RAM на емулатора от 1024 на 2000 .. Сработи.

  2. Копирайте вашата база данни от DDMS във вашата системна файлова система и я отворете през sqlite браузър и проверете дали таблицата съществува или не. Връзка за sqlite браузър http://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. Android SQLite MultiTable Разработка на база данни

  2. Как да получите достъп и да актуализирате Sqlite db файл, съхранен локално [папка с активи] във файл на проекта, използвайки cordova

  3. Върнете началото на месеца в SQLite

  4. Индекс, базиран на SQLite Expression

  5. SQLite JSON_SET()