[RESOLVIDO] Conexão com a aplicação e o banco

Galera, que erro é esse:

jun 14, 2018 8:55:57 PM Ferramentas.Conexao_MySQL link_mysql
GRAVE: null
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.(ConnectionImpl.java:822)
at com.mysql.jdbc.JDBC4Connection.(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 Ferramentas.Conexao_MySQL.link_mysql(Conexao_MySQL.java:27)
at Telas.Principal.(Principal.java:25)
at Telas.Principal$6.run(Principal.java:257)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Caused by: java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.lang.Long
at com.mysql.jdbc.ConnectionImpl.buildCollationMapping(ConnectionImpl.java:1007)
… 31 more

Estou usando em um netbook o netbeans 8.2 e o mysql 5.7, mas eu fui instalar uma aplicação feita pelo mesmo netbeans, mas com o mysql 8.0.11, e deu nisso, e não sei de onde veio. No netbook funciona perfeitamente, mas chego no outro computador, da isso ai acima, alguém sabe o que acontece ou onde eu estou errando?
Agradeço ai gente.

Caso queiram ver a classe de conexão, é essa ai abaixo:

package Ferramentas;


import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ImageIcon;


public class Conexao_MySQL{
    
    
    public  Statement          stm_mysql;
    public  ResultSet           rs_mysql;        
    public  Connection        conn_mysql;
    public  ImageIcon          conectado;
    public  Integer        contact_mysql;
    
    private final String   driver_mysql = "com.mysql.jdbc.Driver";
    private final String  caminho_mysql = "jdbc:mysql://***.*.*.*:****/*********";
    private final String  usuario_mysql = "root";
    private final String    senha_mysql = "**********";
    
    public void link_mysql(){
        try {
            System.setProperty("jdbc.Driver", driver_mysql);
            conn_mysql = DriverManager.getConnection(caminho_mysql, usuario_mysql, senha_mysql);
            contact_mysql = 1;
        } catch (SQLException ex) {
            contact_mysql = 0;
            Logger.getLogger(Conexao_MySQL.class.getName()).log(Level.SEVERE, null, ex);
        }
    
    }   
    

    public void executaSQL(String sql){
        try {
            stm_mysql = conn_mysql.createStatement(rs_mysql.TYPE_SCROLL_INSENSITIVE,rs_mysql.CONCUR_READ_ONLY);
            rs_mysql = stm_mysql.executeQuery(sql);
            contact_mysql = 1;
        } catch (SQLException ex) {
            contact_mysql = 0;
           //JOptionPane.showMessageDialog(null, "Erro de ExecutaSQL!\nERRO:" + ex.getMessage());
        }
    
    
    }

    
}

Bom dia Alex. Cara, eu tava procurando aqui na internet, tem uma galera que fala que excluiu o BD, fez de novo e funcionou. Outras adicionaram algum jar a mais e funcionou…

Tenta converter o seu BigInt em Long, ou joga esse erro aqui no Google, talvez vc ache algo que funcione (há diversas soluções)…

java.math.BigInteger cannot be cast to java.lang.Long at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)

olha, pra ser sincero, foi a primeira coisa que pensei e fiz…excluir e refazer o banco, mas eu fiz isso umas 4 ou 5 vezes e nada…não sei se tem algo haver com a versão do mysql, o sistema operacional, alguma coisa a mais que tem que usar no código por causa dessa nova versão do mysql, só sei que nessa nova versão, tem um monte de coisas que colocaram, que eu nem sei no que ta batendo de frente. uma delas é a forma de autenticação.

1 curtida

Você realmente precisa da última versão? Tenta usar alguma anterior pra ver se funciona

Qual é o código da linha 27 da classe Conexao_MySQL (por que raios colocar o “_” no meio do nome da classe?)

olha, essa parte de nome, pelo menos até onde eu estudei sobre banco e código java, esse formato é permitido…alias, o nome não interfere diretamente em qualquer erro de comunicação. E esse mesmo nome, no netbook ai comentado, funciona perfeitamente.

bom…eu pensei da mesma forma, tirei o atual e TENTEI (olha, tentei mesmo) colocar o banco da mesma versão que eu tenho no net (comentado anteriormente), mas quando chega no processo de inicialização do banco, a parte final, ele não levanta o servidor e fica dando uma mensagem de demora no processo e tal, e não sai disso.

Lea a especificação JavaBeans e lembre-se: não é por que funciona que está correto.
Porém, a questão mais importante você não respondeu, né, fera?

bom…coloquei este nome porque o mysql não é o único banco de dados que existe no netbook, existem outros e essa é a classe que conecta exclusivamente o DB do mysql, por isso o nome. foi mal, escrevi com pressa.

o que eu não entendo é que era pra funcionar super de boas independente da versão do banco ou do sistema operacional.

???

conn_mysql = DriverManager.getConnection(caminho_mysql, usuario_mysql, senha_mysql);

mesmo esses tres eu até coloquei a porta padrão 3306, uma senha muito besta, usuario padrão root, e nada

Qual versão de driver está usando? Afinal, isso me parece ser um problema com o driver em si e não com a estrutura da conexão.
E, sendo bem sincero, faz tanto tempo que não trabalho com MySQL que nem sabia que esta versão existia.

essa é a versão mais nova no mysql, o driver também é o mais recente, daqui a pouco irei testar se é algo relacionado ao jdk que eu estou utilizando.

Olá gente, boa noite…
eu descobri o problema…

trata-se da versão do banco, conector e sistema operacional.
vou explicar:

eu estou programando em um notebook x32 que possui as seguintes ferramentas:

  • nerbeans 8.2
  • mysql 5.7.21
  • conector J 5.1.45

a máquina da cliente era essa:
sistema win7 x64 sp1

o erro era que:

  • mesmo eu tendo o netbeans igual e o conector igual, o sistema (win7 x64) não permitia a instalação de um banco mais antigo, quando fosse tentar instalar, no finalzinho, sempre dava erro e nunca levantava o banco
  • da mesma forma que o conector antigo não se ligava ao banco de dados mais atual
  • se fosse usar o conector novo, o banco reconhecia, mas a aplicação não.

não sei como está agora pra vocês ai, mas ao tentar também trocar o jdk por um mais atual, o netbeans não abriu (nem com reza braba) a aplicação mesmo dentro da máquina x64. Pode ser algum erro não sei dizer.

então fiz o seguinte:
mudei o sistema dela para x32, e assim pude colocar o resto com a mesma configuração existente no meu net. Desta forma funcionou sem cerimônia.

espero ter sido claro.

até mais.

2 curtidas