Arbeiten mit BLOBs
Sie können in Ihre SQLite-Datenbank große binäre Objekte einschließen. Bei jedem Objekt über 1 MB müssen Sie InputStream- und OutputStream-Objekte verwenden, um das BLOB zu lesen und zu schreiben. Bei diesem Verfahren wird das Problem der Speicherung des gesamten BLOB im Speicher vermieden. Wenn Sie keinen Eingabestrom und keinen Ausgabenstrom verwenden, begrenzt die Größe des verfügbaren dynamischen Speichers die BLOB-Größe, die Sie verwenden können.
Um Daten in ein BLOB zu schreiben, erstellen Sie ein OutputStream-Objekt mit der Database.createBlobOutputStream-Methode.
Um Daten aus einem BLOB zu lesen, erstellen Sie ein InputStream-Objekt mit der Database.createBlobInputStream-Methode.
Sie können mithilfe der Statement.bindZeroBlob-Methode Speicherplatz für die BLOB-Ausgabe reservieren. Diese Methode bindet eine Reihe von Null-Bytes an einen Parameter in einem Statement.
Sie sollten BLOBs stets explizit schließen, damit sie nicht den gesamten Speicher belegen, bevor die Datenbank geschlossen wird.
Der folgende Beispielcode schreibt ein BLOB in eine Tabelle und liest das BLOB anschließend aus der Tabelle.
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();
Waren diese Informationen hilfreich? Senden Sie uns Ihren Kommentar.