SQLiteException для основных функций getCount () и rawQuery () - PullRequest
0 голосов
/ 26 сентября 2018

У меня ОЧЕНЬ базовая универсальная функция, которая получает для меня количество таблиц.Прежде чем кто-либо скажет что-нибудь о безопасности и оптимизации, это для небольшого приложения Android с локальной базой данных для устройства, и любая таблица будет иметь 1-100 строк.

public int getCount() {

    if (!database.isOpen()) {
        open();
    }

    String sql = "SELECT *  FROM debt";
    Cursor c = database.rawQuery(sql, null);

    int count = c.getCount(); // the line in question
    c.close();

    return count;
}

Я получаю следующее исключениена устройстве Android 8.0:

Caused by: android.database.sqlite.SQLiteException: 
  at android.database.sqlite.SQLiteConnection.nativeExecuteForCursorWindow (Native Method)
  at android.database.sqlite.SQLiteConnection.executeForCursorWindow (SQLiteConnection.java:851)
  at android.database.sqlite.SQLiteSession.executeForCursorWindow (SQLiteSession.java:974)
  at android.database.sqlite.SQLiteQuery.fillWindow (SQLiteQuery.java:62)
  at android.database.sqlite.SQLiteCursor.fillWindow (SQLiteCursor.java:143)
  at android.database.sqlite.SQLiteCursor.getCount (SQLiteCursor.java:132)
  at android.database.AbstractCursor.moveToPosition (AbstractCursor.java:219)
  at android.database.AbstractCursor.moveToNext (AbstractCursor.java:268)
  at com.---.---.database.GasDataSource.getAllGasSpent (GasDataSource.java:171)
  at com.---.---.GasUtil.getUsedLastMonth (GasUtil.java:94)
  at com.---.---.DashboardFragment.onActivityCreated (DashboardFragment.java:88)
  at android.support.v4.app.Fragment.performActivityCreated (Fragment.java:2355)
  at android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1451)
  at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState (FragmentManager.java:1759)
  at android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1827)
  at android.support.v4.app.BackStackRecord.executeOps (BackStackRecord.java:797)
  at android.support.v4.app.FragmentManagerImpl.executeOps (FragmentManager.java:2596)
  at android.support.v4.app.FragmentManagerImpl.executeOpsTogether (FragmentManager.java:2383)
  at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute (FragmentManager.java:2338)
  at android.support.v4.app.FragmentManagerImpl.execPendingActions (FragmentManager.java:2245)
  at android.support.v4.app.FragmentManagerImpl.dispatchStateChange (FragmentManager.java:3248)
  at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated (FragmentManager.java:3200)
  at android.support.v4.app.FragmentController.dispatchActivityCreated (FragmentController.java:195)
  at android.support.v4.app.FragmentActivity.onStart (FragmentActivity.java:597)
  at android.support.v7.app.AppCompatActivity.onStart (AppCompatActivity.java:177)
  at android.app.Instrumentation.callActivityOnStart (Instrumentation.java:1334)
  at android.app.Activity.performStart (Activity.java:6997)
  at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2838)

По какой-либо причине в эти дни по какой-то причине в стеках Play Console нет особых сообщений об исключениях.Просто универсальное исключение SQLiteException.

Когда этот код вызывается, я на 99% уверен, что таблица всегда будет существовать (в моем опыте никогда не скажешь 100%).Я не знаю, что еще может пойти не так здесь.Это, конечно, не будет делать это, если таблица пуста.Я хотел бы знать, что еще может пойти не так, что может вызвать исключение?

(Если кто-то не может помочь себе и может просто придумать лучший способ написать это, чтобы избежать исключения, я тоже весь в ушах; я думаю, что попытка / отловить - самый последний вариант здесь)

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