3
respostas

[Dúvida] Exception in thread "main" java.sql.SQLException: No suitable driver found

Eu adicionei o .jar em Referenced Libraries conforme sugerido, criei o database loja_virtual, enfim, tudo igual a aula.

Porém, ainda é exibido o erro quando tento executar a classe principal:

Exception in thread "main" java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/loja_virtual?useTimezone=true&serverTimezone=UTC
    at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:706)
    at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:229)
    at Program.main(Program.java:6)

Seguem comprovações de que tudo está correto.

Editor de comando SQL mostrando todos os bancos de dados criados e dando ênfase no banco de dados loja_virtual

Tela do editor de código Visual Studio Code mostrando a estrutura do projeto Java junto ao código da aplicação e erro.

Código da classe principal:


import java.sql.Connection;
import java.sql.DriverManager;

public class Program {
    public static void main(String[] args) throws Exception {
        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/loja_virtual?useTimezone=true&serverTimezone=UTC", "root", "minhaSenha");
        connection.close();
    }
}

Agradeço desde já pela ajuda!

3 respostas

Update:

De acordo com a documentação, a chamada com.mysql.jdbc.Driver está deprecada, sendo a forma atualizada: com.mysql.cj.jdbc.Driver.

Testei alterar o .jar da versão recomendada para a versão 8.0.30, o problema persiste.

Outra alteração que eu fiz foi adicionar o ClassNotFoundException. O código completo atualizado está da seguinte forma:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class Program {

    public static void main(String[] args) throws SQLException, ClassNotFoundException {

        Class.forName(" com.mysql.cj.jdbc.Driver");     // registra o driver
        String user = "root";
        String passwd = "mypsswd";
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/loja_virtual?useSSL=false&allowPublicKeyRetrieval=true&useTimezone=true&serverTimezone=UTC", user, passwd);
        // String usuario = "root";
        // String pass = "mypsswd";
        // String urlBanco = "jdbc:mysql://localhost/loja_virtual?useTimezone=true&serverTimezone=UTC";

        // Connection con = DriverManager.getConnection(urlBanco, usuario, pass);

        conn.close();
    }
}

A linha abaixo está com espaço antes do "com", tenta trocar:

Class.forName(" com.mysql.cj.jdbc.Driver");

Para:

Class.forName("com.mysql.cj.jdbc.Driver");

Infelizmente, o problema persiste.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class Program {

    public static void main(String[] args) throws SQLException, ClassNotFoundException {

        Class.forName("com.mysql.jdbc.Driver");     // registra o driver
        String user = "root";
        String passwd = "mypsswd";
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/loja_virtual?useSSL=false&allowPublicKeyRetrieval=true&useTimezone=true&serverTimezone=UTC", user, passwd);
        // String usuario = "root";
        // String pass = "mypsswd";
        // String urlBanco = "jdbc:mysql://localhost/loja_virtual?useTimezone=true&serverTimezone=UTC";

        // Connection con = DriverManager.getConnection(urlBanco, usuario, pass);

        conn.close();
    }
}
Erro:
Exception in thread "main" java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
    at java.base/java.lang.Class.forName0(Native Method)
    at java.base/java.lang.Class.forName(Class.java:375)
    at Program.main(Program.java:9)