在 Android 中使用 rawQuery 和 rowid 从 sqlite 数据库中选择一行
Selecting one row from sqlite database using rawQuery and rowid in Android
我创建了一个看起来像这样的外部 SQLite 数据库:
我想在我的 Android 应用程序中做的是使用 ROWID 从一行中加载所有值并将它们放入数组中。例如:
Cursor cursor = db.rawQuery("SELECT * FROM Dairy WHERE ROWID = 1", null);
这将 return 第 1 行中的所有值:51、35、63。但是,这始终 return 只是第一个值,在本例中为 51。此外,cursor.getCount()
总是 returns 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();
如果我理解正确,您需要 return 单行中每一列的值。由于您 select 只有单行并且想从每一列中获取值,因此您只需要获取每一列的索引。然后遍历它们。这是如何完成的代码。
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();
getInt (int columnIndex)
方法 return 请求的列而不是整行。而 moveToFirst ()
和 moveToNext ()
将光标移动到第一行或下一行,如果光标不为空,或者如果调用 moveToNext ()
时光标没有超过最后一行。否则两者都会 return false.
因此,成功时,游标包含一个完整的行,您可以通过直接提供基于 0 的索引或通过 getColumnIndex(String columnName)
提供列名来获取列索引来访问元素该列然后访问该列。
您可以参考 android 开发人员指南,Cursor。
你总是得到相同的值:
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();
}
我创建了一个看起来像这样的外部 SQLite 数据库:
我想在我的 Android 应用程序中做的是使用 ROWID 从一行中加载所有值并将它们放入数组中。例如:
Cursor cursor = db.rawQuery("SELECT * FROM Dairy WHERE ROWID = 1", null);
这将 return 第 1 行中的所有值:51、35、63。但是,这始终 return 只是第一个值,在本例中为 51。此外,cursor.getCount()
总是 returns 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();
如果我理解正确,您需要 return 单行中每一列的值。由于您 select 只有单行并且想从每一列中获取值,因此您只需要获取每一列的索引。然后遍历它们。这是如何完成的代码。
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();
getInt (int columnIndex)
方法 return 请求的列而不是整行。而 moveToFirst ()
和 moveToNext ()
将光标移动到第一行或下一行,如果光标不为空,或者如果调用 moveToNext ()
时光标没有超过最后一行。否则两者都会 return false.
因此,成功时,游标包含一个完整的行,您可以通过直接提供基于 0 的索引或通过 getColumnIndex(String columnName)
提供列名来获取列索引来访问元素该列然后访问该列。
您可以参考 android 开发人员指南,Cursor。
你总是得到相同的值:
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();
}