Android 列类型整数的SQLite查询WHERE子句
我有一个SQLite表,由2列类型组成Android 列类型整数的SQLite查询WHERE子句,android,sqlite,Android,Sqlite,我有一个SQLite表,由2列类型组成VARCHAR和INTEGER。如果同一行中的INTEGER值等于0 我的代码示例: public static final String CreateDateTable = "create table " + DATE_TABLE + " (" + DATE + " VARCHAR(30) not null, " + INTEGER_COLUMN + " INTEGER DEFAULT 0)"; String[]
VARCHAR
和INTEGER
。如果同一行中的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
子句似乎没有任何效果。您希望的输出值类型是什么?如果只是varchar列,那么
SELECT charCol
FROM table
WHERE table.intCol = 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,”;
,它可以工作,并且仍然只返回正确的行
同样,如果您希望我们能够找到问题,您可能应该发布用于插入值的代码、查询数据库的方式以及得到的确切结果。解决方案是将整数列强制转换为TEXT
,
以下代码返回了正确的结果
String WHERE=“CAST”(“+INTEGER\u COLUMN+”作为文本)=?”;
仅是varchar列我按照您的建议尝试了您的代码,它还返回整个列c=ourDatabase.rawQuery(“从“+DATE\u TABLE+”中选择“+DATE\u TABLE+”+NUM\u SMOKES+”=?”,新字符串[]{“0”);
。如果有帮助的话,我已经用创建表格时使用的字符串更新了我的问题。有什么建议吗?我希望得到的类型是INTEGERi。我将编辑代码以提供更完整的概述。在将问题作为原始代码发布之前,我已经尝试了上述代码,经过一些研究后,建议tryCAST
,但这也不起作用。虽然我确定表中的值,但很抱歉,我编辑了代码,使其与问题相关,并且在这样做时出现了错误。现在已修复。