2013-06-06 2 views
0

SQLiteStatement 클래스의 executeInsert에 대한 설명서에서 다음과 같이 말합니다.어떤 경우 sqlite executeInsert가 -1을 반환합니까?

@return 삽입이 성공하면 삽입 된 마지막 행의 행 ID입니다. 그렇지 않으면 -1.

그러나 쿼리가 실패하면 예외를 캐스팅 할 수 있으므로 어떤 경우에 예외를 throw하는 대신 -1을 반환 할 것인지 결정합니다.

+0

내가 잘못하지 않은 경우 반환 값이 항상 제공되고 예외가 연결에 설정됩니다. 따라서 반환 값을 확인하고 예외를 직접 검색해야합니다. – ThaMe90

+0

제목이'pgsql '을 언급하는 이유는 무엇입니까? –

+0

그건 실수 였어. 그것 sqlite – MTilsted

답변

0

유효한 SQL이지만 실제로 레코드를 삽입하지 않는 INSERT 문을 사용할 수 있습니다. INSERT ... SELECT form을 사용할 때 SELECT 쿼리는 실제로 레코드를 반환하지 않을 수 있습니다.

+0

아하, 그 생각하지 않았다. – MTilsted

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; 

을 자바에서

SQLiteStatement insert = db.compileStatement("insert into Magic(_id, name) values(?, ?);"); 
// bind and stuff 
long rowid = insert.executeInsert(); 

재미있는 것은 우리의 ID를 얻기 위해 SELECT에 필요가 무엇인지 방금 삽입 했으므로 왕복 절약이 빠르게 반전되지만 필요한 경우 사용할 수 있습니다.

관련 문제