0

SQLiteStatement 类中 executeInsert 的文档说:

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

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

4

2 回答 2

0

可能有一个INSERT有效的 SQL 语句,但实际上并没有插入任何记录。使用INSERT ... SELECT 表单时,SELECT查询实际上可能不会返回任何记录。

于 2013-06-06T11:12:00.047 回答
0

如果您插入 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,因此往返节省很快就被反转了,但在必要时会有用处。

于 2016-09-10T14:50:19.660 回答