Guía de desarrollo

Local Navigation

Trabajo con BLOB

Puede incluir objetos binarios de gran tamaño en su base de datos SQLite. Para cualquier objeto de más 1 MB, debe utilizar objetos InputStream y OutputStream para leer y escribir el BLOB. Esta técnica evita el problema de tener que almacenar el BLOB entero en la memoria. Si no utiliza una corriente de entrada y de salida, la cantidad de memoria dinámica disponible limita el tamaño de BLOB que puede utilizar.

Para escribir datos en un BLOB, cree un objeto OutputStream mediante el método Database.createBlobOutputStream.

Para leer los datos de un BLOB, cree un objeto InputStream mediante el método Database.createBlobInputStream.

Puede reservar el espacio para la salida de BLOB mediante el método Statement.bindZeroBlob. Este método vincula una serie de bytes nulos a un parámetro en una Instrucción.

Debe finalizar explícitamente los BLOB para impedir que agoten la memoria antes de cerrar la base de datos.

Nota: Se pueden seguir produciendo errores debidos a la falta de memoria si utiliza los métodos Statement.bind que funcionan con matrices de bytes o si especifica directamente un BLOB como parte de una instrucción SQL.

El código de ejemplo siguiente escribe un BLOB en una tabla y después lee el BLOB de la tabla.

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();
Tema anterior: Uso de pragmas

¿Le ha resultado útil esta información? Envíenos sus comentarios.