sql >> データベース >  >> RDS >> SQLite

SQLiteAssetHelperでのRobolectricの使用

    まず、データベースをアセットフォルダーからアプリデータベースフォルダーにコピーします。データベースをコピーするコードは次のとおりです

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

    また、このリンクをチェックしてください..RobolectricでのuTestingSQLiteデータベースに役立つ可能性があります

    次のことを試してください:

    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. PostgreSQLでUnixタイムスタンプを返す

    2. OracleのREPLACE()関数

    3. 非特権匿名アクセスを介したPostgreSQLのユーザーアカウントのセルフプロビジョニング

    4. Heroku Postgres:接続が多すぎます。これらの接続を切断するにはどうすればよいですか?