房间数据库:如何将列名检索到字符串列表中?

Tah*_*aha 5 android-room

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

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

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

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

Mik*_*keT 1

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

假设您在一项活动中,

db = yourRoomDatabase.getInstance(this);
Run Code Online (Sandbox Code Playgroud)
  • 即你通常会使用类似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)}
Run Code Online (Sandbox Code Playgroud)

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

    val columnNames = csr.columnNames
Run Code Online (Sandbox Code Playgroud)

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

    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()
Run Code Online (Sandbox Code Playgroud)