database - SQLITE 空控 KOTLIN
问题描述
您好,我正在尝试从数据库中获取数据,但是每当我尝试此操作时都没有尝试捕获应用程序崩溃。我尝试了 if(cursor.moveToFirst()) 结构,但没有奏效。
如果我使用 cursor.moveToFirst() 它有点工作,但这次数据库无法保存对象。
这是我的getdata函数
fun getdata() {
val db = context?.openOrCreateDatabase("DRUGS", Context.MODE_PRIVATE, null)
val cursor = db?.rawQuery("SELECT * FROM drugs", null)
if (cursor != null) {
val drugnameIx = cursor.getColumnIndex("drugname")
val drugtimeIx = cursor.getColumnIndex("drugtime")
val drugpieceIx = cursor.getColumnIndex("drugpiece")
val drugidIx = cursor.getColumnIndex("id")
val maindrugpieceIx = cursor.getColumnIndex("maindrugpiece")
while (cursor.moveToNext()) {
ModelList.add(
DrugModel(
cursor.getInt(drugidIx),
cursor.getString(drugnameIx),
cursor.getString(drugtimeIx),
cursor.getIntOrNull(drugpieceIx)!!,
cursor.getIntOrNull(maindrugpieceIx)!!
)
)
}
cursor?.close()
}
}
这是我的错误
2021-04-07 04:21:52.017 16650-16650/com.tunahan.maindrugreminder E/SQLiteLog: (1) no such table:
drugs
2021-04-07 04:21:52.021 16650-16650/com.tunahan.maindrugreminder E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.tunahan.maindrugreminder, PID: 16650
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tunahan.maindrugreminder/com.tunahan.maindrugreminder.MainActivity}: android.database.sqlite.SQLiteException: no such table: drugs (code 1): , while compiling: SELECT * FROM drugs
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
Caused by: android.database.sqlite.SQLiteException: no such table: drugs (code 1): , while compiling: SELECT * FROM drugs
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:890)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:501)
at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:46)
at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1392)
at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1331)
at com.tunahan.maindrugreminder.MainFragment.getdata(MainFragment.kt:78)
at com.tunahan.maindrugreminder.MainFragment.onViewCreated(MainFragment.kt:59)
at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:332)
解决方案
您的异常告诉您问题:no such table: drugs
虽然您有一个名为 的数据库drugs
,但从您的代码看来,其中似乎没有一个具有该名称的表。
推荐阅读
- sonarqube - SonarQube 限制执行的堆大小
- javascript - 如何仅调用最近命中的 api 并在 react-native 中中止先前调用的 api 的会话?
- reactjs - react context vs redux vs hooks,应该考虑哪一个以及每个的不同之处
- laravel - 数据库播种这就是我们使用的原因
- docker - 使用 docker 文件在 Container 中挂载当前目录
- json - 获取在 EXEC() 中执行的动态 PIVOT 结果到 varchar 变量
- android - 当滚动达到高度的 20% 时折叠应用栏布局。我也想 snap 工作
- assembly - bootsect.s:我们如何在将代码本身移开后访问下一行?
- spring-boot - Spring boot 2.1.5、WebFlux、Reactor:如何正确处理MDC
- javascript - “payment_method_nonce”在 PHP 中返回一个空字符串