Java 为什么android中的sqlite游标返回不同的值?
我有一个简单的查询,您可以看到一行:Java 为什么android中的sqlite游标返回不同的值?,java,android,sqlite,android-sqlite,android-cursor,Java,Android,Sqlite,Android Sqlite,Android Cursor,我有一个简单的查询,您可以看到一行: SELECT substr(..., 10, 6) as X 如果我使用cursor.getInt(…)我会得到1048(错误的值) 如果我使用cursor.getString(…)我会得到“002030”(这是正确的) 那么,是什么让sqlite将“002030”解析为1048呢 我是否必须每次都将其作为字符串进行解析 谢谢。函数substr()返回一个字符串,因此您应该使用cursor.getString()检索值,该函数返回正确的结果。 如果希望结果
SELECT substr(..., 10, 6) as X
如果我使用cursor.getInt(…)我会得到1048(错误的值)
如果我使用cursor.getString(…)我会得到“002030”
(这是正确的)
那么,是什么让sqlite将“002030”解析为1048呢
我是否必须每次都将其作为字符串进行解析
谢谢。函数substr()
返回一个字符串,因此您应该使用cursor.getString()
检索值,该函数返回正确的结果。如果希望结果为整数,则必须在sql代码中显式转换:
SELECT cast(substr(..., 10, 6) as integer) as X
或者含蓄地:
SELECT substr(..., 10, 6) + 0 as X
结果将是整数2030
,不带前导0
s.对于您得到的奇怪的
1048
,Java将以0
开头的数字文本视为数字,因此:
int x = 002030;
将
1048
分配给x
,这是八进制数的十进制表示形式2030
谢谢。我还是不明白,你。。。为什么getDouble可以在substr()上工作,而getLong/Int不能。如果有什么不同的话,我希望是相反的。这个问题需要测试。我将尝试复制。无论如何,为了安全起见,在sql中进行转换。