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

如何通过rawQuery检查Android数据库中是否存在指定记录?

完善你的Android数据库deleteShape方法

嘿,刚上手Android数据库开发是吧?看你写了deleteShape方法的开头,想要在删除前检查数据库里有没有对应记录,我来帮你把这个方法补全并优化一下,顺便给你讲讲几个新手容易忽略的关键细节~

完整的实现代码

public boolean deleteShape(int shapeID) {
    boolean result = false;
    SQLiteDatabase db = null;
    Cursor mCursor = null;

    try {
        // 先获取可读数据库用于查询
        db = this.getReadableDatabase();
        
        // 检查指定shapeID的记录是否存在:用SELECT 1只判断存在性,比查全字段更高效
        // 用?占位符+参数数组,避免SQL注入风险,这是Android数据库操作的最佳实践
        mCursor = db.rawQuery(
            "SELECT 1 FROM shapes WHERE id = ?", 
            new String[]{String.valueOf(shapeID)}
        );
        
        // 如果Cursor能移动到第一行,说明有对应记录
        if (mCursor.moveToFirst()) {
            // 切换为可写数据库执行删除操作
            db = this.getWritableDatabase();
            // delete方法返回删除的行数,大于0说明删除成功
            int deletedRows = db.delete(
                "shapes", 
                "id = ?", 
                new String[]{String.valueOf(shapeID)}
            );
            
            result = deletedRows > 0;
        }
    } catch (Exception e) {
        // 捕获异常避免崩溃,开发阶段可以打印日志排查问题
        e.printStackTrace();
    } finally {
        // 必须在finally块关闭Cursor和Database,防止内存泄漏
        if (mCursor != null) {
            mCursor.close();
        }
        if (db != null && db.isOpen()) {
            db.close();
        }
    }

    return result;
}

新手必看的关键细节

  • 防SQL注入:绝对不要直接把shapeID拼进SQL字符串里,用?占位符配合参数数组的方式,能避免恶意输入导致的安全问题。
  • 资源释放:Cursor和SQLiteDatabase都是占用系统资源的对象,一定要在finally块里关闭,不管操作成功还是失败,都能保证资源被回收,避免内存泄漏。
  • 查询优化:检查记录是否存在时,用SELECT 1代替SELECT *,因为我们只需要知道有没有记录,不需要获取所有字段,这样查询速度更快,占用资源更少。
  • 数据库读写切换:查询操作用可读数据库就够了,删除操作需要可写数据库,代码里做了对应的切换,保证操作权限正确。

另外给你个小补充:如果你的shapes表的id是主键(也就是shapeID对应主键),其实也可以不用提前查询——delete方法返回的删除行数如果是0,就说明没有对应记录。不过既然你明确要求删除前先检查,上面的代码完全满足你的需求~

内容的提问来源于stack exchange,提问作者user9535888

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:31:41