[RESOLVIDO]Erro na criação da Connection Factory (Unknown initial character set index '255' received from server.)

Eu renomeei pra ConnectionFactory, perdão :sweat_smile:
A classe ConnectionFactory que eu postei eh a Conexão que está ai. Perdão pelo vacilo. (Joguei no Word antes de responder aqui e ai errei kk)

Na verdade é isso aqui:

PreparedStatement ps = ConnectionFactory.getConnection().prepareStatement(SQLINSERIR);

E o que o método ConnectionFactory.getConnection() está retornando?
Já deu uma depurada?

Depurei aqui e acontece que nessa parte do código aqui:

public static Connection getConnection() {
        try {
            if (conexao == null){              
            
            Class.forName(DRIVER);

            conexao = DriverManager.getConnection(URL, USER, PASS);
            
            }return conexao; 
                    
        } catch (ClassNotFoundException ex) {
            JOptionPane.showMessageDialog(null, "Erro no driver jdbc!");
            ex.printStackTrace();
            return null;
        }
        catch ( SQLException ex){
            JOptionPane.showMessageDialog(null, "Erro na conexão com o banco de dados!");
            ex.printStackTrace();
            return null;
        }
    }
}

O Driver está sendo executado, porque o primeiro catch não é executado.
Quando vai preencher a variavel conexao, mesmo depois de passar por ela e ela receber o URL, USER e o PASS, conexao continua com valor null. Daí, ele chama o segundo catch.

E qual é a exceção?
Posta o StackTrace.

1 curtida

Tentei por as Strings diretamente dentro do DriverManager.getConnection()mas o stackTrace agora notifica o seguinte:

java.sql.SQLException: Unknown initial character set index '255' received from server. Initial client character set can be forced via the 'characterEncoding' property.
	at com.mysql.jdbc.Connection.configureClientCharacterSet(Connection.java:2969)
	at com.mysql.jdbc.Connection.initializePropsFromServer(Connection.java:3215)
	at com.mysql.jdbc.Connection.createNewIO(Connection.java:1780)
	at com.mysql.jdbc.Connection.<init>(Connection.java:430)
	at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:268)
	at java.sql.DriverManager.getConnection(DriverManager.java:664)
	at java.sql.DriverManager.getConnection(DriverManager.java:247)
	at connection.ConnectionFactory.getConnection(ConnectionFactory.java:32) // Aqui é a linha onde eu preencho a variável connection.
	at model.ContaDAO.create(ContaDAO.java:26)
	at controller.CadastroContaController.insereDados(CadastroContaController.java:26)
	at view.CadastroContaView.botaoInserirActionPerformed(CadastroContaView.java:266)
	at view.CadastroContaView.access$400(CadastroContaView.java:18)
	at view.CadastroContaView$5.actionPerformed(CadastroContaView.java:113)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
	at javax.swing.AbstractButton.doClick(AbstractButton.java:376)
	at javax.swing.plaf.basic.BasicRootPaneUI$Actions.actionPerformed(BasicRootPaneUI.java:208)
	at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1663)
	at javax.swing.JComponent.processKeyBinding(JComponent.java:2882)
	at javax.swing.KeyboardManager.fireBinding(KeyboardManager.java:307)
	at javax.swing.KeyboardManager.fireKeyboardAction(KeyboardManager.java:250)
	at javax.swing.JComponent.processKeyBindingsForAllComponents(JComponent.java:2974)
	at javax.swing.JComponent.processKeyBindings(JComponent.java:2966)
	at javax.swing.JComponent.processKeyEvent(JComponent.java:2845)
	at java.awt.Component.processEvent(Component.java:6310)
	at java.awt.Container.processEvent(Container.java:2236)
	at java.awt.Component.dispatchEventImpl(Component.java:4889)
	at java.awt.Container.dispatchEventImpl(Container.java:2294)
	at java.awt.Component.dispatchEvent(Component.java:4711)
	at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1954)
	at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:806)
	at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1074)
	at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:945)
	at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:771)
	at java.awt.Component.dispatchEventImpl(Component.java:4760)
	at java.awt.Container.dispatchEventImpl(Container.java:2294)
	at java.awt.Window.dispatchEventImpl(Window.java:2746)
	at java.awt.Component.dispatchEvent(Component.java:4711)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
	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.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
	at java.awt.EventQueue$4.run(EventQueue.java:731)
	at java.awt.EventQueue$4.run(EventQueue.java:729)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
	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)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at model.ContaDAO.create(ContaDAO.java:26)
	at controller.CadastroContaController.insereDados(CadastroContaController.java:26)
	at view.CadastroContaView.botaoInserirActionPerformed(CadastroContaView.java:266)
	at view.CadastroContaView.access$400(CadastroContaView.java:18)
	at view.CadastroContaView$5.actionPerformed(CadastroContaView.java:113)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
	at javax.swing.AbstractButton.doClick(AbstractButton.java:376)
	at javax.swing.plaf.basic.BasicRootPaneUI$Actions.actionPerformed(BasicRootPaneUI.java:208)
	at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1663)
	at javax.swing.JComponent.processKeyBinding(JComponent.java:2882)
	at javax.swing.KeyboardManager.fireBinding(KeyboardManager.java:307)
	at javax.swing.KeyboardManager.fireKeyboardAction(KeyboardManager.java:250)
	at javax.swing.JComponent.processKeyBindingsForAllComponents(JComponent.java:2974)
	at javax.swing.JComponent.processKeyBindings(JComponent.java:2966)
	at javax.swing.JComponent.processKeyEvent(JComponent.java:2845)
	at java.awt.Component.processEvent(Component.java:6310)
	at java.awt.Container.processEvent(Container.java:2236)
	at java.awt.Component.dispatchEventImpl(Component.java:4889)
	at java.awt.Container.dispatchEventImpl(Container.java:2294)
	at java.awt.Component.dispatchEvent(Component.java:4711)
	at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1954)
	at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:806)
	at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1074)
	at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:945)
	at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:771)
	at java.awt.Component.dispatchEventImpl(Component.java:4760)
	at java.awt.Container.dispatchEventImpl(Container.java:2294)
	at java.awt.Window.dispatchEventImpl(Window.java:2746)
	at java.awt.Component.dispatchEvent(Component.java:4711)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
	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.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
	at java.awt.EventQueue$4.run(EventQueue.java:731)
	at java.awt.EventQueue$4.run(EventQueue.java:729)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
	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)

