我有一个包含2列类型的SQLite表; VARCHAR
和INTEGER
。如果同一行中的VARCHAR
值等于INTEGER
0
列中选择所有相关值
我的代码示例:
public static final String CreateDateTable = "create table " + DATE_TABLE
+ " (" + DATE + " VARCHAR(30) not null, " + INTEGER_COLUMN
+ " INTEGER DEFAULT 0)";
String[] column = new String[] { DATE};
String WHERE = "CAST("+INTEGER_COLUMN+" as VARCHAR) = ?";
String[] WHEREARGS = new String[] { "0" };
Cursor c;
c = ourDatabase.query(DATE_TABLE, column, WHERE, WHEREARGS, null, null,
null);
正在返回所有行,WHERE
子句似乎无效。
答案 0 :(得分:1)
解决方案是将整数列转换为TEXT
,
以下代码返回了正确的结果。
String WHERE = "CAST("+INTEGER_COLUMN+" as TEXT) = ?";
答案 1 :(得分:0)
您期望的输出值类型是什么?如果只是varchar列,那么
SELECT charCol
FROM table
WHERE table.intCol = 0;
答案 2 :(得分:0)
你应该尝试:
String[] column = { DATE };
String where = INTEGER_COLUMN + " = ?";
String[] whereArgs = { "0" };
Cursor c = ourDatabase.query(
DATE_TABLE, column, where, whereArgs, null, null, null);
转换为VARCHAR是多余的。
但是,它确实不应该导致返回所有行。所以,我的猜测是插入值的方式或者你看待结果的方式有问题。
更完整的代码示例可能有助于找出哪个。
修改强>
我尝试了您发布的更新代码,包括创建表格。它实际上并没有编译,但假设您的意思是+ " INTEGER DEFAULT 0,)";
而不是+ " INTEGER DEFAULT 0,")";
,它可以工作,并且仍然只返回正确的行。
同样,如果您希望我们能够找到问题,您应该发布用于插入值的代码,查询数据库的方式以及确切的结果。