首页 > 解决方案 > 房间数据库:如何将列名检索到字符串列表中?

问题描述

我有一个名为“addresses”的 Room 表,有 15 列。我检索一行并希望将值放入 List<String>,而不是 List<Addresses>。那可能吗?

@Query("SELECT * FROM addresses WHERE myid= :id")
List<String> getAddressAsList(int id);

此外,是否可以像这样将数据库表列名和值一起检索到 map <"column name","value"> 的列表中?

@Query("SELECT * FROM addresses WHERE myid= :id")
List<Map<String, String> getAddressAsList(int id);

标签: android-room

解决方案


您可以使用 SupportSQLiteDatabase 但不能使用 Dao。

假设你在一项活动中,

db = yourRoomDatabase.getInstance(this);
  • 即你通常会使用类似的东西yourDao = db.getYourDao();然后 myAddressList = dao.getAddressList();

然后你可以这样做: -

SupportSQLiteDatabase sdb = db.getOpenHelper().getWritableDatabase();
Cursor csr = sdb.query("SELECT * FROM address WHERE myid=?",new String[]{String.value(id)}

然后要获取 Cursor 中的列名列表,您可以使用:-

    val columnNames = csr.columnNames

要获取列名和值的映射,您可以使用:-

    val columnsAndValues: MutableMap<String,String> = mutableMapOf()
    while (csr.moveToNext()) {
        for (i: Int in 0..csr.columnCount) {
            columnsAndValues.put(csr.columnNames.get(i),csr.getString(i))
        }
    }
    csr.close()

推荐阅读