SQLITE 空控件 KOTLIN
SQLITE EMPTY CONTROL 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
的数据库,但从您的代码看来,其中似乎没有包含该名称的 table。
你好,我正在尝试从数据库中获取数据,但每当我尝试此操作而不尝试时,应用程序就会崩溃。 我尝试了 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
的数据库,但从您的代码看来,其中似乎没有包含该名称的 table。