【问题标题】:Getting data from sqlite database从 sqlite 数据库中获取数据
【发布时间】:2014-04-29 15:06:07
【问题描述】:

我正在使用android和sqlite数据库,我想从colum nomMission获取数据 这是我所做的,但它不起作用

 public List<Missions> getMissions() {
    List<Missions> mission = new ArrayList<Missions>();

    Cursor cursor = mDb.rawQuery("select nomMission from Missions", null);

    cursor.moveToFirst();
    while (!cursor.isAfterLast()) {
        Missions missionss = cursorToMission(cursor);
        mission.add(missionss);
        cursor.moveToNext();
    }
    // make sure to close the cursor
    cursor.close();
    return mission;
}

private Missions cursorToMission(Cursor cursor) {
    Missions missions = new Missions(null, null);
    missions.setNomMission(cursor.getString(1));
    missions.setDateMission(cursor.getString(2));
    return missions;
}

错误日志:

04-29 16:04:52.347: E/AndroidRuntime(4864): FATAL EXCEPTION: main
04-29 16:04:52.347: E/AndroidRuntime(4864): java.lang.RuntimeException: Unable to start activity ComponentInfo{tn.pfe.ybn.sigl/tn.pfe.ybn.sigl.DataManip.MissionAct}: java.lang.IllegalStateException: Couldn't read row 0, col 1 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.
04-29 16:04:52.347: E/AndroidRuntime(4864):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2077)
04-29 16:04:52.347: E/AndroidRuntime(4864):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2104)
04-29 16:04:52.347: E/AndroidRuntime(4864):     at android.app.ActivityThread.access$600(ActivityThread.java:134)
04-29 16:04:52.347: E/AndroidRuntime(4864):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1247)
04-29 16:04:52.347: E/AndroidRuntime(4864):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-29 16:04:52.347: E/AndroidRuntime(4864):     at android.os.Looper.loop(Looper.java:154)
04-29 16:04:52.347: E/AndroidRuntime(4864):     at android.app.ActivityThread.main(ActivityThread.java:4624)
04-29 16:04:52.347: E/AndroidRuntime(4864):     at java.lang.reflect.Method.invokeNative(Native Method)
04-29 16:04:52.347: E/AndroidRuntime(4864):     at java.lang.reflect.Method.invoke(Method.java:511)
04-29 16:04:52.347: E/AndroidRuntime(4864):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809)
04-29 16:04:52.347: E/AndroidRuntime(4864):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576)
04-29 16:04:52.347: E/AndroidRuntime(4864):     at dalvik.system.NativeStart.main(Native Method)
04-29 16:04:52.347: E/AndroidRuntime(4864): Caused by: java.lang.IllegalStateException: Couldn't read row 0, col 1 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.

【问题讨论】:

    标签: android database sqlite


    【解决方案1】:

    因为您的光标实际上只包含一列。
    哪个索引是 0(表格列从 0 开始)。

    您指定:

    Cursor cursor = mDb.rawQuery("select nomMission from Missions", null);
    

    (一栏)

    然后你尝试访问

    missions.setNomMission(cursor.getString(1));
    missions.setDateMission(cursor.getString(2));
    

    在您的情况下,您只能访问:

    missions.setNomMission(cursor.getString(0));
    

    或者,更好,

    missions.setNomMission(cursor.getString(cursor.getColumnIndex("nomMission")));
    

    您在此处按 name 引用列,而不是按 index

    【讨论】:

    • 我改了,但我总是遇到同样的问题
    【解决方案2】:

    如果您的查询只选择一列,它将只返回索引为 0 的一列。现在,您可以调用cursor.getString(0),就是这样。如果你想获得 NomMission 和 DateMission,你应该调用

    `Cu​​rsor cursor = mDB.rawQuery("SELECT nomMission AND dateMission FROM Missions",null);

    就个人而言,我更喜欢使用 SQLiteDatabase 的query method here

    对你来说,这看起来像

    Cursor cursor = mDb.query("Missions, new String[]{"nomMission", "dateMission"},null, null, null, null, null, null);

    我也是一个菜鸟,所以任何人都可以随时纠正任何事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-28
      • 2012-01-06
      • 2012-06-06
      • 2018-01-30
      • 1970-01-01
      • 1970-01-01
      • 2013-07-28
      • 2015-08-28
      相关资源
      最近更新 更多