Guide de développement

Local Navigation

Copie d'une base de données vers un emplacement crypté

Si vous copiez une base de données SQLite vers un emplacement de stockage crypté sur un smartphone BlackBerry (carte eMMC ou microSD), l'API de base de données risque de ne plus pouvoir y accéder. Cela se produit car la carte multimédia utilise un type de cryptage différent de celui utilisé par l'API de base de données.

Pour copier une base de données sans compromettre l'accès à celle-ci, utilisez l'API de base de données pour créer un fichier de base de données vide, tronquez le fichier à zéro, puis copiez la base de données dans le fichier.

L'échantillon de code suivant démontre cette technique.

// Copy a database to an encrypted storage location. 
private void copyDBRecommendedWay() {
    try { 
        String dbPath = "file:///SDCard/original.db";
        String dbPathCopy = "file:///SDCard/copy.db";             
        Database dbCopy = null;
        try {
            // Delete if there's an existing one.
            DatabaseFactory.delete(URI.create(dbPathCopy));
           // Create the database using the DatabaseFactory class.                
            dbCopy = DatabaseFactory.create(URI.create(dbPathCopy));
        } catch (DatabaseException e) {
           System.out.println( "DatabaseException: error code: " 
                  + e.getErrorCode() + " msg: " + e.getMessage());        
        } finally {
            // Close the database.
            dbCopy.close();            
        }
        // Open a connection to the database file that was created.
        FileConnection outfc = (FileConnection)Connector.open(dbPathCopy);
        // Truncate the file.
        outfc.truncate(0);
        // Write out the downloaded database data to FileConnection.openOutputStream().
        OutputStream os = outfc.openOutputStream();
        FileConnection infc = (FileConnection)Connector.open(dbPath);        
        InputStream is = infc.openInputStream();
        byte[] buf = new byte[1024];
        int len;
        while ((len = is.read(buf)) > 0){
            os.write(buf, 0, len);
        }
        is.close();
        os.close();                     
        // Close the file connection.
        outfc.close();
        System.out.println("Copied " + dbPath + " to " + dbPathCopy);
        // The database can now be reopened with the DatabaseFactory class.
    } catch (Exception e) {
        System.out.println("Exception: " + e.getMessage());
    }
}    

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