1
resposta

Erro ao enviar o uuid

Olá.
Após seguir as modificações do último video do curso, ao fazer a requisição para enviar um novo pedido estourou o erro


HTTP ERROR 500 jakarta.servlet.ServletException: java.sql.SQLException: No suitable driver found for jdbc:sqlite:target/orders_database.db

URI:	/new
STATUS:	500
MESSAGE:	jakarta.servlet.ServletException: java.sql.SQLException: No suitable driver found for jdbc:sqlite:target/orders_database.db
SERVLET:	br.com.alura.ecommerce.ecommerce.NewOrderServlet-291ae
CAUSED BY:	jakarta.servlet.ServletException: java.sql.SQLException: No suitable driver found for jdbc:sqlite:target/orders_database.db
CAUSED BY:	java.sql.SQLException: No suitable driver found for jdbc:sqlite:target/orders_database.db
Caused by:

jakarta.servlet.ServletException: java.sql.SQLException: No suitable driver found for jdbc:sqlite:target/orders_database.db
    at br.com.alura.ecommerce.ecommerce.NewOrderServlet.doGet(NewOrderServlet.java:53)
    at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:500)

1 resposta

Olá, Raphael

O erro principal na sua mensagem é:
java.sql.SQLException: No suitable driver found for jdbc:sqlite:target/orders_database.db

O teu código Java sabe onde está o banco de dados (o caminho jdbc:sqlite...), mas ele não sabe como falar a "língua" do SQLite. Quem ensina essa língua é o Driver JDBC (a biblioteca do SQLite).

Como o instrutor moveu a lógica de banco de dados para dentro do NewOrderServlet (que fica no módulo da API HTTP), esse módulo específico agora precisa ter a biblioteca do SQLite instalada nele também. É muito provável que a dependência esteja apenas nos módulos dos consumidores (como o FraudDetectorService), mas tenha sido esquecida no módulo HTTP.

Para corrigir, você tem que adicionar a dependência do driver JDBC no arquivo pom.xml do módulo onde o seu Servlet está rodando (provavelmente chamado de service-http-ecommerce ou algo similar).

  1. Abra o arquivo pom.xml do módulo HTTP/Servlet (não o pom.xml pai, nem o dos outros serviços).
  2. Adicione a dependência do sqlite-jdbc dentro da tag <dependencies>. Deve ficar parecido com isso:
<dependencies>
    <dependency>
        <groupId>org.xerial</groupId>
        <artifactId>sqlite-jdbc</artifactId>
        <version>3.21.0.1</version> </dependency>
</dependencies>
  1. Após salvar, lembra de recarregar o Maven (no IntelliJ, geralmente aparece um ícone de "M" pequeno para atualizar, ou clique com o botão direito no pom.xml -> Maven -> Reload Project).
  2. Reinicie a aplicação HttpEcommerceService.

Se mesmo após adicionar a dependência o erro persistir (o que é raro em versões mais novas, mas pode acontecer dependendo do ambiente), você pode forçar o carregamento do driver adicionando esta linha no bloco estático ou no construtor da sua classe de banco de dados:

try {
    Class.forName("org.sqlite.JDBC");
} catch (ClassNotFoundException e) {
    e.printStackTrace();
}

Mas, na grande maioria dos casos, apenas ajustando o pom.xml o erro deve sumir e o seu NewOrderServlet conseguirá salvar o pedido corretamente!