SQLite
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> SQLite

Sử dụng Robolectric với SQLiteAssetHelper

Trước tiên, hãy sao chép cơ sở dữ liệu của bạn từ thư mục nội dung vào thư mục cơ sở dữ liệu ứng dụng của bạn. Đây là mã sẽ sao chép cơ sở dữ liệu

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

Cũng chk liên kết này .. nó có thể hữu ích cho uT Testing cơ sở dữ liệu SQLite trong Robolectric

Hãy thử những điều sau:

1.Xóa cơ sở dữ liệu của bạn khỏi thiết bị đầu cuối

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

và cài đặt lại ứng dụng của bạn một lần nữa trên trình giả lập.

  1. Cố gắng tăng RAM của trình giả lập .. Tôi cũng gặp lỗi tương tự mặc dù tôi có tất cả dữ liệu trong cơ sở dữ liệu nhưng khi tôi tăng RAM của trình giả lập từ 1024 lên 2000 .. Nó đã hoạt động.

  2. Sao chép cơ sở dữ liệu của bạn từ DDMS vào hệ thống tệp hệ thống của bạn và mở nó thông qua trình duyệt sqlite và kiểm tra xem Bảng có tồn tại hay không.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Giới thiệu về SQLite

  2. Sử dụng Quy trình lưu trữ Sqlite trong Android

  3. Kiểm tra phiên bản SQLite của bạn

  4. Tích hợp SQLCipher với greenDAO

  5. nullvalue:Hiển thị giá trị NULL trong SQLite