Um momento
Aula 39
Cursos / Como Criar uma API JSON em Golang - CRUD Simples
Modificação do Método de Buscar um Livro - API de Golang e MySQL

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

  1. Rota para Buscar Livro:

    • A rota será estruturada como /livros/{id}, onde {id} é o identificador do livro que o cliente deseja buscar.
  2. Conversão do ID:

    • O ID do livro obtido da rota deve ser convertido para um tipo inteiro.
  3. Consulta ao Banco de Dados:

    • Para buscar o livro específico, utilizaremos query row, que é mais adequado do que query 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.
  4. Tratamento de Resultados:

    • Se a consulta encontra um registro, utilizamos uma estrutura para armazenar os valores retornados.
    • Definiremos uma estrutura Livro com campos para id, autor, e titulo.
  5. Leitura dos Dados:

    • A leitura dos dados será feita utilizando o método Scan, que preencherá a estrutura Livro com os dados obtidos da consulta.
  6. 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.

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.

Video Transcript

Nesta aula nós vamos aprender a implementar o buscar livro com conexão ao banco de dados. Interiormente nós fizemos o listar de livros que é para o cliente receber todos os livros agora com o buscar livros, buscar livro no singular que é o barra livros, barra, o id do livro. O cliente para receber um livro só. E começa aqui pegando a variável de rota, o livro id, converter para inteiro. Aí faz o loop aqui para poder encontrar o livro nessa fatia de livros aqui. Mas essa parte aqui agora o banco de dados vai fazer para a gente. Então vamos lá. Depois de pegar o id a gente vai fazer uma consulta. E essa consulta vai usar bem. Se a gente usar query, ele vai poder dar mais de um registro como resultado. Então vai dar múltiplos. A gente só está interessado em um só porque a gente tem o id do livro, a gente espera que só tenha um record que corresponde a esse livro ou não tenha se não estiver, não foi encontrado. Então em vez de usar o query, eu vou usar o query row. Se você quiser saber mais sobre isso, na documentação do query row, dv query row, fala aqui que as executas consulta e espera que retorne somente um registro ou linha. Query row sempre retorna o valor que não é a new. O erro é deferir até a chamada de scan. Se não tiver linha correspondente, consulta não achar nada, não corresponde a nada, a scan vai retornar error no rows. Se não retorna a primeira linha que foi encontrada na consulta. Tá bom? Então o query row retorna um ponteiro para row, se esse tipo aqui. Vamos lá. Query row, eu vou dizer aqui select o id, uma mesma coisa que a gente fez antes, o autor e o título, from, livros, é o nome da tabela. Mas agora eu quero dizer, eu quero selecionar um id, então a gente vai optar o where. O id é igual a alguma coisa, essa alguma coisa vou usar sinal de interrogação, tá? E o esse id vai vir do livre id aqui. Note que eu uso sinal de interrogação aqui, eu quero evitar erro de injeção de sqf. E depois aqui que você põe vírgula, tá? O segundo argumento para o query row, você passa o id e vem dessa variável aqui que é o inteiro. Esse cara vai retornar erro de, vou dizer query row, dois pontos igual e você vai checar o where, se existe, se eu query row, não for nele, fazer alguma coisa. Você pode até fazer esse negócio aqui, se quiser, acho que é muito, eles gostam de usar isso assim, mas eu vou deixar assim mesmo. Se der where, der where e tal, query, aí também tem, ah, detalhe, na verdade não é where, né? Eu já acabei de ler que o where é deferido até o sqf, se não vai ser, olhando de novo aqui, retorna o ponteiro para row, então eu estava errado, tá? Se errar vai ser só depois na hora do sqf, tá? Então eu vou tirar sqf. Na verdade, esse aqui vai ser o, se der certo, vai ser o registro, né? Resultado. Desculpa por isso, o where vai ser depois na hora do sqf. Então vamos lá, registro essa query aqui com id, agora que a gente vai fazer o sqf, né? Agora que a gente vai fazer o sqf, então registro pontos sqf, agora vai escolhar o que? A mesma coisa que a gente fez anteriormente, você vai ter que ter um objeto para poder armazenar os valores. Então vamos criar aqui, objeto não, tipo, né? Estrutura, no caso do golanto, outras linguagens de objeto, vai. Vamos lá, vamos criar aqui um estrutura-livro, tipo livro, tá? Então var, dizer livro, o tipo é estrutura-livro que a gente já tem definida. Aí a gente vai ler para esse livro, tá? Primeiro corresponde ao primeiro coluna lá do select, o endereço que é apontado para o livro.id, segundo é o autor, livro.autor, terceira o título. Então, reference-livro.tit. Agora que vai ter o erro, né? Se lembra que ele falou que o erro na hora do scan, para confirmar aqui, vai clicar no roll, tem esse tipo roll e tem um scan aqui, esse método lá no estrutura roll, ele retorna realmente o erro. Voltando aqui ao auditor de textas, a erro de scan. Se o erro scan não for nele, abre no log, vamos ver, será que tem um log para tal? Pode ser que não tenha achado, né? E se não é, na verdade, não é o erro de sintaxiou essas coisas, é um erro, para dizer que é 404, o código para o cliente, não foi encontrado em ser registro. Então, vamos dar um olhado na mensagem, dar um log fatal, mas não é fatal não, vou dar só para frente, ela é nele, na verdade. Busca livro, dois pontos, erro scan, e vou concatenar com o erro scan, começar a um tipo erro, eu vou botar, ele tem o método error, para obter a descrição. Vamos ver aqui no que dá. Eu vou deixar como está aqui, mas eu quero só ver se ele vai fazer a query certinho. Vamos lá.
Nenhum comentário ainda (loading...)
Nenhum comentário ainda (loading...)
Gostou da aula? 😆👍
Apoie nosso trabalho com uma doação: