1

如何获取导致 SQLiteConstraintException 的约束的名称。

在异常上调用 toString() 只会给我:“错误代码 19:约束失败”

并且异常中没有方法可以得到原因。这使得调试我的 sql 变得相当困难。

4

1 回答 1

2

从版本3.7.17开始,SQLite 在错误消息中显示约束的名称:

sqlite> create table t(x, constraint x_positive check (x>0));
sqlite> insert into t values(-1);
Error: constraint x_positive failed

但是,这个版本在 Android 中出现还需要一段时间。

同时,您可以将约束替换为触发器,该触发器可以使用它喜欢的任何消息:

CREATE TRIGGER check_x_positive
BEFORE INSERT ON t                -- also UPDATE
FOR EACH ROW
WHEN NEW.x <= 0
BEGIN
    SELECT RAISE(ABORT, 'RED ALERT! database on fire because x <= 0');
END;
于 2013-05-30T06:37:27.410 回答