Aula 46
Como Inserir Registro no MySQL com API de Golang
Continuamos a implementação da função de cadastrarLivro
para fazer o registro no banco de dados.
Usamos a função db.Exec
para cadastrar o livro:
db.Exec("INSERT INTO livros (autor, titulo) VALUES (?, ?)", novoLivro.Autor, novoLivro.Titulo)
Summary
## Resumo da Aula de Golang: Implementação de Cadastro de Livros
Na aula de hoje, continuamos a implementação do cadastro de livros em Golang, focando na inserção de dados no banco de dados após validar os campos de entrada.
### Passos abordados:
1. **Validação dos Campos**:
- Antes de inserir um novo registro, os campos devem ser validados.
2. **Inserção no Banco de Dados**:
- Utilizamos o método `db.Exec` para executar um comando SQL `INSERT INTO`.
- A sintaxe básica:
```sql
INSERT INTO livros (autor, título) VALUES (?, ?)
```
- Usamos interrogações para prevenir injeção de SQL.
3. **Tratamento de Erros**:
- Se ocorrer um erro durante a inserção, verificamos se o erro se refere a um registro duplicado ou um problema no servidor.
- Códigos de status HTTP apropriados são definidos, como `500 Internal Server Error` ou `400 Bad Request`.
4. **Captura do ID do Novo Registro**:
- Para obter o ID gerado pelo banco de dados após a inserção, usamos `LastInsertId()`.
- O ID gerado é atribuído ao objeto do novo livro que está na memória.
5. **Atualização do Objeto Novo Livro**:
- Após obter o ID, atualizamos o objeto `novoLivro` com o ID gerado para retorno.
6. **Resposta ao Cliente**:
- Retornamos um status `201 Created` junto com o objeto do novo livro em formato JSON.
### Observações Finais:
- O código lida com a possibilidade de títulos ou autores duplicados, dependendo da lógica de negócio.
- O professor também mencionou a importância de se adaptar os códigos de erro e implementação conforme necessário.
## Encerramento
A aula se encerrou com a execução de testes e verificação de sucesso na inserção. O próximo passo será abordar novas funcionalidades e melhorias na aplicação.
Video Transcript
Estamos de volta, vamos continuar a nossa aula de Golang. Vamos aqui continuar a implementação
do cadastro alívio. Então vamos lá, depois da validação vamos fazer a inserção no banco de dados.
Então validamos os campos, tudo certo, é hora de inserir um novo recorde no banco de dados.
Então vamos lá, dá o db, exec, vamos usar esse método. Então vamos dar o que? o insert into,
insert into qual é o nome da tabela, livros. Aí temos as colunas, coluna nesse caso vai ser
autor, vírgula título, valios, parênteses, eu vou usar interrogação, vírgula interrogação
para prevenir a injeção de SQL, problema de segurança, não queremos isso. Então os valores
serão do novo livro ponto autor, que é o primeiro aqui, corresponde ao primeiro, e o segundo será o título.
Novo livro ponto título. Então vamos dar esse exacto, tem o resultado, não quero saber, botar o
novo livro erro de insert, responde-se igual. Então se tiver o insert, se eu de insert existir,
estou lá, não for new, não igual a new. Então palhou ao inserir o recorde, poderia ser que ele, se você
diga-se a restrição de recorde duplicado, por exemplo, o erro aconteceria aqui. Então isso não
seria erro do servidor, mas seria um erro lá que cliente está a adicionar um recorde que já existe.
Qual será um bom código de HTTP? Deixa eu ver aqui os códigos que tem. Lembra, bad request,
what bad request, forbidden, outbound, gone.
Bem, o que é genética ou o internal server error, né? Deu alguma coisa, problema no servidor.
Então eu deixei com, se você quiser comentar qual que é o e você quiser botar só 500 mesmo,
ou ver aqui, W write header, HTTP com status, internal server error, return, então vai inserir.
Se tiver erro de insert, mando 500, mas eu deixo aí, você, deixe você aberto para você achar a melhor solução
para a sua API, qual o erro que você quer, mande, e com isso não precisa mais dessa parte aqui,
porque já vai estar inserindo no banco de dados. Depois disso, ele vai dar a codificar e mandar com
a resposta, vamos ver. E lá em cima, lembra que tinha aquele status creator também,
vamos pegar isso, vou recortar, e aqui embaixo eu vou botar status creator antes de mandar a resposta.
Vamos lá, postman, já tenho aqui título autor, sen, parecia isso aqui, mais o id está a zero,
isso a gente tem que consertar, mas vamos ver no MySQL aqui, select, asterisk, tron, livros,
então está aqui com id 8, vamos consertar o id, voltando aqui no código, insert into livros,
agora que a gente vai provavelmente usar o result, resultado, deixa eu dar aqui o fmt printlm,
o resultado, porque eu acho que tem algo, eu vi na documentação nós vimos anteriormente que tem o id,
eu acho, deixa eu só confirmar, post de novo e vou lá no terminal ver aquele printlm.
A gente está além, tá? Ah, deu o standard out, não sei o que, mas não mostrou, né?
Albalo, deixa eu olhar aqui na documentação, isso vai ser, pd,
eu tenho que voltar para o package, tata base sql, pd, vai ser, exact,
resultado, valor retornado, last insert id, vamos ver, ponto last insert id, vou chamar esse método,
vamos lá de novo no postmen, voltando no terminal, 10, será 10, ver aqui,
não é aqui, é no mysql, é 10 mesmo, então é aquela função, mas eu acho que deu duas coisas no log,
tem a segunda coisa que é new, será que é, que será, né? Vamos ver, ah, está aqui,
retorno int 64 e o e, opa, retorno, last insert id, retorno inteiro, gerado pelo banco de dados,
o export do comando, tipicamente vai ser de uma coluna de autoincremente, que é a nossa chave primária,
quando inserir um nova, a e-code, nem toda a banco de dados suporta essa feature, essa funcionalidade,
então vamos ver aqui, last insert id, last insert id,
voltando o editor de texto, o resultado, last insert id,
então a gente vai chamar o last insert id, isso vai pegar o id, gerado, vícula, erro,
last insert id, dois pontos igual, isso aqui, eu posso adicionar aqui também, vou colocar esse
id, erro de last insert id, vou colocar aqui também, o cd, erro, last insert id, não for new,
não, você pode separar se você quiser, depois disso não vai ter, vai ter o id gerado,
nós temos que atualizar, né, o objeto novo livre ponto id vai ser o id gerado,
esse é o objeto acertornado ao cliente, o banco de dados já está correto,
mas o novo livre aqui não tem o id, vamos lá, tentar novamente, a novid.lib ao id gerado,
id gerado, ainda bem inteiro 64, será que não deu, problema, ah, teve erro aqui na,
terminado, quando eu tinha falado, id 64 é do id gerado, last insert, assignment,
então a gente tem que dar um cast aqui, converter para inteiro, deixa eu ver se funciona dessa
maneira aqui, a sem táxi eu já esqueci um pouco, esse é assim de outra maneira, com
o id chamado, deixa eu ver aqui, id gerado, ainda teve erro, vou ver dessa maneira aqui, ok,
então essa sem táxi, 13 correto, tá, então as sem táxi para meter para a ínteg,
vamos ver um monte aqui, essa maneira, tá, pronto, vamos ver no banco de dados, vou até ver
aqui no get, 7, 8, répondem, são um de 12, 3, 7, acho que não tem check para título
ou auto, título duplicado, bem, obviamente pode ter um livre com o mesmo auto, mas eu não
sei se o seu, sobre biblioteca, o livraria, quer ter o mesmo, livre com o mesmo título,
depende do projeto, mas não tem aqui, por isso que tem a mesma coisa, às vezes tem
livros de edições diferentes e tal, não isso é válido também, ok, vamos ver se tem
status created, no post, 201 created, tá certo, ainda não vamos avisar o que a gente
fez, depois da validação, nós demos o db exact insert, vai inserir o record, pegamos
o resultado e chamamos o last insert id, esse método para obter o id associado ao
novo record, tenta ver se erro aqui, que eu juntei junto com o outro aqui, ou, depois
atualizamos o object novo livre, que tá na memória, com o id gerado, id gerado a
testa 74, então tem qvt para a gente, que é o do novo livre, usando aqui o casting aqui,
e finalmente é tom no status created, com o qualificado de json, tá, então por essa
aula é só e até a próxima.
Nenhum comentário ainda (loading...)
Nenhum comentário ainda (loading...)
Gostou da aula? 😆👍
Apoie nosso trabalho com uma doação: