SQLiteStatement类中的executeInsert文档说:
@return插入的最后一行的行ID,如果此插入成功。否则为-1。
但是如果查询失败,它也可以抛出异常,那么在什么情况下它会选择返回-1而不是抛出异常?
答案 0 :(得分:0)
可能有INSERT
语句是有效的SQL但实际上并不插入任何记录。
使用INSERT ... SELECT form时,SELECT
查询可能实际上不会返回任何记录。
答案 1 :(得分:0)
如果插入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,因此快速反转了往返节省,但在必要时会有用。