【问题标题】:Why the sqlite cursor in android returns different values?为什么android中的sqlite光标返回不同的值?
【发布时间】:2021-01-13 21:21:23
【问题描述】:

我有一个简单的查询,你可以在其中看到一行:

SELECT substr(..., 10, 6) as X

如果我使用 cursor.getInt(...) 我会得到 1048(“错误”值)

如果我使用cursor.getString(...),我会得到"002030"(这是正确的)。

那么,是什么让 sqlite 将“002030”解析为 1048?

我是否必须每次都将其作为字符串获取并自己解析?

谢谢。

【问题讨论】:

    标签: java android sqlite android-sqlite android-cursor


    【解决方案1】:

    函数substr()返回一个字符串,因此您应该使用cursor.getString()检索该值,这将返回正确的结果。

    如果您希望结果为整数,则必须在 sql 代码中将其转换为显式:

    SELECT cast(substr(..., 10, 6) as integer) as X 
    

    或隐含地:

    SELECT substr(..., 10, 6) + 0 as X
    

    结果将是整数 2030,没有前导 0s。

    至于你得到的奇怪的1048,Java 认为以0 开头的数字文字为octal 数字,所以:

    int x = 002030;
    

    1048 分配给x,这是八进制数2030 的十进制表示。

    【讨论】:

    • 谢谢。我还是不明白……为什么 getDouble 可以在 substr() 上工作,而 getLong/Int 不能。如果有的话,我预计会反过来。
    • 这个问题需要测试。我会尝试重现。无论如何,为了安全起见,请在sql中进行转换。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-04
    • 2014-02-10
    • 2013-05-09
    • 2017-06-03
    • 1970-01-01
    • 2013-01-11
    • 1970-01-01
    相关资源
    最近更新 更多