在哪种情况下sqlite executeInsert会返回-1?

时间:2013-06-06 10:28:16

标签: android sqlite

SQLiteStatement类中的executeInsert文档说:

@return插入的最后一行的行ID,如果此插入成功。否则为-1。

但是如果查询失败,它也可以抛出异常,那么在什么情况下它会选择返回-1而不是抛出异常?

2 个答案:

答案 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,因此快速反转了往返节省,但在必要时会有用。