2
respostas

[Sugestão] Sugestão para Exceção ao inserir dados acima de 255 caracteres

Boa noite

Quando estava fazendo atividade percebi que algumas Series quando buscava esteva dando a seguinte seguinte Exceção

java.lang.IllegalStateException: Failed to execute CommandLineRunner at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:774) ~[spring-boot-3.1.1.jar:3.1.1] at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:755) ~[spring-boot-3.1.1.jar:3.1.1] at org.springframework.boot.SpringApplication.run(SpringApplication.java:319) ~[spring-boot-3.1.1.jar:3.1.1] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306) ~[spring-boot-3.1.1.jar:3.1.1] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1295) ~[spring-boot-3.1.1.jar:3.1.1] at br.com.alura.screenmatch.ScreenmatchApplication.main(ScreenmatchApplication.java:17) ~[classes/:na] Caused by: org.springframework.dao.DataIntegrityViolationException: could not execute statement [ERRO: valor é muito longo para tipo character varying(255)] [insert into series (atores,avaliacao,genero,sinopse,titulo,total_temporadas) values (?,?,?,?,?,?)]; SQL [insert into series (atores,avaliacao,genero,sinopse,titulo,total_temporadas) values (?,?,?,?,?,?)]

isso se dava ao fato que quando os dados eram inseridos em uma das colunas no PSQL ultrapassava os 255 caracteres que por padrão já era definido assim que criávamos a tabela, e problema em si era na coluna sinopse , então para quem está sofrendo com esse problema trago uma possível solução

Modificar Sinopse no construtor na Classe Series

abaixo seria o código como já esta no momento :

 public Serie(DadosSerie dadosSerie){
        this.titulo = dadosSerie.titulo();
        this.totalTemporadas = dadosSerie.totalTemporadas();
        this.avaliacao = OptionalDouble.of(Double.valueOf(dadosSerie.avaliacao())).orElse(0);
        this.genero = Categoria.fromString(dadosSerie.genero().split(",")[0].trim());
        this.atores = dadosSerie.atores();
        **this.sinopse = ConsultaMyMemory.obterTraducao(dadosSerie.sinopse().trim());**
    }

na ultima linha substitua por :

 String sinopseTraduzida = ConsultaMyMemory.obterTraducao(dadosSerie.sinopse().trim());
 this.sinopse = sinopseTraduzida.length() > 255 ? sinopseTraduzida.substring(0, 255) : sinopseTraduzida;

Se o comprimento de sinopseTraduzida for maior que 255, o trecho sinopseTraduzida.substring(0, 255) será executado. Isso significa que apenas os primeiros 255 caracteres serão extraídos da sinopse traduzida. e se o comprimento for menor ou igual a 255, a sinopse será atribuída diretamente sem qualquer modificação.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeInsira aqui a descrição dessa imagem para ajudar na acessibilidadePode ser uma solução provisória para conseguirmos prosseguir com as atividades.

Um exemplo de uma Serie que veio a dar esse problema foi The Big Bang Theory.

2 respostas

Oi, Adriano! Tudo bem?

A sua sugestão para tratar exceções ao inserir dados acima de 255 caracteres está bem interessante. A ideia de truncar a sinopse para garantir que ela não ultrapasse o limite do banco de dados é uma solução prática, obrigada por ter a compartilhado com a nossa comunidade do fórum!

Somado a isso, sempre que surgir alguma dúvida, sinta-se a vontade para usar o fórum para saná-la, a nossa comunidade está aqui para ajudar nesse processo de aprendizado, buscando sanar os problemas que possam aparecer e ajudar na compreensão do assunto. Qualquer problema, estou disponível e ficarei super feliz em poder ajudar!

Um forte abraço e bons estudos!

Obrigado Sarah Ocy Sousa Medeiros :)