Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么android中的sqlite游标返回不同的值?_Java_Android_Sqlite_Android Sqlite_Android Cursor - Fatal编程技术网

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中进行转换。