在Android中使用rawQuery和rowid从sqlite数据库中选择一行
我已经创建了一个外部SQLite数据库,看起来像这样: 在我的Android应用程序中,我要做的是使用ROWID加载一行中的所有值,并将它们放入数组中。例如:在Android中使用rawQuery和rowid从sqlite数据库中选择一行,android,sqlite,rowid,Android,Sqlite,Rowid,我已经创建了一个外部SQLite数据库,看起来像这样: 在我的Android应用程序中,我要做的是使用ROWID加载一行中的所有值,并将它们放入数组中。例如: Cursor cursor = db.rawQuery("SELECT * FROM Dairy WHERE ROWID = 1", null); 这将返回第1行中的所有值:51、35、63。然而,这总是只返回第一个值,在本例中为51。此外,cursor.getCount()始终返回1。 以下是我的完整代码: db = getReada
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();
db=getReadableDatabase();
Cursor Cursor=db.rawQuery(“从Dairy中选择*,其中ROWID=1”,null);
yData=newint[cursor.getCount()];
if(cursor.moveToFirst()){
对于(int i=0;i
谢谢您的帮助。如果我理解正确,您需要从单行返回每列的值。由于您只选择一行并希望从每一列中获取值,因此只需获取每一列的索引即可。然后,对它们进行迭代。下面是如何实现的代码
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();
Cursor Cursor=db.rawQuery(“从乳制品中选择*,其中ROWID=1 Limit 1”,null);
if(cursor.moveToFirst()){
String[]columnNames=cursor.getColumnNames();
yData=newint[columnNames.length];
for(int i=0;i
getInt(int columnIndex)方法返回请求的列,而不是整行。然而,如果光标不为空,或者如果调用moveToNext()时光标未超过最后一行,则moveToFirst()和moveToNext()会将光标移动到第一行或下一行。否则两者都将返回false
因此,如果成功,游标将包含一个完整的行,您可以通过直接提供基于0的索引或通过getColumnIndex(String columnName)获取列索引来访问元素,提供列名以获取该列的索引,然后访问该列
您可以参考《android开发者指南》。您总是会得到相同的值:
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();
if(cursor.moveToFirst()){
对于(int i=0;i
}如果返回的行只有一行,那么为什么要循环遍历这些行
cursor.getCount()始终返回1
。这是正确的!您只返回了1行。也许您混淆了行和列?您的代码工作得很好,只需将cursor.getColumnIndex(i)更改为cursor.getColumnIndex(columnNames[i]),因为该方法要求字符串。@Chilcone已编辑。非常感谢。