Guia do desenvolvedor

Local Navigation

Copiar um banco de dados para um local criptografado

Se você copiar um banco de dados SQLite para um local de armazenamento criptografado em um smartphone BlackBerry (eMMC ou cartão MicroSD), o banco de dados pode tornar-se inacessível à API Database. Isso acontece porque o cartão de memória usa um tipo de criptografia diferente desse usado pela API Database.

Para copiar um banco de dados de modo que você possa acessá-lo, você deve usar a API Database para criar um arquivo de banco de dados vazio, truncar o arquivo para zero e então copiar o banco de dados no arquivo.

A seguinte amostra de código demonstra esta técnica.

// 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());
    }
}    

Estas informações foram úteis? Gostaríamos de receber seus comentários.