我想在Android应用程序中执行的操作是使用ROWID从一行加载所有值并将它们放入数组中。例如:
Cursor cursor = db.rawQuery("SELECT * FROM Dairy WHERE ROWID = 1", null);
这将返回第1行的所有值:51,35,63。但是,这总是只返回第一个值,在本例中为51.此外,cursor.getCount()始终返回1。 这是我的完整代码:
db = getReadableDatabase();
Cursor cursor = db.rawQuery("SELECT * FROM Dairy WHERE ROWID = 1", null);
yData = new int[cursor.getCount()];
if (cursor.moveToFirst()) {
for (int i = 0; i < cursor.getCount(); i++) {
yData[i] = cursor.getInt(0);
cursor.moveToNext();
}
cursor.close();
}
db.close();
感谢您的帮助。
答案 0 :(得分:4)
如果我正确理解你需要从单行返回每列的值。由于您只选择单行并希望从每列获取值,因此您只需要获取每列的索引。然后迭代它们。以下是代码如何完成。
Cursor cursor = db.rawQuery("SELECT * FROM Dairy WHERE ROWID = 1 Limit 1", null);
if (cursor.moveToFirst()) {
String[] columnNames = cursor.getColumnNames();
yData = new int[columnNames.length];
for (int i = 0; i < columnNames.length; i++) {
// Assume every column is int
yData[i] = cursor.getInt(cursor.getColumnIndex(columnNames[i]));
}
}
cursor.close();
db.close();
答案 1 :(得分:0)
getInt(int columnIndex)方法返回请求的列而不是整行。然而,如果光标不为空或光标未超过最后一行,则 moveToFirst()和 moveToNext()会将光标移动到第一行或下一行。 moveToNext()被调用。否则两者都将返回false。
因此,成功时,游标包含一个完整的行,您可以通过直接提供基于0的索引或通过提供列名称的 getColumnIndex(String columnName)获取列索引来访问元素获取该列的索引并访问该列。
您可以参考Android开发者指南Cursor。
答案 2 :(得分:0)
你总是得到相同的价值:
if (cursor.moveToFirst()) {
for (int i = 0; i < cursor.getCount(); i++) {
//cursor.getInt(0); You probably want to get 0, 1 & 2
yData[i] = cursor.getInt(0);
cursor.moveToNext();
}
cursor.close();
}