3

在我的数据库中,有两个表,

1)任务:(id(INTEGER + PRIMARY_KEY),title,description,timestamp,category_id(Category的外键-> id))

2)类别:(id(INTEGER + PRIMARY_KEY),名称)

要从表中选择数据 Anko 提供了如下方法:

var mDatabase: DatabaseManager = DatabaseManager.getInstance(activity)
var mResult: List<TaskModel> = ArrayList()
mDatabase.use {
    mResult = select(TABLE_TASK).parseList(classParser())
}

我想要的是显示任务列表及其类别名称 我已经检查了所有教程和堆栈链接,但没有得到任何方法来实现这一点。

有没有办法从 Kotlin Anko 的两个表中选择数据?

谢谢是提前!

4

2 回答 2

3

很晚了,但对像我这样的人有用

简而言之,是的

您应该创建一个包含连接列数据变量的数据类,如下所示:

data class joinTable(val id: Int, val title: String, val name:String) 

并在选择命令中使用内连接

database.use {
            select("table1 inner join table2",
                    "id,title,name").exec { parseList<joinTable>(classParser()) }
        }

而已

于 2018-01-09T07:20:56.313 回答
0

我也在此处发布另一个问题的答案(请参阅https://github.com/Kotlin/anko/issues/622)。我试图在 Anko SQLite 中进行查询,该查询在同一张表上使用了两次内连接(例如,SELECT ... FuelData AS FuelData1 INNER JOIN FuelData AS FuelData2 ON FuelData1.Id = FuelData2.Id)。

我添加了一个数据类:

class FuelData2(
        val id : Int,
        val currentDate: String,
        val litersPer100Km: Double
)

并将逻辑添加到我的活动类中:

private fun readFuelData2(): ArrayList<FuelData2> {
    val resultList = ArrayList<FuelData2>()
    val query = "SELECT FuelData1.Id, FuelData2.CurrentDate," +
            " (FuelData2.Fueled / (FuelData2.Mileage - FuelData1.Mileage) * 100) AS LitersPer100Km" +
            " FROM FuelData AS FuelData1" +
            " INNER JOIN FuelData AS FuelData2" +
            " ON FuelData1.Id = (FuelData2.Id - 1);"
    database.use {
        val cursor = database.writableDatabase.rawQuery(query, null)
        while (cursor.moveToNext()) {
            val fuelData = FuelData2(id = cursor.getInt(0),currentDate = cursor.getString(1),
                    litersPer100Km = cursor.getDouble(2))
            resultList.add(fuelData)
        }
    }
    return resultList
}

我想做的查询是:

SELECT FuelData1.Id, FuelData2.CurrentDate,
(FuelData2.Fueled / (FuelData2.Mileage - FuelData1.Mileage) * 100) AS LitersPer100Km
FROM FuelData AS FuelData1
INNER JOIN FuelData AS FuelData2
ON FuelData1.Id = (FuelData2.Id - 1);

我为 Anko 创建了另一个问题,以便在文档中添加一个示例,因为它确实令人困惑:https ://github.com/Kotlin/anko/issues/623

于 2018-05-11T17:28:24.383 回答