Room и SQLiteDatabaseCorruptException - PullRequest
       8

Room и SQLiteDatabaseCorruptException

0 голосов
/ 17 декабря 2018

Только что увидел один отчет в моей игровой консоли:

android.database.sqlite.SQLiteDatabaseCorruptException: 
  at android.database.sqlite.SQLiteConnection.nativePrepareStatement (Native Method)
  at android.database.sqlite.SQLiteConnection.acquirePreparedStatement (SQLiteConnection.java:903)
  at android.database.sqlite.SQLiteConnection.executeForString (SQLiteConnection.java:648)
  at android.database.sqlite.SQLiteConnection.setJournalMode (SQLiteConnection.java:333)
  at android.database.sqlite.SQLiteConnection.setWalModeFromConfiguration (SQLiteConnection.java:298)
  at android.database.sqlite.SQLiteConnection.open (SQLiteConnection.java:217)
  at android.database.sqlite.SQLiteConnection.open (SQLiteConnection.java:195)
  at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked (SQLiteConnectionPool.java:503)
  at android.database.sqlite.SQLiteConnectionPool.open (SQLiteConnectionPool.java:204)
  at android.database.sqlite.SQLiteConnectionPool.open (SQLiteConnectionPool.java:196)
  at android.database.sqlite.SQLiteDatabase.openInner (SQLiteDatabase.java:920)
  at android.database.sqlite.SQLiteDatabase.open (SQLiteDatabase.java:908)
  at android.database.sqlite.SQLiteDatabase.openDatabase (SQLiteDatabase.java:767)
  at android.database.sqlite.SQLiteDatabase.openDatabase (SQLiteDatabase.java:757)
  at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked (SQLiteOpenHelper.java:355)
  at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase (SQLiteOpenHelper.java:298)
  at android.arch.persistence.db.framework.FrameworkSQLiteOpenHelper$OpenHelper.getWritableSupportDatabase (FrameworkSQLiteOpenHelper.java:96)
  at android.arch.persistence.db.framework.FrameworkSQLiteOpenHelper.getWritableDatabase (FrameworkSQLiteOpenHelper.java:54)
  at android.arch.persistence.room.RoomDatabase.query (RoomDatabase.java:233)
  at org.walleth.data.transactions.TransactionDAO_Impl$8.compute (TransactionDAO_Impl.java:1228)
  at org.walleth.data.transactions.TransactionDAO_Impl$8.compute (TransactionDAO_Impl.java:1214)
  at android.arch.lifecycle.ComputableLiveData$2.run (ComputableLiveData.java:100)
  at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1167)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:641)
  at java.lang.Thread.run (Thread.java:764)

Кто-нибудь знает хороший способ справиться с этим?Особенно при использовании LiveData я пока не вижу хорошего способа справиться с этой проблемой.Кроме того, что было бы хорошим способом воспроизвести это - так как я могу элегантно испортить базу данных?

1 Ответ

0 голосов
/ 06 января 2019

Кто-нибудь знает хороший способ справиться с этим?

Ну, если ваша база данных повреждена, она повреждена.Вы, вероятно, не сможете это исправить, если не создадите заново с нуля.Но если вы хотите проверить, является ли он действительным, прежде чем что-то делать с ним, просто обратитесь к этому сообщению: Android: Проверьте, является ли файл действительной базой данных SQLite

РЕДАКТИРОВАТЬ: Хорошо, кажется, что можно исправить базу данных SQLite , но это действительно зависит от того, насколько она повреждена, поэтому есть вероятность, что вы не будете писать общий код для их исправления.

Кроме того, что было бы хорошим способом воспроизвести это - так как я могу элегантно испортить базу данных?

Вам придется воспроизводить ее на рутованном телефоне, потому чтовы не сможете повредить базу данных с помощью стандартных операторов SQLite (они специально созданы для предотвращения этого).

Возьмите фиктивный телефон (или эмулятор), затем root и получите доступ к этому файлу:

//data/data/<Your-Application-Package-Name>/databases/<your-database-name>

Вы можете открыть его в любом редакторе и связываться с ним (удалить связку)из линий затем сохраните его).Скорее всего, это повредит файл, и вы получите SQLiteDatabaseCorruptException

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