java - 从数据库加载详细信息时出现游标错误

标签 java android sqlite android-studio android-sqlite

我目前正在完成一个学校项目,试图创建一个 Scout Group 经理。这是我第一次使用 Java、XML 或 Android Studio,所以进展有点慢,但我正在努力。我目前遇到的问题是从数据库中提取 Scout 详细信息,以便将它们放置在微调器中。然后,领导者将从微调器中按名称选择他们想要邀请的童子军。显然导致错误的代码(在数据库处理程序类中)如下:

public Cursor GetAllScouts()
{
    String whereClause = COLUMN_SECTION + "=?";
    String[] whereArgs = new String[]{"Beavers","Cubs","Scouts","Explorers","Network","Leaders"};
    String[] columns = new String[]{COLUMN_SCID + " AS " + BaseColumns._ID, COLUMN_FNAME, COLUMN_LNAME, COLUMN_SECTION};
    return db.query(TABLE_SCOUTS,columns,whereClause,whereArgs,null,null,null);//Error is being thrown up here
}

并且来自 logcat 的信息再次如下:

01-24 18:39:38.228 18179-18179/com.example.atomi.scoutmanagerprototype E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.atomi.scoutmanagerprototype, PID: 18179
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.atomi.scoutmanagerprototype/com.example.atomi.scoutmanagerprototype.frmCreateEvent2}: java.lang.IllegalArgumentException: Cannot bind argument at index 6 because the index is out of range.  The statement has 1 parameters.
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2314)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2386)
    at android.app.ActivityThread.access$800(ActivityThread.java:148)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1292)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:135)
    at android.app.ActivityThread.main(ActivityThread.java:5310)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696)
 Caused by: java.lang.IllegalArgumentException: Cannot bind argument at index 6 because the index is out of range.  The statement has 1 parameters.
    at android.database.sqlite.SQLiteProgram.bind(SQLiteProgram.java:212)
    at android.database.sqlite.SQLiteProgram.bindString(SQLiteProgram.java:166)
    at android.database.sqlite.SQLiteProgram.bindAllArgsAsStrings(SQLiteProgram.java:200)
    at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:47)
    at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1316)
    at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1163)
    at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1034)
    at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1202)
    at com.example.atomi.scoutmanagerprototype.databaseHandler.GetAllScouts(databaseHandler.java:395)
    at com.example.atomi.scoutmanagerprototype.frmCreateEvent2.loadSpinnerData(frmCreateEvent2.java:87)
    at com.example.atomi.scoutmanagerprototype.frmCreateEvent2.onCreate(frmCreateEvent2.java:82)
    at android.app.Activity.performCreate(Activity.java:5953)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1128)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2267)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2386) 
    at android.app.ActivityThread.access$800(ActivityThread.java:148) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1292) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:135) 
    at android.app.ActivityThread.main(ActivityThread.java:5310) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:372) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696) 

如有任何帮助,我们将不胜感激。提前致谢。

最佳答案

你应该看看 this answer .您的选择(where 子句)必须包含与您的选择参数中给出的参数一样多的 ?。在这种情况下,您的选择仅包含一个 ? 但您提供了 6 个选择参数。

您可能想要的选择是:

COLUMN_SECTION + "IN (?, ?, ?, ?, ?, ?)"

然后将您的部分列表作为 selectionArgs 应该起作用。

考虑查看 this tutorial了解有关使用 SQLite 保存数据的更多信息。

关于java - 从数据库加载详细信息时出现游标错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54354249/

相关文章:

android - 创建具有特定滚动动画效果的自定义圆形进度条

android - 如何知道maven android项目中任何外部jar的groupid和artifactid

java - 如何创建水平白色分隔线以使用 java 添加到我的布局?

c# - 在 C# 中从 SQL 读取 BLOB 后转换为字节数组

java - spring ldap配置属性要求

java - 无法为 IE11 自动拖放 : Selenium WebDriver

java - C++ 到 Java - OpenCV

java - 从 HTML 中获取数据并将其转换为 JSON

iphone - 尝试使用 SQLite 包装器 FMDatabase 时出错

ruby-on-rails-3 - 更改表的列名后,所有单元和功能测试均出错