Nesta aula modificamos a implementação da função de buscarlivro
para obter os dados do banco de dados.
Consultamos uma linha só com a função db.QueryRow
, o primeiro argumento sendo o comando de SQL:
db.QueryRow("SELECT id, autor, titulo FROM livros WHERE id = ?", id)
Depois é só chamar a função Scan
no valor retornado pela função acima: o número de argumentos são variáveis de acordo com o endereço de cada propriedade da struct Livro.
Summary
Resumo da Aula: Implementando a Busca de Livros com Conexão ao Banco de Dados
Nesta aula, aprenderemos a implementar a funcionalidade de buscar um livro específico em um banco de dados, utilizando uma conexão já estabelecida para listar todos os livros.
Estrutura da Implementação
-
Rota para Buscar Livro:
- A rota será estruturada como
/livros/{id}
, onde{id}
é o identificador do livro que o cliente deseja buscar.
- A rota será estruturada como
-
Conversão do ID:
- O ID do livro obtido da rota deve ser convertido para um tipo inteiro.
-
Consulta ao Banco de Dados:
- Para buscar o livro específico, utilizaremos
query row
, que é mais adequado do quequery
quando esperamos apenas um único registro ou nenhum. - A consulta será realizada com um comando SQL do tipo:
SELECT id, autor, titulo FROM livros WHERE id = ?
- O
?
servirá como um placeholder para prevenir erros de injeção de SQL, e o valor será passado como argumento para o método.
- Para buscar o livro específico, utilizaremos
-
Tratamento de Resultados:
- Se a consulta encontra um registro, utilizamos uma estrutura para armazenar os valores retornados.
- Definiremos uma estrutura
Livro
com campos paraid
,autor
, etitulo
.
-
Leitura dos Dados:
- A leitura dos dados será feita utilizando o método
Scan
, que preencherá a estruturaLivro
com os dados obtidos da consulta.
- A leitura dos dados será feita utilizando o método
-
Tratamento de Erros:
- Se ocorrer algum erro durante o
Scan
, será necessário registrar o erro e enviar um código de status 404 (não encontrado) ao cliente. - No log, será exibida uma mensagem com informações sobre o erro que ocorreu.
- Se ocorrer algum erro durante o
Código de Exemplo:
var livro Livro
erro := registro.Scan(&livro.id, &livro.autor, &livro.titulo)
if erro != nil {
log.Println("Erro no scan:", erro.Error())
http.Error(w, "Livro não encontrado", http.StatusNotFound)
return
}
Observações Finais
- A implementação utiliza boas práticas para garantir a segurança e a eficiência ao trabalhar com consultas ao banco de dados.
- É importante testar a funcionalidade para garantir que todas as interações estejam funcionando conforme esperado.
Esse resumo cobre os principais pontos discutidos na aula sobre como buscar um livro específico em um banco de dados.