【问题标题】:Issue with SQLite query in AndroidAndroid中的SQLite查询问题
【发布时间】:2011-01-12 16:37:13
【问题描述】:

我有一个 SQLite 数据库,其中有一个名为 object_zone 的表。该表有两列,整数类型:object 和 zone。

如果我将数据库复制到我的计算机上,并使用以下命令进行查询:

SELECT object FROM object_zone WHERE zone = 791

它返回几行。

但是,在我的 Android 手机上,如果我查询它:

Cursor cursor = database.query( "object_zone", new String[] {"object"}, "zone = ?", new String[] { Long.toString( zoneId )}, null, null, null);

其中 zoneId = 791,游标包含 0 行。查询功能的使用量是怎么填的?

【问题讨论】:

    标签: android sqlite


    【解决方案1】:

    您是否在返回的光标上调用了cursor.moveToFirst()?如果没有调用它,cursor.getCount() 可能会错误地返回 0(或者它可能是 -1...)

    我被这个绊倒了好几次......

    【讨论】:

    • 问题是,我在该查询之后有一个循环,它使用 cursor.moveToNext() 遍历游标中的行,并且循环根本不执行,(我正在使用布尔返回作为循环条件,即 while( cursor.moveToNext() )。据我所知,它没有返回任何行。奇怪的部分是我在代码的前面使用相同的构造来处理不同的查询,它工作正常,唯一的区别是该查询没有 WHERE 子句,它正在查询不同的表。
    • @Ogre:请将该代码添加到问题中。如果您只是调用moveToNext(),而不是从调用moveToFirst() 开始,那么我认为结果是不确定的。 (我可能对此有误,但我认为需要致电 moveToNext()。)
    【解决方案2】:

    也许这里的问题是转换为字符串。你能用你在电脑上执行的同样的 sql 试试rawQuery 方法吗?

    【讨论】:

    • 嗯,使用 rawQuery,我给它“SELECT object FROM object_zone WHERE zone =” + Long.toString( zoneId ) 作为第一个参数,null 作为第二个参数,现在它正在工作。替换 ? 时发生了一些奇怪的事情不过对于字符串数组元素。
    • 我认为和演员阵容有关,尝试使用int数组。
    猜你喜欢
    • 2015-09-27
    • 1970-01-01
    • 2013-02-05
    • 2013-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多