Android Sqlite 数据库在同一函数中获取和更新值时崩溃

Android Sqlite database crash while fetching and updating the value in the same function

提问人:Vikram Sawant 提问时间:10/25/2023 最后编辑:marc_sVikram Sawant 更新时间:10/27/2023 访问量:36

问:

这是使用sqlite数据库的android(Kotlin)应用程序的功能。我的表名是,列名是,我面临如下所示的错误:allcategoriesclickcount

 fun updateCountById(id: String?) {
        val mDataBase = this.writableDatabase
        val incrementQuery =
            "UPDATE allcategories SET clickcount = clickcount + 1 WHERE category = ?"
        val selectionArgs = arrayOf(id)
        Log.d("SQL Query", "Query: $incrementQuery, Args: ${selectionArgs.joinToString(", ")}")

        try {
            mDataBase.execSQL(incrementQuery, selectionArgs)
        } catch (e: SQLiteException) {
            e.printStackTrace()
        }

        val query = "SELECT clickcount FROM allcategories WHERE category = ?"
        val cursor = mDataBase.rawQuery(query, selectionArgs)
        var updatedCount = 0

        if (cursor.moveToFirst()) {
            val columnIndex = cursor.getColumnIndex("clickcount")

            if (columnIndex != -1) {
                updatedCount = cursor.getInt(columnIndex)
            }
        }
        cursor.close()
        mDataBase.close()

        Log.e("Updated Count", "Updated the count for category $id to $updatedCount")
    }

以上是点击按钮时调用的函数,该函数从 db 中获取计数的当前值并将其递增 1,然后再次将递增的值更新为 db

我收到以下错误:

android.database.sqlite.SQLiteException 异常 android.database.sqlite.SQLiteException

在 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) 在 com.internetdesignzone.quotes.DatabaseHelper.getQuoteOfTheDay (DatabaseHelper.kt:214) 在 com.internetdesignzone.quotes.fragments.HomeFragment.onCreateView (HomeFragment.kt:349) 在 androidx.fragment.app.Fragment.performCreateView (Fragment.java:2995) 在 androidx.fragment.app.FragmentStateManager.createView (FragmentStateManager.java:523) 在 androidx.fragment.app.FragmentStateManager.moveToExpectedState (FragmentStateManager.java:261) 在 androidx.fragment.app.FragmentManager.executeOpsTogether (FragmentManager.java:1840) 在 androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute (FragmentManager.java:1764) 在 androidx.fragment.app.FragmentManager.execPendingActions (FragmentManager.java:1701) 在 androidx.fragment.app.FragmentManager.dispatchStateChange (FragmentManager.java:2849) 在 androidx.fragment.app.FragmentManager.dispatchViewCreated (FragmentManager.java:2777) 在 androidx.fragment.app.Fragment.performViewCreated (Fragment.java:3020) 在 androidx.fragment.app.FragmentStateManager.createView (FragmentStateManager.java:551) 在 androidx.fragment.app.FragmentStateManager.moveToExpectedState (FragmentStateManager.java:261) 在 androidx.fragment.app.FragmentStore.moveToExpectedState (FragmentStore.java:113) 在 androidx.fragment.app.FragmentManager.moveToState (FragmentManager.java:1374) 在 androidx.fragment.app.FragmentManager.dispatchStateChange (FragmentManager.java:2841) 在 androidx.fragment.app.FragmentManager.dispatchActivityCreated (FragmentManager.java:2784) 在 androidx.fragment.app.FragmentController.dispatchActivityCreated (FragmentController.java:262) 在 androidx.fragment.app.FragmentActivity.onStart (FragmentActivity.java:478) 在 androidx.appcompat.app.AppCompatActivity.onStart (AppCompatActivity.java:210) 在 com.internetdesignzone.quotes.MainActivity.onStart (MainActivity.kt:235) 在 android.app.Instrumentation.callActivityOnStart (Instrumentation.java:1405) 在 android.app.Activity.performStart (Activity.java:8627) 在 android.app.ActivityThread.handleStartActivity (ActivityThread.java:2991) 在 android.app.servertransaction.TransactionExecutor.performLifecycleSequence (TransactionExecutor.java:180) 在 android.app.servertransaction.TransactionExecutor.cycleToPath (TransactionExecutor.java:165) 在 android.app.servertransaction.TransactionExecutor.executeLifecycleState (TransactionExecutor.java:142) 在 android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:70) 在 android.app.ActivityThread$H.handleMessage (ActivityThread.java:1830) 在 android.os.Handler.dispatchMessage (Handler.java:106) 在 android.os.Looper.loop (Looper.java:193) 在 android.app.ActivityThread.main (ActivityThread.java:6914) 在 java.lang.reflect.Method.invoke 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:592) 在 com.android.internal.os.ZygoteInit.main (ZygoteInit.java:858)

java android kotlin 异常 android-sqlite

评论

0赞 MikeT 10/26/2023
我相信您需要专注于,即异常似乎是在调用函数时。at com.internetdesignzone.quotes.DatabaseHelper.getQuoteOfTheDay (DatabaseHelper.kt:214)HomeFragmentgetQuoteOfTheDay

答: 暂无答案