Entwicklungshandbuch

Local Navigation

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.

Anmerkung: Fehler aufgrund von Speichermangel können immer noch auftreten, wenn Sie die Statement.bind-Methoden verwenden, die mit Byte-Arrays arbeiten, oder wenn Sie ein BLOB direkt als Teil einer SQL-Anweisung festlegen.

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();
Nächstes Thema: Abrufen von Tabellendaten
Vorheriges Thema: Verwenden von Pragmas

Waren diese Informationen hilfreich? Senden Sie uns Ihren Kommentar.