【问题标题】:getting output of a query in sqlite - android在 sqlite 中获取查询的输出 - android
【发布时间】:2020-04-13 16:31:01
【问题描述】:

您使用预先提供的方法(例如 getInt(...)getString(...))从列中获取数据,但是如何从 SELECT 语句之类的东西中获取数据,在 sqlite 中喜欢做类似的事情:

SELECT COUNT(COLUMN_NAME) FROM TABLE_NAME

您将如何执行此查询,然后将结果发送到 int 变量?

【问题讨论】:

    标签: java android sqlite android-sqlite


    【解决方案1】:

    你也这样做:

    String sql = "SELECT COUNT(COLUMN_NAME) FROM TABLE_NAME";
    

    所以如果你用rawQuery()创建一个Cursor对象:

    Cursor c = db.rawQuery(sql, null);
    

    Cursor 仅包含 1 列,您可以通过以下方式获取其值:

    if (c.moveToFirst()) result = c.getInt(0);
    

    其中result 是预定义的int 变量。
    但是给返回的列加上别名是一个好习惯,比如:

    String sql = "SELECT COUNT(COLUMN_NAME) AS counter FROM TABLE_NAME";
    

    所以你可以通过它的名字得到它:

    if (c.moveToFirst()) result = c.getInt(c.getColumnIndex("counter"));
    

    【讨论】:

    • 我没有在主要问题中问它,但是您知道android是否提供了一种选择表格中第n行的方法,还是我们应该使用limit子句并选择最后一个行?
    • 您必须使用限制,但必须带有 ORDER BY 子句,例如:select * from tablename order by id limit 10
    • 但是使用顺序? LIMIT 子句打乱了行?(我对 sql 本身不是很熟悉)
    • 表是无序的数据集。你认为的前 10 行可能不是你会得到的:select * from tablename limit 10。你可以做到,但不能保证结果。
    • 这适用于我所知道的任何 rdbms。
    【解决方案2】:

    创建一个包含返回 TABLE_NAME 计数的 count 方法的 Dao CLASS

    @Dao
    abstract class TABLE_NAMEDao : BaseDao<TABLE_NAME> {
    @Query("SELECT COUNT(id) FROM TABLE_NAME")
        abstract fun count(): Long
    }
    

    【讨论】:

    • 我不太懂kotlin,能不能同时提供java版本?
    猜你喜欢
    • 2020-03-23
    • 2011-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 2012-12-10
    • 2019-02-17
    • 2013-01-10
    相关资源
    最近更新 更多