Guia do desenvolvedor

Local Navigation

Trabalhar com blobs

Você pode incluir objetos binários grandes em seu banco de dados SQLite. Para qualquer objeto com mais de 1 MB, você deve usar objetos InputStream e OutputStream para ler e gravar o blob. Esta técnica evita o problema de armazenar o blob inteiro na memória. Se você não usa um fluxo de entrada e um fluxo de saída, a quantidade de memória dinâmica disponível limita o tamanho de blob que você pode usar.

Para gravar dados em um blob, crie um OutputStream objeto com o método Database.createBlobOutputStream.

Para ler dados de um blob, crie um InputStream objeto com o método Database.createBlobInputStream.

Você pode reservar espaço para a saída de blob usando o método Statement.bindZeroBlob. Este método une uma série de bytes nulos a um parâmetro em uma instrução.

Você deve sempre fechar blobs explicitamente, de forma que eles não esgotem a memória antes de o banco de dados ser fechado.

Nota: Erros de falta de memória ainda podem ocorrer se você usar os métodos Statement.bind que operam em matrizes de bytes ou se você especificar diretamente um blob como parte de uma instrução SQL.

O código de exemplo a seguir grava um blob em uma tabela e então lê o blob a partir da tabela.

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();
Próximo tópico: Recuperar dados de tabela
Tópico anterior: Usar pragmas

Estas informações foram úteis? Gostaríamos de receber seus comentários.