【发布时间】:2017-06-03 20:59:01
【问题描述】:
我正在开发一个 Android 应用程序,同时学习,它访问一个 SQLite 数据库,该数据库在列中保存一些布尔数据(以及其他数据),但我对布尔数据的表示方式感到困惑。
据我了解,对于 SQLite 而言,0 为假,1 为真。这是我对我的问题的搜索结果(见get-boolean-from-database-using-android-and-sqlite 和SQLite Docs 有两个例子)。
关于我的特殊问题,我正在查询的表有两个布尔列,在有问题的行中,此时两列都是“真”。但是,当我在我的应用程序中分配这些列的值时,它们是“假的”。这是代码术语中的场景;
SQLiteDatabase db = getReadableDatabase();
String[] result_cols = new String[] { KEY, FD_CONTACT_FNAME, FD_CONTACT_SNAME, FD_IS_PUPIL, FD_IS_ACTIVE };
String where = KEY + " = ?";
String whereArgs[] = {id};
String groupBy = null;
String having = null;
String order = null;
Cursor cursor = db.query(DB_TABLE_CONTACTS, result_cols, where, whereArgs, groupBy, having, order);
Log.d("ACONTACT", DatabaseUtils.dumpCursorToString(cursor));
while (cursor.moveToNext()) {
int three = cursor.getInt(3);
int four = cursor.getInt(4);
if (cursor.getInt(3) == 1) {
Log.d("ONE", "1");
} else if (cursor.getInt(3) == 0) {
Log.d("ZERO", "0");
}
Contact mContact = new Contact(cursor.getLong(0), cursor.getString(1), cursor.getString(2), ((cursor.getInt(3) == 1)? true : false), (cursor.getInt(4) > 0));
Log.d("ACONTACT", String.valueOf(mContact.getIsPupil()) + " .... " + String.valueOf(mContact.getIsActive()));
Log.d("ACONTACT", String.valueOf(cursor.getInt(3)) + " .... " + String.valueOf(cursor.getInt(4)));
Log.d("ACONTACT", cursor.getString(1) + " .... " + cursor.getString(2));
Log.d("ACONTACT", String.valueOf(cursor.getLong(0)));
return mContact;
}
代码的日志方面导致;
D/ACONTACT: >>>>> Dumping cursor android.database.sqlite.SQLiteCursor@418c5f28
0 {
_id=24
fname=Harry
sname=Ballard
is_pupil=true
is_active=true
}
<<<<<
D/ZERO: 0
D/ACONTACT: false .... false
D/ACONTACT: 0 .... 0
D/ACONTACT: Harry .... Ballard
D/ACONTACT: 24
'Contact' 是一个自定义类,没什么复杂的,它有一个这样的构造函数;
public Contact( long id, String fname, String sname, Boolean isPupil, Boolean isActive ) {
this.id = id;
this.fname = fname ;
this.sname = sname ;
this.isPupil = isPupil;
this.isActive = isActive;
}
我可以从日志中看到,当“DatabaseUtils”转储游标时,游标是正确的,但是当我将游标值读取到我的类或任何其他用于调试的变量中时,它们看起来是错误的(都是 int '3 ' 和 int 'four' 例如在赋值后保持为零,因此为假)。其他三列的数据总是正确的。
我显然遗漏了一些东西,但正如我所见,游标包含正确的数据(两个布尔列,均具有“真”值,如游标转储所示),但随后是 cursor.getInt(3) 和游标.getInt(4) 都返回零,即假。光标怎么会出现变化,它让我头疼:)
说了这么多,我的标题可能不准确,因为光标一开始是正确的,但后来出了点问题。有人知道什么线索吗?
【问题讨论】:
标签: java android sqlite cursor android-sqlite