2012-01-23 19 views
6

Realizzo un wrapper di API SQLite C. E voglio tornare a rowid come tipo intero. Per contrassegnare il caso di errore, ho bisogno di un valore non valido del rowid. Esiste il valore non valido di rowid SQLite? O tutti i valori in interi a 64 bit con segno sono validi per rowid? (perché se lo è, devo scegliere un altro modo per implementare il caso di errore di marcatura)Intervallo valido di rowid SQLite?

+0

Ecco le specifiche su rowid: http://www.sqlite.org/autoinc.html – Eonil

risposta

13

Gli ID di riga sono numeri interi con segno a 64 bit, quindi il massimo è 0x7FFFFFFFFFFFFFFFFLL. Ma a meno che un ID riga negativo o zero sia stato inserito esplicitamente, gli ID di riga generati automaticamente sono sempre maggiori di zero. Se si è certi che gli ID di riga verranno sempre generati automaticamente, zero o -1 sarebbero valori sicuri per i ritorni di stato degli errori.

Pensando ulteriormente, mi rendo conto che la chiamata API sqlite3_last_insert_rowid restituisce zero se non è mai stato inserito nulla nella tabella, rendendo così zero un ID riga "non valido" di fatto.

+0

Grazie per aver menzionato lo zero esplicito e i valori negativi possono essere inseriti. Andrò qualcosa di altro meccanismo. :) – Eonil

Problemi correlati