首页 > 解决方案 > 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)
 

标签: databasefunctionsqlitekotlindatabase-design

解决方案


您的异常告诉您问题:no such table: drugs

虽然您有一个名为 的数据库drugs,但从您的代码看来,其中似乎没有一个具有该名称的表。


推荐阅读