You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中SQLite如何查询整数列(布尔型)判断0或1

解决SQLite整数布尔列的查询问题

我来帮你搞定这个问题!你的代码现在有几个核心问题,导致它不管查询结果如何都会返回true——你既没正确处理rawQuery返回的Cursor,也没给查询的占位符传值,而且直接硬返回true,完全没用到数据库的查询结果。

咱们一步步来修正:

原代码的问题点

  • 你在SQL语句里用了占位符?,但rawQuery的第二个参数传了null,这会导致查询条件不生效,数据库不知道你要匹配什么值
  • 没有读取rawQuery返回的Cursor数据,直接返回true,等于完全忽略了查询结果
  • 没有关闭数据库和Cursor,会造成资源泄漏,这在Android开发里是要避免的

正确的实现方式(用Cursor处理查询结果)

下面是调整后的代码,我会加上注释说明每个步骤:

public boolean getLucide(int recordId) { 
    // 假设你需要根据记录ID查询特定行的lucidite值,可根据你的实际需求修改查询条件
    SQLiteDatabase db = null;
    Cursor cursor = null;
    try {
        // 获取可读数据库实例
        db = this.getReadableDatabase();
        
        // 定义查询语句,这里用ID作为查询条件,你可以换成自己需要的条件(比如日期、其他字段)
        String query = "SELECT luciditeCarnetreve FROM Carnetreve WHERE id = ?";
        
        // 执行查询,把占位符的参数传入(注意要转成String数组)
        cursor = db.rawQuery(query, new String[]{String.valueOf(recordId)});
        
        // 判断Cursor是否有数据,如果有就移动到第一条记录
        if (cursor.moveToFirst()) {
            // 获取对应列的整数值,getColumnIndexOrThrow可以避免列名写错的问题
            int lucidValue = cursor.getInt(cursor.getColumnIndexOrThrow("luciditeCarnetreve"));
            // 把整数转换成boolean:1对应true,0对应false
            return lucidValue == 1;
        } else {
            // 如果没找到对应的记录,返回默认值(这里返回false,你可以根据业务调整)
            return false;
        }
    } finally {
        // 不管查询成功还是失败,都要关闭Cursor和数据库,释放资源
        if (cursor != null) {
            cursor.close();
        }
        if (db != null) {
            db.close();
        }
    }
}

关键注意点

  1. Cursor的处理:rawQuery返回的Cursor默认是在数据的前一个位置,必须调用moveToFirst()(或者moveToNext())才能读取数据
  2. 占位符参数:如果你的查询条件是其他值(比如要直接查询lucidite为1的记录),可以修改SQL语句和参数数组,比如String query = "SELECT luciditeCarnetreve FROM Carnetreve WHERE luciditeCarnetreve = ?";,然后参数传new String[]{"1"}
  3. 资源释放:一定要在finally块里关闭Cursor和数据库,或者用Android的try-with-resources语法(API 19+支持),防止内存泄漏
  4. 列名安全:用getColumnIndexOrThrow代替getColumnIndex,如果列名写错会直接抛出异常,方便你排查错误

如果你的需求是判断数据库中是否存在luciditeCarnetreve为1的记录,可以简化查询语句为:

String query = "SELECT EXISTS(SELECT 1 FROM Carnetreve WHERE luciditeCarnetreve = 1)";
// 执行查询后获取结果
int exists = cursor.getInt(0);
return exists == 1;

这样就能准确获取到你要的布尔值结果啦!

内容的提问来源于stack exchange,提问作者M. Dupont

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:04:12