Erro: No suitable driver found for jdbc.mysql://localhost:3306/cadastro

17 respostas
R

Bom dia, boa tarde ou boa noite.
Comecei um projeto pessoal para desenvolver um sistema.
Como sou iniciante, me deparei com uns erros, alguns consegui resolver outros ainda não.
E por isso, venho através deste post pedir uma ajuda do conhecimento de pessoas mais avançadas que possam me ensinar um caminho para alcançar a solução desses problemas.

Segue erro:

java.sql.SQLException: No suitable driver found for jdbc.mysql://localhost:3306/cadastro
	at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:702)
	at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:228)
	at CrudTransportadoraJava/br.com.cadastro.factory.ConnectionFactory.createConnectionToMySQL(ConnectionFactory.java:22)
	at CrudTransportadoraJava/br.com.cadastro.dao.CadastroDAO.save(CadastroDAO.java:21)
	at CrudTransportadoraJava/br.com.cadastro.aplicaçao.Main.main(Main.java:24)

Desde já, agradeço o contato, e estou disponível para quaisquer esclarecimentos.

17 Respostas

RoinujNosde

Você precisa adicionar o driver do MySQL como dependência.

Fefo80

Depois que baixar o driver, você vai em Project -> Properties -> Java Build Path -> Libraries -> Add JARs…

RoinujNosde

Acabei de perceber uma coisa:
Vc usou um ponto pra separar jdbc e mysql na URL?

Teria que ser dois pontos:

"jdbc:mysql://localhost:3306/cadastro"
R

Foi, eu li que o não teria um driver que fosse compatível com o caminho para conexão com o banco de dados. Mas pesquisando não consegui encontrar um driver que fosse efetivo, encontrei os connectors, de várias versões do mySQL.

R

Certo, onde eu posso baixar o driver específico? No site da Oracle?

R

Certo, irei corrigir isso no código fonte e já te retorno! Obrigado.

RoinujNosde

Se for MySQL, eu passei o link acima. Clica nele, escolha Plataform Independent e baixe o zip, dentro vai ter o jar da dependência.

R

Obrigado amigo. Consegui solucionar mas apareceu um erro dizendo que desconhece o banco de dados cadastro. Acredito que meu banco de dados foi apagado por algum erro meu, por isso ele é desconhecido. Agradeço, desde já o contato!

RoinujNosde

Se tiver mais dúvidas só criar um novo tópico :slight_smile:

R

Eu coloquei tudo certinho, porém tinha dado um erro dizendo Unknow Database “cadastro”;
No caso ele me informou que não existe um banco de dados chamado cadastro. Então, criei meu banco de dados no workbench, mas agora dá esse novo erro no código:

Lembrando que essa é a primeira etapa do crud com java que estou desenvolvendo neste sistema solo.

Então, se tu puder me ajudar a pensar junto agradeceria!

Segue o erro:

java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).

at mysql.connector.java@8.0.25/com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)

at mysql.connector.java@8.0.25/com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)

at mysql.connector.java@8.0.25/com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)

at mysql.connector.java@8.0.25/com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63)

at mysql.connector.java@8.0.25/com.mysql.cj.jdbc.ClientPreparedStatement.checkBounds(ClientPreparedStatement.java:1373)

at mysql.connector.java@8.0.25/com.mysql.cj.jdbc.ClientPreparedStatement.getCoreParameterIndex(ClientPreparedStatement.java:1386)

at mysql.connector.java@8.0.25/com.mysql.cj.jdbc.ClientPreparedStatement.setString(ClientPreparedStatement.java:1753)

at CrudTransportadoraJava/br.com.cadastro.dao.CadastroDAO.save(CadastroDAO.java:26)

at CrudTransportadoraJava/br.com.cadastro.aplicaçao.Main.main(Main.java:24)
R

Pelo que entendi seria uma diferença nos valores dos parâmetros, mas não consigo localizar no meu código fonte onde poderia alterar este erro.

RoinujNosde

Mostra o código da classe CadastroDAO.

R

Certo, segue o código fonte da classe CadastroDAO:

package br.com.cadastro.dao;

import java.sql.Connection;

import java.sql.Date;

import java.sql.PreparedStatement;

import br.com.cadastro.factory.ConnectionFactory;
import br.com.cadastro.model.Bancodedadosgwsistemas;

public class CadastroDAO {

public void save (Bancodedadosgwsistemas cadastro) {

String sql = INSERT INTO cadastro (nome, empresa, telefone, modal, rua, numero, bairro, cidade, uf, dataCadastro) VALUES ();
Connection conn = null;
	PreparedStatement pstm = null;
	
	try {
		// Criar uma conexão com o banco de dados
		conn = ConnectionFactory.createConnectionToMySQL(); 
		
		pstm = (PreparedStatement) conn.prepareStatement(sql);
		
		// Adicionando os valores que são esperandos pela Query
		pstm.setString(1, cadastro.getNome());
		pstm.setString(2, cadastro.getEmpresa());
		pstm.setString(3, cadastro.getTelefone());
		pstm.setString(4, cadastro.getModal());
		pstm.setString(5, cadastro.getRua());
		pstm.setString(6, cadastro.getNumero());
		pstm.setString(7, cadastro.getBairro());
		pstm.setString(8, cadastro.getCidade());
		pstm.setString(9, cadastro.getUf());
		pstm.setDate(10, new Date(cadastro.getDataCadastro().getTime()));
		
		//Executar a Query
		pstm.execute();
		
		System.out.println ("Contato salvo com sucesso!");
	} catch (Exception e){
		e.printStackTrace();
	} finally {
		
		// Fechar as conexões
		try {
			if (pstm != null) {
				pstm.close();
			}
			
			if (conn != null) {
				conn.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

}

RoinujNosde

Tá faltando os placeholders (interrogações) aqui.
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

Para cada chamada ao um método set de PreparedStatement, precisa ter um placeholder (?) correspondente.

R

Certo entendi, vou tentar aqui!

R

Fiz as alterações, e apareceu este novo erro:

java.sql.SQLException: Parameter index out of range (0 < 1 ).

at mysql.connector.java@8.0.25/com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)

at mysql.connector.java@8.0.25/com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)

at mysql.connector.java@8.0.25/com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)

at mysql.connector.java@8.0.25/com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63)

at mysql.connector.java@8.0.25/com.mysql.cj.jdbc.ClientPreparedStatement.checkBounds(ClientPreparedStatement.java:1370)

at mysql.connector.java@8.0.25/com.mysql.cj.jdbc.ClientPreparedStatement.getCoreParameterIndex(ClientPreparedStatement.java:1386)

at mysql.connector.java@8.0.25/com.mysql.cj.jdbc.ClientPreparedStatement.setLong(ClientPreparedStatement.java:1581)

at CrudTransportadoraJava/br.com.cadastro.dao.CadastroDAO.save(CadastroDAO.java:26)

at CrudTransportadoraJava/br.com.cadastro.aplicaçao.Main.main(Main.java:24)
RoinujNosde

Você usou 0 em algum índice? No PreparedStatement o índice começa do 1.

Criado 10 de junho de 2021
Ultima resposta 11 de jun. de 2021
Respostas 17
Participantes 3