[RESOLVIDO]Conexão do Banco de Dados com Java

31 respostas
javamysql
S

Galera, eu to seguindo uns videos pra aprender o basico de como estabelecer uma conexão do banco de dados do mysql com o Java, mas logo quando cheguei no primeiro teste que ele faz no video, o meu da errado, não consegue estabelecer a conexão, eu não entendi o porque, eu fiz tudo igual, tudo certinho.

Segue o código de onde ocorre o erro:

é justamente na linha onde tem o return do getConnection()

public class ConnectionFactory {

private static final String driver = "com.mysql.jdbc.Driver";
private static final String url = "jdbc:mysql://localhost:3306/dbloja";
private static final String user = "root";
private static final String pass = "";

public static Connection getConnection() {
    try {
        
        Class.forName(driver);
        return DriverManager.getConnection(url, user, pass);
        
    } catch (ClassNotFoundException | SQLException ex) {
        throw new RuntimeException("Erro na conexão", ex);
    }
}

public static void closeConnection(Connection com) {
    if(com != null) {
        try {
            com.close();
        } catch (SQLException ex) {
            System.err.println("Erro:" + ex);
        }
    }
}
public static void closeConnection(Connection com, PreparedStatement stmt) {
    if(stmt != null) {
        try {
            stmt.close();
        } catch (SQLException ex) {
            System.err.println("Erro:" + ex);
        }
    }
    closeConnection(com);
}
public static void closeConnection(Connection com, PreparedStatement stmt, ResultSet rs) {
    if(rs != null) {
        try {
            rs.close();
        } catch (SQLException ex) {
            System.err.println("Erro:" + ex);
        }
    }
    closeConnection(com,stmt);
}

}

Foto do erro:

31 Respostas

S

Glr eu acredito que tenho encontrado o erro, só não sei como resolver, eu acho q eu coloquei uma senha que eu não lembro, alguém saberia como obter essa senha? ou como mudar a senha? ou eu terei que refazer o servidor?

javaflex

Tenta retirar esses try catch e posta a msg de erro real. Nao sei pq programadores Java usam tanto try catch.

S

eu usei pq o código pedia, essa parada do mysql gera uma exception, então ele me obriga a colocar, mas acho q eu posso usar o normal, vo fazer isso amanhã e postar aqui

javaflex

Bizarro o Java ficar exigindo isso sem que tenhamos a real necessidade, por isso o código Java é tao burocrático e poluído.

Tenta isso:

try
    { 
        //seu codigo
    } 
    catch(ClassNotFoundException | SQLException ex) 
    { 
        throw ex;
    }

Segui a linha que voce fez, mas também tem outra forma mais curta para atender essa burocracia, eu nao lembro mais como é, aqui deve ter algo: http://www.ntu.edu.sg/home/ehchua/programming/java/j5a_exceptionassert.html

javaflex

Acho que é essa parte que me referi do tutorial:

public void methodD() throws XxxException, YyyException { ...... }

S

tirei o try e deixei a clausula de throw e o erro que saiu foi:

Caused an ERROR
Unable to load authentication plugin ‘caching_sha2_password’.

javaflex

Agora sim temos a mensagem de erro.

Pesquisando pela mensagem vai encontrar por exemplo: https://stackoverflow.com/a/50433762

S

Eu não entendi o q é pra fazer nesse comentario, o que a linha que ele escreve faz? e é só escrever aquilo?

S

Cara eu resolvi essa parada do root, agr to com outro problema q é esse erro aqui

Caused an ERROR
java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.lang.Long
java.sql.SQLException: java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.lang.Long

esse erro ta dando na mesma linha, no

return DriverManager.getConnection(url, user, pass);

pra resolver o outro erro, eu criei um usuario diferente com mysql_native_password mas agr to com esse erro ai em cima q citei agr

S

Tentando resolver o problema eu tentei importar o o jar mysql-connecto-java-8.0.12.jar em vez da biblioteca que é de uma versão mais antiga e devia tar causando o conflito já que eu estou usando Java 8 e Mysql 8.0.12 mas tem um problema agr que é esse logo a baixo:

Caused an ERROR
com/mysql/jdbc/Driver : Unsupported major.minor version 52.0

alguém poderia me ajudar a resolver isso ou os problemas anteriores?

S

Alguém poderia me ajudar?eu realemente preciso resolver isso, eu até agr não consegui resolver o problema

javaflex

Posta o conteúdo do arquivo Manifest do seu jar.

S

do jar do Connection/j? do myql?

javaflex

Do seu jar.

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

public class PrincipalTest1 {
    public static void main(String[] args) throws SQLException, ClassNotFoundException {
        Class.forName("com.mysql.jdbc.Driver");
        Connection conexao = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/dbloja", "novoroot", "0123456");
        System.out.println("Conectou!");
        conexao.close();
    }
}
javaflex

Esse nao é o arquivo manifest. Seria bom saber se realmente seu jar está sendo gerado pelo Java 8 (1.8). Uma prova seria através do arquivo MANIFEST.MF.

T

Boa noite
Se não me engano, a partir da versão 8 do MySQL a classe Driver é:

“com.mysql.cj.jdbc.Driver”

Seguindo seus códigos a conexão ocorre sem problemas.
Porém, a orientação do manual do MySQL 8 indica que se use a seguinte forma para a URL de acesso ao BD:

