Сбой чтения БД sqlite для планшетов - PullRequest
0 голосов
/ 28 марта 2019

Мое приложение использует sqlite db, и следующий код прекрасно работает для телефонов. Но когда я запускаю его на любом планшете, происходит сбой, при чтении из таблицы возникает следующая ошибка.

public class DatabaseHelper extends SQLiteOpenHelper {
private static String DB_PATH = "C:/temp/";

private static String DB_NAME = "sample.db";
private SQLiteDatabase myDataBase;
private final Context myContext;
public DatabaseHelper(Context context) {
    super(context, DB_NAME, null, 1);
    this.myContext = context;
    if(android.os.Build.VERSION.SDK_INT >= 4.2){
        DB_PATH = context.getApplicationInfo().dataDir + "/databases/";
         }
    else
    {
        DB_PATH = "/data/data/" + context.getPackageName() + "/databases/";
    }
}
public void createDataBase() throws IOException {

    boolean dbExist = checkDataBase();
         if(dbExist){          
    }else{
        this.getReadableDatabase();
                  try {
            copyDataBase();

        } catch (IOException e) {               
            throw new RuntimeException(e);
        }
    }
}
private boolean checkDataBase(){
    SQLiteDatabase checkDB = null;
    try{
        String myPath = DB_PATH+DB_NAME;
        checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
    }catch(SQLiteException e){
          }
    if(checkDB != null){
        checkDB.close();
    }
    return checkDB != null ? true : false;
}

/**
 * Copies your database from your local assets-folder to the just created empty database in the
 * system folder, from where it can be accessed and handled.
 * This is done by transfering bytestream.
 * */
private void copyDataBase() throws IOException{

    //Open your local db as the input stream
    InputStream myInput = myContext.getAssets().open(DB_NAME);
    //System.exit(0);

    // Path to the just created empty db
    String outFileName =  DB_PATH+DB_NAME;

    //Open the empty db as the output stream
    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();
}
public void openDataBase() throws SQLException {
    String myPath =  DB_PATH+DB_NAME;
    myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);      
}

Сообщение об ошибке: 2019-03-28 08: 24: 17.373 5791-5791 / E / SQLiteLog: (1) такой таблицы нет: setting_storage 2019-03-28 08: 25: 41.901 5791-5791 / E / SQLiteLog: (1) такой таблицы нет: flashcard_sets 2019-03-28 08: 25: 41,909 5791-5791 / E / AndroidRuntime: ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: основное Процесс:, PID: 5791 java.lang.RuntimeException: Невозможно запустить действие ComponentInfo {Main2Activity}: android.database.sqlite.SQLiteException: нет такой таблицы: flashcard_sets (код 1 SQLITE_ERROR):, при компиляции: выбрать количество () из flashcard_sets на android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2913) на android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3048) на android.app.servertransaction.LaunchActivityItem.execute (LaunchActivityItem.java:78) на android.app.servertransaction.TransactionExecutor.executeCallbacks (TransactionExecutor.java:108) на android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:68) на android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1808) на android.os.Handler.dispatchMessage (Handler.java:106) на android.os.Looper.loop (Looper.java:193) на android.app.ActivityThread.main (ActivityThread.java:6669) в java.lang.reflect.Method.invoke (родной метод) в com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit.java:493) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:858) Вызывается: android.database.sqlite.SQLiteException: нет такой таблицы: flashcard_sets (код 1 SQLITE_ERROR): при компиляции: выберите количество () из flashcard_sets на android.database.sqlite.SQLiteConnection.nativePrepareStatement (собственный метод) на android.database.sqlite.SQLiteConnection.acquirePreparedStatement (SQLiteConnection.java:903) на android.database.sqlite.SQLiteConnection.prepare (SQLiteConnection.java:514) на android.database.sqlite.SQLiteSession.prepare (SQLiteSession.java:588) на android.database.sqlite.SQLiteProgram. (SQLiteProgram.java:58) на android.database.sqlite.SQLiteQuery. (SQLiteQuery.java:37) на android.database.sqlite.SQLiteDirectCursorDriver.query (SQLiteDirectCursorDriver.java:46) в android.database.sqlite.SQLiteDatabase.rawQueryWithFactory (SQLiteDatabase.java:1408) на android.database.sqlite.SQLiteDatabase.rawQuery (SQLiteDatabase.java:1347) at model.DatabaseHelper.getNumberofRowsFlashcard_sets (DatabaseHelper.java:305) в gana.nyamas.od00259.vocbuilder.Main2Activity.addItems (Main2Activity.java:158) в gana.nyamas.od00259.vocbuilder.Main2Activity.onCreate (Main2Activity.java:107) на android.app.Activity.performCreate (Activity.java:7136) на android.app.Activity.performCreate (Activity.java:7127) на android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1271) на android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2893) на android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3048) на android.app.servertransaction.LaunchActivityItem.execute (LaunchActivityItem.java:78) на android.app.servertransaction.TransactionExecutor.executeCallbacks (TransactionExecutor.java:108) на android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:68) на android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1808) на android.os.Handler.dispatchMessage (Handler.java:106) на android.os.Looper.loop (Looper.java:193) на android.app.ActivityThread.main (ActivityThread.java:6669) в java.lang.reflect.Method.invoke (родной метод) t com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit.java:493) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:858)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...