android - 对字段插槽的错误请求,SQLite - Android

标签 android sqlite

我有一个包含 6 列的表,我试图从其中的 3 列中获取所有行并将其存储在一个数组中以供使用。我的查询如下所示:

public Cursor fetchInfo(long rowId) throws SQLException
    {
        Cursor mCursor = mDb.query(true, DATABASE_TABLE, new String[] {"_id", "xCoord", "yCoord", "color"}, "_id" + "=" + rowId, null, null, null, null, null);

        if(mCursor != null)
        {
            mCursor.moveToFirst();
        }
        return mCursor;
    }

然后我这样调用它:

private void getInfo()
    {
        Cursor mCursor = mDbHelper.fetchInfo(mRowId);
        x = new float[mCursor.getCount()];
        y = new float[mCursor.getCount()];
        color = new int[mCursor.getCount()];

        if(mCursor.moveToFirst())
        {
            for(int i = 0; i < mCursor.getCount(); i++)
            {
                x[i] = mCursor.getFloat(3);
                y[i] = mCursor.getFloat(4); //Line 76, this is where the error is occurs.
                color[i] = mCursor.getInt(5);
            }
        }
        mCursor.close();
    }

但是,当我尝试运行它时,我收到一条错误消息:

12-19 15:40:36.903: E/CursorWindow(276): Bad request for field slot 0,4. numRows = 1, numColumns = 4
12-19 15:40:36.903: D/AndroidRuntime(276): Shutting down VM
12-19 15:40:36.912: W/dalvikvm(276): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
12-19 15:40:36.922: E/AndroidRuntime(276): FATAL EXCEPTION: main
12-19 15:40:36.922: E/AndroidRuntime(276): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.x17.projects.strikezone/com.x17.projects.strikezone.SavedEntries}: java.lang.IllegalStateException: get field slot from row 0 col 4 failed
12-19 15:40:36.922: E/AndroidRuntime(276):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
12-19 15:40:36.922: E/AndroidRuntime(276):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
12-19 15:40:36.922: E/AndroidRuntime(276):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)
12-19 15:40:36.922: E/AndroidRuntime(276):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
12-19 15:40:36.922: E/AndroidRuntime(276):  at android.os.Handler.dispatchMessage(Handler.java:99)
12-19 15:40:36.922: E/AndroidRuntime(276):  at android.os.Looper.loop(Looper.java:123)
12-19 15:40:36.922: E/AndroidRuntime(276):  at android.app.ActivityThread.main(ActivityThread.java:4627)
12-19 15:40:36.922: E/AndroidRuntime(276):  at java.lang.reflect.Method.invokeNative(Native Method)
12-19 15:40:36.922: E/AndroidRuntime(276):  at java.lang.reflect.Method.invoke(Method.java:521)
12-19 15:40:36.922: E/AndroidRuntime(276):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
12-19 15:40:36.922: E/AndroidRuntime(276):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
12-19 15:40:36.922: E/AndroidRuntime(276):  at dalvik.system.NativeStart.main(Native Method)
12-19 15:40:36.922: E/AndroidRuntime(276): Caused by: java.lang.IllegalStateException: get field slot from row 0 col 4 failed
12-19 15:40:36.922: E/AndroidRuntime(276):  at android.database.CursorWindow.getDouble_native(Native Method)
12-19 15:40:36.922: E/AndroidRuntime(276):  at android.database.CursorWindow.getFloat(CursorWindow.java:451)
12-19 15:40:36.922: E/AndroidRuntime(276):  at android.database.AbstractWindowedCursor.getFloat(AbstractWindowedCursor.java:123)
12-19 15:40:36.922: E/AndroidRuntime(276):  at com.x17.projects.strikezone.SavedEntries.getInfo(SavedEntries.java:76)
12-19 15:40:36.922: E/AndroidRuntime(276):  at com.x17.projects.strikezone.SavedEntries.onCreate(SavedEntries.java:46)
12-19 15:40:36.922: E/AndroidRuntime(276):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
12-19 15:40:36.922: E/AndroidRuntime(276):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
12-19 15:40:36.922: E/AndroidRuntime(276):  ... 11 more

我是数据库的新手,所以我不确定如何解决这个问题。我尝试了一些不同的方法来解决这个问题,但没有成功。我在这里做错了什么?我应该采取不同的做法吗?

最佳答案

fetchInfo() 方法中的查询中,您从 DB 表 中获取了 4 列。

如文档所述getFloat(int index)此方法期望作为索引:

index - the zero-based index of the target column.

所以你应该按如下方式使用索引:

0 - 对于 _id

1 - 对于 xCoord

2 - 对于 yCoord

3 - 代表颜色

关于android - 对字段插槽的错误请求,SQLite - Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8567386/

相关文章:

java - 在android中将值插入到sqlite数据库中

java - 如何将 sqlite 值填充到微调器中

Android - 通过 Intent 将 html 文件发送到打印应用程序,不会显示为 html

android - java.lang.IllegalStateException : SimpleTypeImpl should not be created for error type

android - 多于两行时如何纠正 ConstraintLayout TextView 重叠

java - 为什么 SQLite 不能在 Linux 上与 java 集成的 NetBeans IDE 上运行?

Visual Studio 2017 中缺少 SQLite 数据提供程序

c# - C#将列动态添加到数据库中的表

android - 如何实现android zoomview?

Android facebook 登录在 Debug模式下工作,从未发布