Eu renomeei pra ConnectionFactory, perdão
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)
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.
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.
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.
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?
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? 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
Consegui resolver o problema 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;
}
}
}