Guida allo sviluppo

Local Navigation

Copia di un database in una posizione crittografata

Se si copia un database SQLite in una posizione di memorizzazione crittografata su uno smartphone BlackBerry (scheda eMMC o microSD), il database può diventare inaccessibile all'API Database. Ciò avviene perché la scheda di memoria utilizza un tipo di crittografia diverso da quello utilizzato dall'API Database.

Per copiare un database in modo che risulti accessibile, è necessario utilizzare l'API Database per creare un file del database vuoto, troncare il file su zero, quindi copiare il database nel file.

Nell'esempio di codice seguente, viene mostrata questa procedura.

// 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());
    }
}    
Argomento successivo: Apertura e chiusura dei database

Le informazioni sono state utili? Inviateci i vostri commenti.