Java 有没有一种方法可以使用android sqlite游标从列数未知的表中选择*

Java 有没有一种方法可以使用android sqlite游标从列数未知的表中选择*,java,android,json,sqlite,android-cursor,Java,Android,Json,Sqlite,Android Cursor,我试图从一个表中选择所有列,并将所有行返回到一个游标中,然后在游标中循环以获取列,并使用列名从每个列中获取值。然后将列名及其值放入JSONObject中。但我总是得到粗略的IndexOutOfBoundException。是否有一种方法可以选择未知数量的列和行,并将它们映射到一个键值对中。 下面是我的代码 public JSONObject getAllCompanies() { JSONObject response = new JSONObject(); try {

我试图从一个表中选择所有列,并将所有行返回到一个游标中,然后在游标中循环以获取列,并使用列名从每个列中获取值。然后将列名及其值放入JSONObject中。但我总是得到粗略的IndexOutOfBoundException。是否有一种方法可以选择未知数量的列和行,并将它们映射到一个键值对中。 下面是我的代码

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;
}
公共JSONObject GetAllCompanys(){ JSONObject响应=新建JSONObject(); 试一试{ SQLiteDatabase SQLiteDatabase=dbHelper.getWritableDatabase(); JSONArray dataArray=新的JSONArray(); JSONObject dataObject=新的JSONObject(); 游标companyCursor=sqLiteDatabase.rawQuery(“选择*来自公司”,null); if(companyCursor.moveToFirst()){ 做{ 字符串列=”; 字符串值=”; for(int m=0;m 此处
getColumnIndex(value)
with
value=”“
返回-1,该索引无效。由于在
m
中已经有索引,因此可以使用

value = companyCursor.getString(m);

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

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

谢谢,我修好了。非常感谢
value = companyCursor.getString(companyCursor.getColumnIndex(column));