如何获取导致 SQLiteConstraintException 的约束的名称。
在异常上调用 toString() 只会给我:“错误代码 19:约束失败”
并且异常中没有方法可以得到原因。这使得调试我的 sql 变得相当困难。
从版本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;