【问题标题】:Is there a way I can select * from a table with unkown number of columns using an android-sqlite cursor有没有一种方法可以使用 android-sqlite 游标从列数未知的表中选择 *
【发布时间】:2021-07-10 08:09:50
【问题描述】:

我正在尝试从表中选择所有列并将所有行返回到游标中,然后遍历游标以获取列并使用列名从每列中获取值。然后将列名及其值放入 JSONObject。但我不断收到 CursorIndexOutOfBoundException。有没有办法我可以选择未知数量的列和行并将每个映射到一个键值对。 下面是我的代码

public JSONObject getAllCompanies() {
    JSONObject response = new JSONObject();
    try {
        SQLiteDatabase sqLiteDatabase = dbHelper.getWritableDatabase();


        JSONArray dataArray = new JSONArray();
        JSONObject dataObject = new JSONObject();
        Cursor companyCursor = sqLiteDatabase.rawQuery("SELECT * FROM COMPANY", null);
        if (companyCursor.moveToFirst()) {
            do {
                String column = "";
                String value = "";
                for (int m = 0; m < companyCursor.getColumnCount(); m++) {

                    column = companyCursor.getColumnName(m);
                    value = companyCursor.getString(companyCursor.getColumnIndex(value));

                    Log.i("COLUMN", column + " COLUMN VALUE: " + value);
                    dataArray.put(new JSONObject()
                            .put(column, value));
                }

            }
            while (companyCursor.moveToNext());


            // dataArray.put(dataObject);
            response.put("success", true);
            response.put("statuscode", 200);
            response.put("payload", dataArray);
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }
    dbHelper.close();
    return response;
}

【问题讨论】:

    标签: java android json sqlite android-cursor


    【解决方案1】:
    value = companyCursor.getString(companyCursor.getColumnIndex(value));
    

    这里getColumnIndex(value)value = "" 返回-1,这不是一个有效的索引。由于您已经在m 中有索引,您可以使用

    value = companyCursor.getString(m);
    

    【讨论】:

    • 谢谢,我已经解决了
    【解决方案2】:

    方法getColumnIndex() 需要列名作为参数。
    列名存储在变量column 中,而不是value
    改为:

    value = companyCursor.getString(companyCursor.getColumnIndex(column));
    

    【讨论】:

    • 非常感谢
    猜你喜欢
    • 1970-01-01
    • 2023-04-06
    • 2015-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-13
    • 2015-01-21
    相关资源
    最近更新 更多