如何使用游标从sqlite android中的多个列中获取数据

Posted

技术标签:

【中文标题】如何使用游标从sqlite android中的多个列中获取数据【英文标题】:How to fetch data from multiple columns in sqlite android using cursor 【发布时间】:2021-09-24 13:52:05 【问题描述】:

我想使用以下代码使用光标从多行和多列中获取数据

  Cursor getallrecords()

    SQLiteDatabase dbb = this.getReadableDatabase();

    Cursor cursor = null;

    if (dbb != null)
        Log.d("cursor","not null");
      
        cursor = dbb.rawQuery(" SELECT * FROM " + TABLE_NAME,null);

        else
        Log.d("cursor","null");
    

    return cursor;
    

在 logcat 上显示光标不为空并返回数据。但是当我尝试使用下面的代码设置游标在 ArrayList 上进行的数据时。

  void read()
    Cursor cursor = save_barcode.getallrecords();

    if (cursor.getCount() != 0)
        cursor.moveToFirst();
        while(cursor.moveToNext())
            url.add(cursor.getString(1));
            type.add(cursor.getString(2));
            date_and_time.add(cursor.getString(3));
        
    

    if (!url.isEmpty())
        Log.d("message","not null");
    else 
        Log.d("url","null");
    

    if (!type.isEmpty())
        Log.d("message","not null");
    else 
        Log.d("type","null");
    
    if (!date_and_time.isEmpty())
        Log.d("message","not null");
    else 
        Log.d("date","null");
    

然后在logcat中显示URL,date_and_time, type这三个都是空的。因此,如果有人知道如何使用光标从多行和多列中获取数据,请帮助我

【问题讨论】:

这能回答你的问题吗? What's the best way to iterate an android Cursor? 【参考方案1】:

您的代码的明显问题是您使用的是moveToFirst(),然后是moveToNext(),因此可以肯定您丢失了第一行。 如果表中只有 1 行,那么列表将为空。 不需要检查getCount(),所以删除if,不需要moveToFirst()

改成这样:

void read()
    Cursor cursor = save_barcode.getallrecords();
    if (cursor == null) return; 
    while (cursor.moveToNext()) 
        url.add(cursor.getString(1));
        type.add(cursor.getString(2));
        date_and_time.add(cursor.getString(3));
    
    cursor.close();

   ...................
 

【讨论】:

兄弟,当我尝试在回收视图上设置数据时,我的 apk 仍然崩溃。在 logcat 中,它显示 java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on an null object reference。 @Akshit 这不是因为我的答案中的代码。当您致电 setText() 时,您的应用会崩溃。 因为 settext 方法没有得到任何值,这显然意味着我们在获取数据时缺少一些东西。 @Akshit 不,这不是问题。问题是您调用 setText 的 TextView 为空。这就是空对象引用的意思。 看兄弟我用 holder.getBarcodeUrl.setText(String.valueOf(url.get(position)));在我的 recycleview 持有者上,url 引用了一个 arraylist,它使用 cunstructor 从 read 方法中获取。

以上是关于如何使用游标从sqlite android中的多个列中获取数据的主要内容,如果未能解决你的问题,请参考以下文章

如何从android中的sqlite中检索数据

有没有一种方法可以使用 android-sqlite 游标从列数未知的表中选择 *

如何从 sqlite 游标中获取列值?

无法从 SQLite 检索数据说 android (Eclipse) 中不存在该列

SQLite Android数据库游标窗口分配2048 kb失败

如何通过光标获取android中的时间戳列值?