Aplicação e análise de princípio de armazenamento de dados Android e banco de dados Room
1. Comparação de métodos de armazenamento
Atualmente, o Android tem os seguintes quatro métodos comuns de armazenamento de dados:
método de armazenamento | características | cenas a serem usadas |
---|---|---|
Preferências Compartilhadas | 1. Apenas cinco tipos de boolean, int, float, long e String podem ser armazenados. 2. Armazenamento de par chave-valor |
Registre várias informações de configuração do aplicativo |
armazenamento de arquivo | 1. Arquivos em vários formatos podem ser armazenados no telefone. 2. Por padrão, eles não podem ser compartilhados entre aplicativos |
1. Pacote zip baixado da rede 2. Armazenamento de arquivos txt |
Provedor de conteúdo | 1. Os dados podem ser compartilhados entre aplicativos 2. Acesso por meio de objetos uri |
Áudio, vídeo, leitura e escrita de imagens |
SQLite armazena dados | 1. Pode armazenar dados estruturados 2. É mais conveniente adicionar, excluir, modificar e verificar dados |
salvar dados de streaming |
2. Apresentação da sala e casos práticos
Sala
O Room é um membro da família Google Jetpack. O Room fornece uma camada de abstração sobre o SQLite para permitir acesso fluente ao banco de dados enquanto aproveita ao máximo os poderosos recursos do SQLite.
três componentes principais
1. Classe de banco de dados (Database) , que é usada para salvar o banco de dados e servir como o principal ponto de acesso para a conexão subjacente dos dados persistentes do aplicativo.
2. Entidade de dados (Entity) , que é usada para representar uma tabela no banco de dados do aplicativo.
3. Data Access Object (Dao) , que fornece métodos que seu aplicativo pode usar para consultar, atualizar, inserir e excluir dados no banco de dados.
Acesso ao quarto
1. Adicione o seguinte às dependências do arquivo build.gradle no diretório Gradle:
implementation "androidx.room:room-common:2.4.2"
implementation "androidx.room:room-compiler:2.4.3"
2. Projeto de banco de dados , o seguinte pressupõe que uma tabela foi projetada, o nome da tabela é usuário e a tabela de dados contém três campos: uid, first_name e last_name
uid | primeiro nome | sobrenome |
---|---|---|
1 | abrir | certo |
2 | ameixa | certo |
3 | liu | certo |
4 | Obrigado | certo |
3. Crie uma nova entidade : defina uma entidade de dados do usuário, cada instância do usuário representa uma linha da tabela do usuário no banco de dados do aplicativo
@Entity
public class User {
@PrimaryKey(autoGenerate = true)
private Integer id;
@ColumnInfo(name="first_name")
private String firstName;
@ColumnInfo(name="last_name")
private String lastName;
}
Notas:
1. Todas as propriedades devem ser públicas ou ter métodos get e set
2. @PrimaryKey: Indica uma única chave primária, que pode ajudar a gerar valores de chave quando a chave primária é nula e autoGenerate é verdadeiro
3. @ColumInfo: Anotação para nomes de colunas
4. Adicionar DAO : Defina um DAO chamado UserDao. Usado para adicionar, excluir, modificar e consultar a tabela de usuários
@Dao
public interface UserDao {
@Query("select * from user")
List<User> getAll();
@Insert
void insert(User user);
}
5. Crie uma nova classe de banco de dados e configure o banco de dados, e as quatro condições a seguir devem ser atendidas:
1. Adicione uma subclasse abstrata de RoomDatabase.
2. A subclasse precisa adicionar a anotação @Database(entities=[xxx],version=n), as entidades contêm entidades de dados e as tabelas correspondentes serão criadas neste banco de dados, e a versão é o número da versão do banco de dados.
3. Para cada classe DAO associada ao banco de dados, a classe do banco de dados deve definir um método abstrato sem parâmetros e retornar a instância da classe DAO
6. Obtenha o objeto DAO, você pode adicionar, excluir, modificar e verificar o banco de dados
AppDateBase db = Room.databaseBuilder(this, AppDateBase.class, "database-name")
.allowMainThreadQueries()
.build();
UserDao userDao = db.userDao();
/* User user1 = new User(1,"张","某");
User user2 = new User(2,"李","某");
User user3 = new User(3,"刘","某");
User user4 = new User(4,"谢","某");
userDao.insert(user1);
userDao.insert(user2);
userDao.insert(user3);
userDao.insert(user4);*/
List<User> all = userDao.getAll();
for(User user:all){
System.out.println(user);
}
Introdução do princípio
1. Durante o período de compilação, a Room processará as anotações @Dao e @DataBase e gerará a classe de implementação Impl do DAO e do banco de dados.
AppDatabase_Impl : a implementação específica da instância do banco de dados, que é gerada automaticamente, possui principalmente os seguintes métodos
- createOpenHelper(): Quando Room.databaseBuilder().build() cria um Banco de Dados, ele chamará createOpenHelper() da classe de implementação para criar SupportSQliteOpenHelper, que é usado para criar BD e gerenciar versões.
- userDao():创建UserDao_Impl
- UserDao_Impl : principalmente as 3 variáveis de membro a seguir e a interface definida em UserDao
__db:RoomDatabase instance
__insertionAdapterOfUser:EntityInsertionAdapterd instance, usada para inserção de dados
__deletionAdapterOfUser:EntityDeletionOrUpdateAdapter instance, usada para atualização/exclusão de dados
Instruções específicas:
Por exemplo, UserDao_Impl#insertAll() usará primeiro __db para iniciar a transação e, em seguida, usará __insertionAdapterOfUser para executar a operação de inserção.
O conteúdo acima refere-se à análise do princípio Room da biblioteca persistente do Android Room e outros artigos componentes do jetpack
Declaração de direitos autorais: Este artigo é um artigo original do blogueiro CSDN "Curlyhairdog", seguindo o contrato de direitos autorais CC 4.0 BY-SA, anexe o link da fonte original e esta declaração para reimpressão.
Link original: https://blog.csdn.net/m0_53185556/article/details/128168899?spm=1001.2014.3001.5501