Pesquisando sobre esse erro, percebi que o motivo é que as configurações do driver do MySQL e do conjunto de caracteres do banco de dados não correspondem. Porém não consegui resolver.

O driver mudou na versão 8

com.mysql.cj.jdbc.Driver

DriverManager.getConnection(“jdbc:mysql://localhost/test?” +
     “user=minty&password=greatsqldb”)

Mas tenho um catch para caso o driver não funcione, ele seja usado. Porem o erro não ocorre no driver pq este catch não eh chamado em nenhum momento. O catch chamado é sempre o segundo, ou seja, o driver existe, mas na conexão que falha.

Quando coloco dessa forma, ocorre o primeiro catch, dizendo que não foi encontrado o driver.

Vc viu q a conexão mudou também?
Vc está utilizando o MySQL 8?

DriverManager.getConnection(“**jdbc:mysql:**//localhost/test?” +
“user=minty&password=greatsqldb”)

Vi sim

Uso o MySQL Workbench 8.0 CE

E sobre isso, pegando o caminho ate chegar no Driver la nas bibliotecas, meu caminho não é esse, e sim o padrão: com.mysql.jdbc.Driver. Será que estou usando um connector de outra versão? :thinking:

Então o Workbench é apenas uma ferramenta visual.
Antes de ver qual o driver e conexão corretos você precisa saber qual é a versão correta do mysql.

Hmm não sabia. Obrigado pela informação :+1:

Olhando aqui no painel de controle, versão 8.0 do MySQL Server e o MySQL Connector/ODBC 8.0 também.

Baixe o jar do mysql conector 8, caso não a tenha.

https://dev.mysql.com/downloads/connector/j/

na sua classe ConnectionFactory faça algumas alterações:

Class.forName(“com.mysql.cj.jdbc.Driver”).newInstance();

conexão = DriverManager.getConnection(“jdbc:mysql://localhost/test?” +
“user=minty&password=greatsqldb”);

Pelo que andei pesquisando o modo de conexão mudou e deve ser passado conforme no exemplo, não passando o user e passwords separado.

https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-usagenotes-connect-drivermanager.html#connector-j-examples-connection-drivermanager

Além do connector instalado preciso do arquivo jar? Pode ser isso que esteja faltando…

Hmm interessante :thinking:

Neste link eu ja fui, baixei o instalador MSI e instalei por ele mesmo e veio o MySQL 8.0 e o Connector 8.0 também.

Ele não acha este Driver, pois conforme falei o arquivo Driver na biblioteca segue: com.mysql.jdbc.Driver.

Sobre isso, ele deu mais uma exception:

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Client does not support authentication protocol requested by server; consider upgrading MySQL client

E outra coisa @RobertoDM: quando vc for escrever código fonte, selecione o texto e dps aperte o botão “</>” para formatar ele como código fonte. Alem de deixar mais visível, não bate aquele desanimo de tentar entender codigo nao formatado, fechou? :wink: Dai ele fica formatado, percebe a diferença?

Percebo, estou digitando no celular.
Quando chegar em casa faço a conexão e te envio.
Como está escrito no erro, vc pode ter baixado o driver do MySQL, mas está utilizando o antigo.
Por isso está confusão.
O MySQL instalado é o 8.
O driver é outro.
E a conexão diferente

O vídeo postado não ajuda o colega a encontrar a solução para o problema postado. :frowning:

1 curtida

Consegui resolver o problema :hugs: peguei com um amigo o connector e a classe connection factory, e de fato era o connector que estava errado e mudei tbm a classe connectionFactory. Acabou que ela ficou assim:

public class ConnectionFactory {

    static Connection conexao = null;
    static Statement statement = null;
    private static final String DRIVER = "com.mysql.cj.jdbc.Driver";
    private static final String URL = "jdbc:mysql://localhost:3306/banco?useTimezone=true&serverTimezone=UTC&useSSL=false";
    private static final String USER = "root";
    private static final String PASS = "sql123";

        public static Connection getConnection() {
            try {
                if (conexao == null) {

                    Class.forName(DRIVER);
                    conexao = DriverManager.getConnection(URL,USER,PASS);
                    statement = conexao.createStatement();
                }
                return conexao;

            } catch (ClassNotFoundException ex) {
                JOptionPane.showMessageDialog(null, "Erro no driver jdbc!");
                ex.printStackTrace();
                return null;
            } catch (SQLException ex) {
                JOptionPane.showMessageDialog(null, "Erro na conexão com o banco de dados!");
                ex.printStackTrace();
                return null;
            }
        }


    }

Mas obrigado a todos! :+1:

Nem respondi esse cara, pq ele posta esse vídeo em um monte de tópicos.

1 curtida