【问题标题】:SQL - How to return a list of dataSQL - 如何返回数据列表
【发布时间】:2020-07-15 19:18:54
【问题描述】:

我下面有这个SQL方法,假设返回多行数据,但每次显示数据时只返回一项。

我该如何解决这个问题?

//Constant
    public static final String COL_4 = "LikeSong";
    

//Database Table
    @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL("CREATE TABLE UserInfo(ID INTEGER PRIMARY KEY AUTOINCREMENT, Users_Name TEXT, PlaylistName TEXT,likeAlbum TEXT,LikeSong TEXT)");
        }

public String[] getLikedSongs() {
        SQLiteDatabase db = this.getReadableDatabase();
        String[] LikeSong = null;
        Cursor cursor = db.rawQuery(" SELECT " + COL_4 + " FROM " + Table_Name + " WHERE " + COL_4 + " IS NOT NULL", null);
        while (cursor.moveToNext()) {
            String note = cursor.getString(0);
            LikeSong = note.split(",");
        }
        cursor.close();
        db.close();
        return LikeSong;
    }

【问题讨论】:

  • 试试while (cursor.next())
  • 产生了错误。我只能使用“cursor.moveToNext()”或“cursor.moveToFirst()
  • LikeSong 在任何迭代中都会被覆盖,因此您将始终从循环的最后一次迭代中获取数据。

标签: java android sql sqlite android-sqlite


【解决方案1】:

在每次迭代的 while 循环内,您都会更改 LikeSong 的值,因此当循环结束时,LikeSong 会分配给它的最后一个值。
我认为您想要一个由您的方法 getLikedSongs() 返回的数组列表,如下所示:

public List<String[]> getLikedSongs() {
        SQLiteDatabase db = this.getReadableDatabase();
        List<String[]> list = new ArrayList<>();
        Cursor cursor = db.rawQuery(" SELECT " + COL_4 + " FROM " + Table_Name + " WHERE " + COL_4 + " IS NOT NULL", null);
        while (cursor.moveToNext()) {
            String note = cursor.getString(0);
            LikeSong.add(note.split(","));
        }
        cursor.close();
        db.close();
        return LikeSong;
}

【讨论】:

  • 非常感谢!答案就在这里! :)
【解决方案2】:

好的……现在我明白了。您正在为 while 循环的每次迭代重新分配 LikeSong,并在 while 循环完成后返回 String 数组。所以很明显,你只会得到最后一行的值。

【讨论】:

  • 谢谢!非常有帮助! :)
猜你喜欢
  • 1970-01-01
  • 2023-04-08
  • 2021-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多