Guide de développement

Local Navigation

Utilisation de blobs (objets binaires de grande taille)

Vous pouvez inclure objets binaires de grande taille dans votre base de données SQLite. Pour n'importe quel objet supérieur à 1 Mo, vous devez utiliser des objets InputStream et OutputStream pour lire le blob et y écrire. Cette technique contourne le problème posé par le stockage du blob entier en mémoire. Si vous n'utilisez pas un flux d'entrée et un flux de sortie, la quantité de mémoire dynamique disponible limite la taille de blob que vous pouvez utiliser.

Pour écrire des données dans un blob, créez un objet OutputStream avec la méthode Database.createBlobOutputStream.

Pour lire les données d'un blob, créez un objet InputStream avec la méthode Database.createBlobInputStream.

Vous pouvez réserver de l'espace pour la sortie du blob à l'aide de la méthode Statement.bindZeroBlob. Cette méthode lie une série d'octets nuls à un paramètre dans un objet Statement.

Vous devez toujours fermer explicitement les blobs s'ils n'épuisent pas la mémoire avant la fermeture de la base de données.

Remarque : Des erreurs de manque de mémoire peuvent toujours avoir lieu si vous utilisez les méthodes Statement.bind qui opèrent sur des tableaux d'octets ou si vous spécifiez directement un blob dans une instruction SQL.

L'échantillon de code suivant écrit un blob dans une table puis lit le blob à partir de cette table.

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();
Sujet précédent: Utilisation de pragmas

Ces informations vous ont-elles été utiles ? Envoyez-nous vos commentaires.