Com o banco de dados inicializado, vamos garantir que possamos armazenar dados lá.
Então, de volta ao banco de dados. js na pasta helpers, podemos adicionar uma nova constante, inserir local,
por exemplo, que
exporto e agora aqui quero obter o título do local, quero obter o imageUri, quero obter o endereço e
também um latitude e longitude, por isso quero obter todos os dados que compõem um local e,
agora, quero inserir o local no banco de dados. Para isso, usaremos a mesma sintaxe aqui, para
que eu possa copiar isso porque também quero ter uma promessa como invólucro aqui, para que eu
possa usá-lo convenientemente e capturar ou assíncrona aguardar no local onde chamo de inserir local mas
é claro que a consulta que executo agora é diferente.
Em vez de criar uma tabela, agora quero inserir
dados na tabela e isso é feito com o comando insert into.
Agora você precisa especificar a tabela e seus locais e, entre parênteses, os campos que você deseja segmentar lá
e, é
claro, eu quero segmentar todos os campos, exceto o ID, porque, como mencionei, será gerada automaticamente, o
que é muito conveniente.
claro, mas quero segmentar meu campo de título e agora você precisa se certificar de corresponder
aos nomes que você configurou para
suas colunas, é preciso corresponder esses nomes aqui agora.
A ordem não precisa ser a mesma, mas a nomeação é importante, então
eu quero segmentar o título, a imageUri, que
também é um nome que eu escolhi lá, certo?
Então imageUri, endereço, latitude e
longitude e agora
precisamos especificar quais valores devem ser inseridos lá.
Você faz isso adicionando a palavra-chave values aqui após esta lista de colunas que deseja segmentar e
agora tem outro par de parênteses aqui, onde especifica os valores que devem entrar em cada uma
dessas colunas.
Agora, é claro que a ordem dos valores aqui deve corresponder à ordem dos identificadores de
coluna que você possui aqui; portanto, o primeiro valor digitado aqui entrará no título, imageUri é o segundo valor e assim por diante.
Agora, o que você pode fazer aqui é que você pode usar, obviamente, ticks de volta em
vez de aspas simples e, por exemplo, injetar título aqui e, em seguida, ter uma vírgula e, em seguida, imageUri e assim por diante.
Você poderia fazer isso e funcionaria, mas isso
não seria bom,
isso é inseguro, abre uma porta para um padrão de ataque chamado injeção SQL, onde os usuários poderiam inserir código malicioso e
executar outras consultas que poderiam quebrar o banco de dados.
É claro que neste aplicativo, onde é um banco de dados local, apenas no dispositivo deste usuário,
que pode não ser muito ruim, mas ainda queremos nos defender contra isso e, portanto, aqui, você realmente usa alguns espaços
reservados, adiciona pontos de interrogação aqui e precisa para adicionar quantos pontos de interrogação forem necessários para inserir valores.
Então, aqui estou inserindo cinco valores, portanto, aqui tenho cinco pontos de interrogação separados por vírgulas.
Agora, os valores concretos para os pontos de interrogação são fornecidos no segundo argumento que você passa para
executar o SQL, essa matriz de argumentos. Antes ele estava vazio, agora
preenchemos os argumentos na ordem em que precisamos deles,
portanto, primeiro o título, depois imageUri e assim por diante, e o pacote SQL trocará esses pontos de interrogação
por nossos valores, mas não antes de validá-los para garantir que tal ataque de injeção não pode acontecer.
Então, obtemos uma validação automática extra usando essa abordagem e, em seguida, podemos inserir o título
aqui; o segundo dado é o imageUri; precisamos
do endereço;
depois, a latitude e a longitude; é
assim que agora passamos nossos dados para essa consulta. Agora, nessas funções de sucesso, como mencionei, o primeiro
argumento sempre é como a repetição da sua consulta, mas o segundo argumento é
o erro ou aqui o resultado dessa consulta e aqui
eu quero resolver esse resultado para que, no local em que chamamos de insert place, na
verdade podemos ouvir a resolução da promessa e obter o resultado dessa consulta, que deve conter algumas
informações sobre o registro que foi criado.
Portanto, agora podemos chamar insert place e, é claro, o local em que desejo chamá-lo novamente é o arquivo de ações
do place.
Lá movemos a imagem, agora eu também
quero chegar ao meu banco de dados e adicionar uma entrada. Para fazer isso aqui antes de tudo,
vamos importar esse método insert place da pasta helpers e lá, do arquivo db e com o importado, no local após a solução de nosso
sistema de arquivos e assim por diante, aqui é claro que
também no bloco try catch, tente inserir dados no banco de dados.
Isso também pode
falhar, portanto, tê-lo em um bloco try não é a pior idéia.
Então, aqui eu posso chamar insert place e isso retorna uma promessa, porque temos nossa própria promessa lá, para que
possamos aguardar isso e
eu receba meu resultado do banco de dados posteriormente, então eu vou armazenar isso em um local
constante e agora inserir naturalmente precisa de um título, uma imageUri, um endereço, uma latitude e longitude.
Agora, portanto, encaminharei meu título que já
tenho, encaminharei o novo caminho que é minha imageUri e agora para endereço, usarei um endereço fictício porque ainda não temos
um endereço real. Para latitude, usarei
um número fictício de 15. 6 e para longitude, digamos 12. 3)
Agora, isso pode estar no meio do oceano, não sei,
mas pelo menos temos algumas coordenadas aqui que podemos usar por enquanto até conseguirmos um local real.
Agora, é claro que este resultado do banco de dados é interessante; portanto, vamos registrá-lo no console e, também, a propósito, certifique-se de
que apenas despacharemos essa ação e, portanto, tocaremos em nosso repositório Redux se tivermos sucesso com a ação do sistema
de arquivos e do banco de dados, portanto,
dentro do diretório tente bloquear e agora, vamos dar uma olhada nisso. Agora devemos poder armazenar dados no banco
de dados,
então vamos testar isso no Android, onde podemos tirar uma
imagem, isso é um teste.
Vamos fazer uma imagem aqui e ver se tudo isso funciona agora cortando essa imagem e salvando este lugar.
Isso funciona e
aqui vemos algumas saídas, vemos o resultado de nossa ação no banco de dados e vemos
que uma linha foi afetada porque uma linha foi inserida e também recebemos de volta o ID
que foi criado automaticamente.
É um ID numérico aqui, mas obviamente não há problema,
então agora também podemos usar esse ID em nosso redutor, em vez de criar manualmente esse ID de instantâneo
de estado aqui.
Portanto, é uma pequena melhoria: quando
despachamos nossa ação aqui nos dados do local, agora também quero fornecer o ID e esse ID pode ser buscado a partir
da constante do resultado do banco de dados e lá, está no campo Inserir ID aqui, como você
pode ver , então vamos acessar inserir ID aqui. Agora no redutor, portanto, não precisamos mais gerá-lo dessa maneira; aqui, podemos
simplesmente nos referir à ação. placeData. Eu iria.
Agora, lembre-se de que existe um número. Aqui, na verdade, eu quero ter uma sequência,
embora você também possa manter um número, mas eu a converterei em uma sequência aqui e, com isso, agora também estamos
usando esse ID, estamos armazenando no banco de dados. É claro que agora seria bom carregar todos os nossos dados sempre que
o aplicativo reiniciar, porque no momento em que reinicia, os dados ainda
estão perdidos, não estão realmente perdidos, não são um
banco de dados, mas não os vemos aqui porque não carregue isso em nossa loja Redux, que obviamente são os dados que
usamos no aplicativo em execução.
Portanto, precisamos garantir que carregamos os dados na loja Redux quando esse aplicativo for iniciado.