Como acessar arquivos de banco de dados SQLite existentes no Android

Fonte do problema : Os bancos de dados SQLite no Android geralmente são autônomos. Quando há muitos dados no banco de dados de um aplicativo, é obviamente uma perda de tempo reconfigurar todos os dados no banco de dados toda vez que você muda a máquina , então a melhor maneira é acessar um banco de dados existente.
Solução :
Solução 1 : A operação no Eclipse é limitada ao uso do simulador.
etapa:

  • Abra a visualização do File Explorer no Eclipse. O File Explorer é usado para visualizar os arquivos do dispositivo. O método de abertura é executar a operação [Window]-[Show View]-[other]-[File Explorer] no Eclipse.
  • Encontre o local do arquivo a ser importado, que é o local padrão do diretório database/data/data/<nome do pacote>/database.
  • Selecione o diretório, clique no ícone do dispositivo [Puxar um arquivo do dispositivo] no canto superior direito e selecione o banco de dados para fazer upload.
    O diagrama é o seguinte:
    Escreva aqui a descrição da imagem

Opção 2 : Coloque o banco de dados no diretório res/raw e copie-o para o diretório /data/data/<package name>/database ao acessar o banco de dados pela primeira vez. Isso é aplicável tanto a simuladores quanto a máquinas reais.
O código copiado é o seguinte:

try {
                String filePath = context.getCacheDir().getAbsolutePath();
                String DATABASE_PATH = filePath.substring(0, filePath.length() - 5)
                        + "databases";
                String DATABASE_FILENAME = "usmartscada.db";
                String databaseFilename = DATABASE_PATH + "/" + DATABASE_FILENAME;
                File dir = new File(DATABASE_PATH);

                if (!dir.exists()) {
                    dir.mkdir();
                }

                if (!(new File(databaseFilename)).exists()) {
                    InputStream is = context.getResources().openRawResource(R.raw.usmartscada);;
                    FileOutputStream fos = new FileOutputStream(databaseFilename);
                    byte[] buffer = new byte[8192];
                    int count = 0;
                    // 开始复制文件
                    while ((count = is.read(buffer)) > 0) {
                        fos.write(buffer, 0, count);
                    }
                    fos.close();
                    is.close();
                }
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

O nome do banco de dados no exemplo de código acima é usmartscada.db. Isso também prova que o banco de dados copiado pode ser lido e gravado normalmente. Não há problema de permissões insuficientes para leitura e gravação. No entanto, existem vários problemas com o acima código. .

  1. Por que os arquivos de banco de dados existentes devem ser colocados na pasta res/raw? Eles podem ser colocados em outro lugar?
    Se colocado na pasta res/raw, o arquivo de banco de dados deve ser determinado e não pode ser alterado quando o apk for empacotado, caso contrário, ele terá que ser recompilado e gerado o apk todas as vezes, o que será muito problemático ao usá-lo, então é melhor colocar o arquivo de banco de dados em algum lugar do cartão SD.

    Após a verificação, sabe-se que o arquivo do banco de dados pode ser colocado em outros locais, como um determinado local no cartão SD. Quanto a onde colocá-lo, depende da situação específica. O código acima é apenas um exemplo. De Claro, ele pode ser colocado em locais diferentes para acessar o arquivo. A forma do tempo também é diferente. Claro, observe que quando quiser acessar o cartão SD, você deve adicionar a permissão para acessar o cartão SD no arquivo AndroidManifest.xml.

  2. O código acima não determina se o arquivo de banco de dados existente existe? Uma é pelo rigor do código e a outra é porque o banco de dados existente pode não ser necessário em uma máquina especial. Você mesmo deseja configurar e gerar o banco de dados. Nesse caso, não há necessidade de copiar o banco de dados anterior.
    Esta questão depende da situação real para determinar se é necessário julgar se o arquivo de banco de dados existente existe. O julgamento depende do local onde o arquivo de banco de dados está colocado. Além disso, se não houver como julgar se o arquivo de banco de dados existe na pasta res/raw, porque o método usado para acessar os arquivos na pasta res/raw é R.raw.xxx. Se o arquivo não existir, não há como obter o objeto do arquivo de banco de dados, então não há não há como julgar. Acrescentarei algum conhecimento sobre os arquivos na pasta res/raw. O caminho absoluto é "android.resource://" + getPackageName() + R.raw.xxx.

Acho que você gosta

Origin blog.csdn.net/li1500742101/article/details/48519841
Recomendado
Clasificación