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

如何检查SQLite及Android中数据是否插入成功?需返回布尔结果

如何检查SQLite/Android中数据插入是否成功(返回布尔值)

针对你提出的两个问题——检查SQLite和Android中数据插入是否成功并返回布尔值,我整理了两种场景下的可行方案,结合你给出的代码来具体说明:

一、Android环境下的实现方案

你当前的代码用了execSQL()执行插入语句,但这个方法本身不会返回执行状态,失败时会直接抛出异常。这里提供两种改造方式:

方法1:使用insert()方法(推荐)

Android的SQLiteDatabase提供了insert()方法,它会直接返回插入行的ID:如果插入成功,返回大于0的行ID;如果失败(比如约束冲突、表不存在等),返回-1。我们可以根据这个返回值直接返回布尔值,代码更简洁安全:

SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();

// 对应你INSERT语句里的字段,按顺序填充ContentValues
// 注意:替换成你user表实际的列名,比如id、role_id、status_id等
contentValues.put("列名1", 1);
contentValues.put("列名2", 1);
contentValues.put("列名3", 1);
contentValues.put("username", "admin");
contentValues.put("password", "21232f297a57a5a743894a0e4a801fc3");
contentValues.put("mobile", "9986058114");
contentValues.put("phone", "8897456588");
contentValues.put("email", "admin@admin.com");
contentValues.put("address", "");
contentValues.put("status", "Active");
contentValues.put("role", "AD");
contentValues.put("name", "admin");

// 执行插入,第三个参数是当ContentValues为空时要插入的默认列(这里填null即可)
long insertedRowId = db.insert("user", null, contentValues);
db.close(); // 记得关闭数据库连接,避免资源泄漏

// 根据返回值判断,返回布尔值
return insertedRowId != -1;

方法2:基于你现有execSQL()代码改造

如果你坚持用execSQL(),可以通过try-catch块捕获插入时抛出的SQLException,以此判断是否成功:

SQLiteDatabase db = this.getWritableDatabase();
try {
    // 执行你原来的INSERT语句
    db.execSQL("INSERT INTO user VALUES (1,1,1,'admin','admin','21232f297a57a5a743894a0e4a801fc3','9986058114','8897456588','admin@admin.com','','Active','AD','admin')");
    db.close();
    return true; // 执行完成无异常,说明插入成功
} catch (SQLException e) {
    e.printStackTrace(); // 可选:打印异常信息,方便调试问题
    if (db.isOpen()) {
        db.close(); // 即使出错也要关闭数据库
    }
    return false; // 捕获到异常,说明插入失败
}

二、通用SQLite环境下的检查方案

如果是在非Android的原生SQLite环境(比如命令行、Python/Java等其他语言的SQLite驱动),可以通过受影响行数来判断:

  • SQLite命令行:执行INSERT后,调用内置的changes()函数,返回1表示插入成功(因为插入了一行),0则失败:
INSERT INTO user VALUES (1,1,1,'admin','admin','21232f297a57a5a743894a0e4a801fc3','9986058114','8897456588','admin@admin.com','','Active','AD','admin');
SELECT changes(); -- 返回1=成功,0=失败
  • Python示例:用sqlite3库执行插入后,通过cursor.rowcount获取受影响行数:
import sqlite3

def is_insert_successful():
    conn = sqlite3.connect("your_database.db")
    cursor = conn.cursor()
    try:
        cursor.execute("INSERT INTO user VALUES (1,1,1,'admin','admin','21232f297a57a5a743894a0e4a801fc3','9986058114','8897456588','admin@admin.com','','Active','AD','admin')")
        conn.commit()
        # rowcount为1表示插入了一行,返回True
        return cursor.rowcount == 1
    except sqlite3.Error as e:
        print(f"插入失败:{e}")
        conn.rollback()
        return False
    finally:
        cursor.close()
        conn.close()

内容的提问来源于stack exchange,提问作者MV Aravinda Naik Puttur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:45:32