Java sqlite选择不返回任何结果
我有这张桌子: 我试着选择phone=9,isBlocked=1 SQLiteDirectCursorDriver:从被阻止的\u电话\u表中选择键\u ID,其中键\u电话=?而键_是_BLOCKED= 代码:Java sqlite选择不返回任何结果,java,android,database,sqlite,Java,Android,Database,Sqlite,我有这张桌子: 我试着选择phone=9,isBlocked=1 SQLiteDirectCursorDriver:从被阻止的\u电话\u表中选择键\u ID,其中键\u电话=?而键_是_BLOCKED= 代码: Cursor cursor = this.getReadableDatabase().query( BLOCKED_PHONES_TABLE, new String[] { KEY_ID }, KEY_PHONE+" = ? A
Cursor cursor = this.getReadableDatabase().query(
BLOCKED_PHONES_TABLE,
new String[] { KEY_ID }, KEY_PHONE+" = ? AND "+KEY_IS_BLOCKED+" = ?",
new String[] { phone, "1" }, null, null, null);
while(cursor.moveToNext()) {
result = new Phone();
result.id = (cursor.getInt(0));
result.phone = phone;
result.isBlocked = true;
}
return result;
}
但我得到的结果集是空的
我需要修理什么
替换:
new String[] { phone, "1" }, null, null, null);
借
并替换:
while(cursor.moveToNext()) {
result = new Phone();
result.id = (cursor.getInt(0));
result.phone = phone;
result.isBlocked = true;
}
作者:
您请求的行的KEY_IS_BLOCKED列包含字符串1 显然,您没有任何行的值是这样的字符串 Android数据库API仅支持字符串值作为参数。 只需将数字直接插入SQL查询:
Cursor cursor = this.getReadableDatabase().query(
BLOCKED_PHONES_TABLE,
new String[] { KEY_ID },
KEY_PHONE + " = ? AND " + KEY_IS_BLOCKED + " = 1" + ,
new String[] { phone },
null, null, null);
我将KEY_定义为位类型。所以,在这种情况下,我应该使用您的语法?SQLite没有位类型。那么,为什么这不会因为语法错误而失败呢?CREATE TABLE BLOCKED_PHONES_TABLE id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL默认值1,KEY_PHONE TEXT UNIQUE,KEY_是_BLOCKED BIT我看到了这个。但是,为什么它不会在运行时执行呢?根据第2.1节中的规则,位会产生数值关联。不管你用的是小兔子还是毛茸茸的兔子,都没有任何区别。
if(cursor!=null){
cursor.moveToFirst()
result = new Phone();
result.id = (cursor.getInt(0));
//TODO : print ID_KEY to check result...
}
Cursor cursor = this.getReadableDatabase().query(
BLOCKED_PHONES_TABLE,
new String[] { KEY_ID },
KEY_PHONE + " = ? AND " + KEY_IS_BLOCKED + " = 1" + ,
new String[] { phone },
null, null, null);