有没有一种方法可以使用 android-sqlite 游标从列数未知的表中选择 *
Posted
技术标签:
【中文标题】有没有一种方法可以使用 android-sqlite 游标从列数未知的表中选择 *【英文标题】:Is there a way I can select * from a table with unkown number of columns using an android-sqlite cursor 【发布时间】: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;
【问题讨论】:
【参考方案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));
【讨论】:
非常感谢以上是关于有没有一种方法可以使用 android-sqlite 游标从列数未知的表中选择 *的主要内容,如果未能解决你的问题,请参考以下文章