如何通过整数查询SQLite?

时间:2019-05-29 13:07:43

标签: android-sqlite

我有一个如下的SQL表:

ID(string)    Name(string)    Width(double)   Height(double)   Selected(int)

12345678      Book            210             297              1
12345679      Display         530             326              0
12345680      Phone           70              140              0

我可以通过传递没有问题的String参数来按ID和Name查询它们,但是所有int和double查询都返回null。为什么?

这是我尝试的代码:

Cursor cursor = mDatabase.query(  "Objects",null, "Selected" + " = ?", new String[]{String.valueOf(1)},null,null,null);
ObjectDataBase.ObjectCursor objectCursor = new 
ObjectDataBase.ObjectCursor(cursor);
try {
    if (objectCursor.getCount() == 0) {  return null;  }
    objectCursor.moveToFirst();
    return objectCursor.getObject();
} finally { cursor.close();}

ObjectDataBase是数据库类,而ObjectCursor是光标包装器和ObjectDataBase的内部类。

当我使用DB浏览器浏览数据库时,数据是正确的,那么还有什么可能是错误的?

1 个答案:

答案 0 :(得分:1)

  

当我使用DB浏览器浏览数据库时,数据是   正确,那么还有什么可能是错误的?

a)数据库浏览器中的数据可能不是设备上的数据。

  • 这是问题的常见原因。

  • 要排除这种情况,我建议在不使用select子句的情况下运行查询,以便所有行都连同一些基本调试一起返回

例如

Cursor cursor = mDatabase.query("Objects",null, "Selected" + " = ?", new String[]{String.valueOf(1)},null,null,null);
Log.d("CURSORINFO","The Cursor has " + String.valueOf(cursor.getCount()) + " rows."); //<<<<<<<<<< 4 DEBUG
DatabaseUtils.dumpCursor(cursor); //<<<<<<<<<< 4 DEBUG

ObjectDataBase.ObjectCursor objectCursor = new 
ObjectDataBase.ObjectCursor(cursor);
try {
    if (objectCursor.getCount() == 0) {  return null;  }
    objectCursor.moveToFirst();
    return objectCursor.getObject();
} finally { cursor.close();}
  • 如果日志中的第一条消息报告有0行,则表中没有数据。
  • 如果表中确实有数据,则 dumpCursor 方法的输出将输出所有数据。您需要检查它是否与您希望表容纳的内容匹配。

  • 如果数据符合期望,则重新引入select子句并重新运行。行计数为0,则选择子句出现问题。

b)在try子句中包装代码

  • 如果存在基础异常,这可以隐藏有用的信息。

  • 您的代码会更好::-

    ObjectType rv = null;
    if (objectCursor.moveToFirst()) {
        rv = objectCursor.getObject();
    }
    cursor.close();
    return rv;
    
  • 如果发生异常,那么您会知道的。

c)游标包装器代码错误地分配了值。

  • 由于代码未包含在问题中,因此除了检查代码外,无话可说。