Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android中使用rawQuery和rowid从sqlite数据库中选择一行_Android_Sqlite_Rowid - Fatal编程技术网

在Android中使用rawQuery和rowid从sqlite数据库中选择一行

在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

我已经创建了一个外部SQLite数据库,看起来像这样:

在我的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();
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已编辑。非常感谢。