android-sqlite - 如何按整数查询 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
我可以通过毫无问题地传递字符串参数来按 ID 和名称查询它们,但是所有 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
是 Database 类,ObjectCursor
是游标包装器和ObjectDataBase
.
当我使用数据库浏览器查看数据库时,数据是正确的,那么还有什么问题呢?
解决方案
当我使用数据库浏览器查看数据库时,数据是正确的,那么还有什么问题呢?
a) DB Browser 中的数据可能不是设备上的数据。
这是问题的常见原因。
为了排除这种情况,我建议在没有 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,然后问题出在 select 子句上。
b) 在 try 子句中包装代码
如果存在潜在的异常,这可以隐藏有用的信息。
您的代码会更好:-
ObjectType rv = null; if (objectCursor.moveToFirst()) { rv = objectCursor.getObject(); } cursor.close(); return rv;
如果发生异常,那么您将知道它。
c) 游标包装代码错误地赋值。
- 由于代码不包含在问题中,因此除了检查代码之外,无法说任何其他内容。
推荐阅读
- selenium - 如何检查列表中的任何一个元素是否显示在量角器中
- powerapps - 如何配置 PowerApp Portal 默认 SendInvitation 流以从自定义邮箱发送电子邮件?
- python - Django:删除模型实例时如何自动删除 Digitalocean Spaces/Amazon S3 上的媒体文件
- java - Android工作室垃圾邮件多个openjdk二进制平台进程
- flutter - 如何在颤动中一次保存两种不同的形式
- javascript - scrollIntoView 方法根本不起作用
- listview - 将巨大的列表数据填充到列表视图而不滚动
- xpath - 在 UiPath 上,如果有多个同名标签,我如何(从 XML 文件中)提取第二个标签?
- node.js - 谷歌云存储 ApiError:必填
- sql-server - 当我想添加过滤器时,EF Linq to SQL 会生成一个嵌套的 SELECT