Guida allo sviluppo

Local Navigation

Utilizzo dei BLOB

È possibile includere oggetti binari di grandi dimensioni nel database SQLite in uso. Per qualunque oggetto di dimensioni superiori a 1 MB, è necessario utilizzare gli oggetti InputStream e OutputStream per la lettura e la scrittura del BLOB. Questa tecnica evita il problema della memorizzazione dell'intero BLOB nella memoria. Se non si utilizza un flusso di flusso di input e uno di output, la quantità di memoria dinamica disponibile limita le dimensioni del BLOB che è possibile utilizzare.

Per scrivere i dati in un BLOB, creare un oggetto OutputStream tramite il metodo Database.createBlobOutputStream.

Per leggere i dati in un BLOB, creare un oggetto InputStream tramite il metodo Database.createBlobInputStream.

È possibile riservare spazio per l'output del BLOB tramite il metodo Statement.bindZeroBlob. Questo metodo consente di associare una serie di byte nulli a un parametro in un'istruzione.

È necessario chiudere sempre esplicitamente i BLOB, in modo che non esauriscano la memoria prima della chiusura del database.

Nota: Tuttavia, possono verificarsi errori esterni alla memoria se si utilizzano i metodi Statement.bind che vengono utilizzati sugli array di byte o se si specifica direttamente un BLOB come parte di un'istruzione SQL.

Nell'esempio di codice seguente, viene scritto un BLOB su una tabella e poi viene letto il BLOB dalla tabella.

Database d = DatabaseFactory.openOrCreate("hello.db");
d.executeStatement( "CREATE TABLE IF NOT EXISTS t (a INTEGER PRIMARY KEY, b BLOB);" );
d.executeStatement( "INSERT INTO t(b) VALUES( ZEROBLOB( 1024 ) );" );
java.io.OutputStream outputStream = 
    d.createBlobOutputStream( "t", "b", d.lastInsertedRowID( ) );
for( int i = 0; i < 1024; ++i ) 
{
    outputStream.write( i % 128 );
}
outputStream.close( );
java.io.InputStream inputStream = 
    d.createBlobInputStream( "t", "b", d.lastInsertedRowID( ) );
for( int i = 0; i < 1024; ++i ) {
    if( i % 128 != inputStream.read( ) ) 
    {
        fail( "write and read mismatch" );
    }
}
inputStream.close( );
d.close();
Argomento successivo: Recupero dei dati della tabella
Argomento precedente: Uso dei pragma

Le informazioni sono state utili? Inviateci i vostri commenti.