2012-12-12 9 views
5

Ho una domanda sui tipi di dati in sqlite3.byte di valore SQLITE_INTEGER

Come valore di SQLITE_INTEGER può essere memorizzato in 1, 2, 3, 4, 6, o 8 byte a seconda della grandezza del valore, se so solo che una colonna SQLite database memorizza SQLITE_INTEGER, come posso sapere che un valore in questa colonna è di 4 byte o 6-8 byte interi o quale dovrebbe essere usato per ottenere il valore, sqlite3_column_int() o sqlite3_column_int64()?

Posso usare sqlite3_column_bytes() in questo caso? ma secondo la documentazione, sqlite3_column_bytes() viene utilizzato principalmente per TEXT o BLOB.

Grazie!

risposta

1

Quando SQLite entra in un record, tutti i valori interi vengono espansi a 64 bit.
sqlite3_column_int() restituisce i 32 bit inferiori di quel valore senza verificare gli overflow.

Quando si chiama sqlite3_column_bytes(), SQLite convertirà il valore in testo e restituirà il numero di caratteri.

Non si può sapere quanto è grande un valore intero prima di leggerlo. Successivamente, è possibile controllare l'elenco nello record format documentation per il formato più piccolo possibile per quel valore, ma se si vuole essere sicuri che i valori interi non vengano mai troncati a 32 bit, è necessario sempre utilizzare sqlite3_column_int64() oppure assicurarsi che I valori non vengono mai scritti nel DB in primo luogo (se possibile).

+0

Grazie! Quindi suppongo di dover prima ottenere il valore da sqlite3_column_int64() e poi troncarlo a 32 bit se è nell'intervallo di un valore a 32 bit. Qualche altro metodo? – Lewis

Problemi correlati