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
-
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
-
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 .
-
A próxima etapa é copiar o banco de dados para a pasta de ativos.
- Criando os recursos pasta no src/main pasta, se ainda não existir.
- Criando a pasta bancos de dados"" nos **ativos pasta, se ainda não existir.
-
Copiando o arquivo de banco de dados (test.db neste exemplo) na pasta do banco de dados.
-
-
A próxima etapa é configurar o projeto para utilizar o SQLiteAssetHelper incluindo-o no build.gradle do aplicativo .
- Edite o build.gradle no Aplicativo pasta.
- Adicione a linha
implementation 'com.readystatesoftware.sqliteasset:sqliteassethelper:2.0.1'
dentro da seção de dependências.
- Clique em Sincronizar agora
-
Crie uma classe que seja uma subclasse da classe SQLiteAssethelper recentemente/agora disponível. Para este exercício, ele será chamado de DBHelper .
- Clique com o botão direito do mouse na Atividade Principal java, selecione Novo e depois Classe Java.
- No campo Nome, insira DBHelper .
- No campo SuperClass comece a digitar SQLiteAsset (agora a classe SQliteAssetHelper será selecionável), então selecione-a. Deve resolver ser:-
- Clique em OK.
-
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);
}
}
-
Crie uma instância do DBHelper e acesse o banco de dados.
- Observação para facilitar, outra classe chamada CommonSQLiteUtilities , conforme copiado de Existem métodos que ajudam a resolver problemas comuns do SQLite?
-
Crie uma instância da cclass DBHelper usando algo como
DBHelper mDBHlpr =new DBHelper(this);
-
usando o CommonSQLiteUtilities o banco de dados foi acessado usando:-
CommonSQLiteUtilities.logDatabaseInfo(mDBHlpr.getWritableDatabase());
-
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.