【问题标题】:Get all rows SQLite Android Studio [duplicate]获取所有行 SQLite Android Studio [重复]
【发布时间】:2017-07-12 01:20:56
【问题描述】:

我在尝试从 SQLite 读取数据时遇到问题,我想将所有信息存储到我已经定义的对象(节点)数组中。

该对象的构造函数和结构是:

public node(int id, String name, String address, double x, double y, String type, String date){
    //Initialization
    //....  
}

注意:这个对象的类显然已经定义了属性,setter 和 getter。并且数据库具有与该对象相同的结构(Int、String、String、Double、Double、String、String)。

所以,我获取所有行并将它们存储到我的数组中的方法:

  public nodo[] getNodes() {
    String selectQuery = "SELECT  * FROM " + NAME_NODES;

    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);
    node[] nodes = new node[cursor.getCount()];
    int con = 0;

    if (cursor.moveToFirst()) {
        while (cursor.moveToNext()) {
            node temp = new node(
                    cursor.getInt(1),
                    cursor.getString(2),
                    cursor.getString(3),
                    cursor.getDouble(4),
                    cursor.getDouble(5),
                    cursor.getString(6),
                    cursor.getString(7));
            nodes[con++] = temp;
        }
    }
    cursor.close();
    db.close();
    Log.d(TAG, "SQLite data: " + nodes.toString());

    return nodes;
}

然后在其他类中我调用这个之前的方法,类似于:

node[] nodes = db.getNodes();
String temp = node[0].getName();

但在那之后我得到一个错误:

<code>E/CursorWindow: Failed to read row 1, column 7 from a CursorWindow which has 2 rows, 7 columns.
E/AndroidRuntime: FATAL EXCEPTION: main
     Process: com.motusk.AppMonitoreo, PID: 4410
     java.lang.IllegalStateException: Couldn't read row 1, col 7 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.
     at android.database.CursorWindow.nativeGetString(Native Method)
     at android.database.CursorWindow.getString(CursorWindow.java:438)
     at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51)
     at com.motus.AppMonitoreo.Controladores.SQLiteHandler.getNodes(SQLiteHandler.java:186)</code>

我认为主要问题在于光标的使用

【问题讨论】:

  • 请检查您在 Cursor 中得到的内容 cursor = db.rawQuery(selectQuery, null);光标?和光标索引从 0 开始,你从 1 开始。请检查
  • [点击这里。我希望这会对你有所帮助](stackoverflow.com/a/41615670/7399521)
  • 是的,游标索引是从 0 开始的,但是现在我只得到 1 行

标签: java android arrays sqlite object


【解决方案1】:

索引应该从位置 0 开始。

                cursor.getInt(0),
                cursor.getString(1),
                cursor.getString(2),
                cursor.getDouble(3),
                cursor.getDouble(4),
                cursor.getString(5),
                cursor.getString(6));

卸载旧应用并再次运行。

仅供参考

if (cursor.moveToFirst()) {
            do {

                node temp = new node
                cursor.getInt(0),
                .........
                ADD_ARRAY_LIST.add(temp);

            } while (cursor.moveToNext());
        }

【讨论】:

  • 这解决了它无法读取第 1 行到第 7 列的问题,但是我在该数据库中有 2 行,我只得到了 1 行。可能是在while之前和if之后,我需要创建数组的第一个元素和while中的下一个元素?
  • 你可以这样做
  • @EdgarPisxid 继续前进。快乐的编码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-17
  • 2021-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多