SQLiteStatement 类中 executeInsert 的文档说:
@return 如果此插入成功,则插入最后一行的行 ID。-1 否则。
但是如果查询失败它也可以抛出异常,那么在什么情况下它会选择返回-1而不是抛出异常呢?
可能有一个INSERT
有效的 SQL 语句,但实际上并没有插入任何记录。使用INSERT ... SELECT 表单时,SELECT
查询实际上可能不会返回任何记录。
如果您插入 a VIEW
,它将返回 -1,例如:
CREATE VIEW Magic AS select * from Something;
CREATE TRIGGER Magic_Insert
INSTEAD OF INSERT ON Magic
BEGIN
insert into Something_Else values (new._id, NULL)
-- create another something that has the same ID, but without a roundtrip back to Java
insert into Something_Connected values (last_insert_rowid(), new.name)
END;
并来自Java
SQLiteStatement insert = db.compileStatement("insert into Magic(_id, name) values(?, ?);");
// bind and stuff
long rowid = insert.executeInsert();
有趣的是,我们需要SELECT
获取刚刚插入的内容的 id,因此往返节省很快就被反转了,但在必要时会有用处。