SQLite
 sql >> Base de Dados >  >> RDS >> SQLite

Lendo um banco de dados da pasta de ativos


Para utilizar um banco de dados empacotado (ou seja, um incluído como um ativo) para uso completo, o banco de dados deve ser descompactado (automático) e copiado para um local adequado (na maioria das vezes data/data//databases/ onde e será de acordo com o nome do pacote do aplicativo e o nome do banco de dados, respectivamente).

Para "empacotar" o banco de dados deve ser incluído na pasta de ativos e preferencialmente em uma pasta de bancos de dados (necessário se estiver usando SQLiteAssetHelper sem modificação ).

Além disso, a cópia deve ser feita antes de realmente abrir o banco de dados, após o que ele pode ser aberto.

Utilizando SQLiteAssetHelper


  1. O primeiro passo é criar o banco de dados a ser empacotado, isso não será abordado, pois existem inúmeras ferramentas disponíveis. Para este exemplo, o banco de dados é um arquivo chamado test.db

  2. Você deve então criar seu projeto neste caso o Projeto foi chamado DBtest com um Compnay Domian como com.DBtest então o nome do pacote é dbtest.com.dbtest .

  3. A próxima etapa é copiar o banco de dados para a pasta de ativos.
    1. Criando os recursos pasta no src/main pasta, se ainda não existir.
    2. Criando a pasta bancos de dados"" nos **ativos pasta, se ainda não existir.

    3. Copiando o arquivo de banco de dados (test.db neste exemplo) na pasta do banco de dados.

  4. A próxima etapa é configurar o projeto para utilizar o SQLiteAssetHelper incluindo-o no build.gradle do aplicativo .
    1. Edite o build.gradle no Aplicativo pasta.
    2. Adicione a linha implementation 'com.readystatesoftware.sqliteasset:sqliteassethelper:2.0.1' dentro da seção de dependências.
    3. Clique em Sincronizar agora



  1. Crie uma classe que seja uma subclasse da classe SQLiteAssethelper recentemente/agora disponível. Para este exercício, ele será chamado de DBHelper .
    1. Clique com o botão direito do mouse na Atividade Principal java, selecione Novo e depois Classe Java.
    2. No campo Nome, insira DBHelper .
    3. No campo SuperClass comece a digitar SQLiteAsset (agora a classe SQliteAssetHelper será selecionável), então selecione-a. Deve resolver ser:-
    4. Clique em OK.

  2. Crie o construtor para a classe DBHelper ao longo das linhas de

:-
public class DBHelper extends SQLiteAssetHelper {

    public static final String DBNAME = "test.db"; //<<<< must be same as file name
    public static final int DBVERSION = 1;

    public DBHelper(Context context) {
        super(context,DBNAME,null,DBVERSION);
    }
}

  1. Crie uma instância do DBHelper e acesse o banco de dados.
    1. Observação para facilitar, outra classe chamada CommonSQLiteUtilities , conforme copiado de Existem métodos que ajudam a resolver problemas comuns do SQLite?

    2. Crie uma instância da cclass DBHelper usando algo como
      • DBHelper mDBHlpr =new DBHelper(this);

    3. usando o CommonSQLiteUtilities o banco de dados foi acessado usando:-
      • CommonSQLiteUtilities.logDatabaseInfo(mDBHlpr.getWritableDatabase());

    4. A MainActivity na íntegra tornou-se

:-
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        DBHelper mDBHlpr = new DBHelper(this);
        CommonSQLiteUtilities.logDatabaseInfo(mDBHlpr.getWritableDatabase());
    }
}

O resultado foi um log de execução bem-sucedido:-
04-11 06:12:55.091 1401-1401/dbtest.com.dbtest W/SQLiteAssetHelper: copying database from assets...
    database copy complete
04-11 06:12:55.123 1401-1401/dbtest.com.dbtest I/SQLiteAssetHelper: successfully opened database test.db
04-11 06:12:55.127 1401-1401/dbtest.com.dbtest D/SQLITE_CSU: DatabaseList Row 1 Name=main File=/data/data/dbtest.com.dbtest/databases/test.db
    Database Version = 1
    Table Name = mytable Created Using = CREATE TABLE mytable (
        _id INTEGER PRIAMRY KEY, 
        mydata TEXT, 
        inserted INTEGER DEFAULT CURRENT_TIMESTAMP
    )
    Table = mytable ColumnName = _id ColumnType = INTEGER PRIAMRY KEY Default Value = null PRIMARY KEY SEQUENCE = 0
    Table = mytable ColumnName = mydata ColumnType = TEXT Default Value = null PRIMARY KEY SEQUENCE = 0
    Table = mytable ColumnName = inserted ColumnType = INTEGER Default Value = CURRENT_TIMESTAMP PRIMARY KEY SEQUENCE = 0
    Table Name = android_metadata Created Using = CREATE TABLE android_metadata (locale TEXT)
    Table = android_metadata ColumnName = locale ColumnType = TEXT Default Value = null PRIMARY KEY SEQUENCE = 0
  • As duas primeiras linhas são de SQliteAssethelper , o restante é do logDatabaseInfo método do CommonSQLiteUtilities aula.
  • Em execuções subsequentes, o banco de dados não será copiado, pois já existe.