“jdbc:mysql://127.0.0.1:3306/dbloja?useSSL=false”

S

Eu criei 2 projetos um usando o mysql-connector-java-8.0.13.jar e o erro desse é:

Exception in thread “main” java.lang.UnsupportedClassVersionError:
com/mysql/jdbc/Driver :
Unsupported major.minor version 52.0

o outro eu coloquei o Driver JDBC do MySQL - mysql - connector - java - 5.1.23-bin.jar que da esse erro:

Exception in thread “main” java.sql.SQLException:
java.lang.ClassCastException:
java.math.BigInteger cannot be cast to java.lang.Long

eu fiz o que vc disse e mesmo assim ta dando os mesmos erros

S

Onde eu encontro esse MANIFEST.MF?

javaflex

Extrai os arquivos do seu .jar (renomeia pra .zip), fica numa pasta META-INF.

S

mas que .jar?
eu não criei nenhum jar

javaflex

Nunca fez deploy de uma aplicacao Java? Exportar pra jar ou war?

S

tipo, eu sei como exportar o arquivo, mas eu não fiz nada disso, eu só to executando pela IDE, o netbeans, eu não fiz nada pra exportar o arquivo nem nada, ta tudo em .java ainda

javaflex

Compila pra ter o manifest ou exporta o .jar. É só pra obter uma informação, mas se não achar necessário e garante que o Netbeans está configurado pro Java 8, não precisa.

S

pior que agr que vc falou, acho q não, em bibliotecas ele ta com JDK 1.7, como mudo isso?

S

Consegui mudar, agr ta dando outros erros, vou colocar aqui

O que usa o Driver JDBC:

Exception in thread "main" java.sql.SQLException: java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.lang.Long
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:988)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:974)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:919)
	at com.mysql.jdbc.ConnectionImpl.buildCollationMapping(ConnectionImpl.java:1062)
	at com.mysql.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.java:3556)
	at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2513)
	at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2283)
	at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:822)
	at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
	at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:404)
	at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:317)
	at java.sql.DriverManager.getConnection(DriverManager.java:664)
	at java.sql.DriverManager.getConnection(DriverManager.java:247)
	at PrincipalTest1.main(PrincipalTest1.java:14)
Caused by: java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.lang.Long
	at com.mysql.jdbc.ConnectionImpl.buildCollationMapping(ConnectionImpl.java:1007)
	... 15 more
Java Result: 1

O que usa o .jar:

Exception in thread "main" java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:110)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
	at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:835)
	at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:455)
	at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:240)
	at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:207)
	at java.sql.DriverManager.getConnection(DriverManager.java:664)
	at java.sql.DriverManager.getConnection(DriverManager.java:247)
	at PrincipalTest.main(PrincipalTest.java:14)
Java Result: 1
CONSTRUÍDO COM SUCESSO (tempo total: 1 segundo)
javaflex

Boa, já passamos daquele problema. Debuga e posta todo código envolvido com o problema. Aponta tambem a linha que deu o erro.

Ideal mesmo seria encerrar esse tópico e abrir um novo.

S

ok, mas agr eu vo ali fora, que eu vo ver umas parada do meu curso, além disso o código todo que eu fiz, é aquele ali em cima mesmo, o problema ta na hora de pegar a conexão se não me engano, é no getConnection

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

public class PrincipalTest1 {
    public static void main(String[] args) throws SQLException, ClassNotFoundException {
        Class.forName("com.mysql.jdbc.Driver");
        Connection conexao = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/dbloja", "novoroot", "0123456");
        System.out.println("Conectou!");
        conexao.close();
    }
}
javaflex

Tem um tópico que relata esse tipo de problema: [RESOLVIDO] Conexão com a aplicação e o banco

Tem que usar um conjunto compatível, SO, Java, MySQL Server e driver jdbc/Connector.

S

CARACA VÉI FOIIII, kkkkkkk eu resolvi usar o mysql-connector-java-8.0.13.jar ai depois que deu esse erro:

Exception in thread “main” java.sql.SQLNonTransientConnectionException:
Public Key Retrieval is not allowed

eu fui e pesquisei e encontrei uma solução que foi pq eu escrevi uma parada errada que era pra ficar true e eu botei false, então corrigi e deu um erro de Time zone, então pesquisei de novo e corrigir, era tudo no URL do banco, no final ficou assim o código:

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

public class PrincipalTest {
    public static void main(String[] args) throws SQLException, ClassNotFoundException {
        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection conexao = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/dbloja?useSSL=true&useTimezone=true&serverTimezone=UTC", "root", "Sali031297");
        System.out.println("Conectou!");
        conexao.close();
    }
}

O meu Netbeans é o 8.0.2, o meu MySQL é 8.0.13 o conector usado tbm é 8.0.13 e o meu Sistema Operacional é Windows 10 Home.

Na moral, to muito feliz, to a mais de 2 semanas querendo aprender a fazer as interações de BD com Java e por conta desse erro eu não conseguia, na moral kkkkkkk vlw pela ajuda glr, vcs me ajudaram muito me explicando fala ndo o que cada uma sabia e pensava que poderia ser o erro, aprendi muito com vcs. Que Deus abençoe a todos.

Edir_Lucas_Icety

isso realmente é a solução. Funcionou para mim.

Criado 24 de outubro de 2018
Ultima resposta 12 de ago. de 2020
Respostas 31
Participantes 4