Saudações a todos, alguém poderia me auxiliar na seguinte questão, estou voltando a desenvolver em Java, depois de uns anos parados e estou com uma dificuldade na coonexão, jpa instalei o Mysql, uso o Workbench, executo as queries com sucesso, (meu banco está funcionando), porém não consigo conectar com o Eclipse, já tentei até a configuração com o netbeans por achar mais interativa e não conecta, dá erro no conector. Joguei em uma pasta lib em meu projeto, fiz Buid Bach, com diversas versões do Conector j (5.xx, 8.xx) e meu bancoe stá na versão 8. Quanto ao erro, não retorna nenhum log, só entra no Exception, inclusive já usei até uma classe daqui, a senha (102030) é a que uso no banco com o usuário root. Fico grato a quem puder ajudar, segue a classe que estou usando:
package view;
import java.sql.Connection;
import java.sql.DriverManager;
public class Connect{
public static void main (String[] args) {
Connection conn = null;
try{
Class.forName(“com.mysql.jdbc.Driver”).newInstance();
//con = DriverManager.getConnection(“jdbc:mysql://200.223.145.60:3306/controle_aluno”, “root”, “servidor123”);
conn = DriverManager.getConnection(“jdbc:mysql://localhost:3306/bdalmoxarifado”, “root”, “102030”);
System.out.println(“Banco conectado com sucesso!”);
/*
String userName = "root";
String password = "";
String url = "jdbc:mysql://localhost:3306/bdalmoxarifado";
Class.forName ("com.mysql.jdbc.Driver").newInstance ();
conn = DriverManager.getConnection (url, userName, password);
System.out.println ("Conexão com o BD estabelecida!");
*/
}
catch (Exception e){
System.err.println ("Não foi possível estabelecer conexão com o BD");
}
finally
{
if (conn != null)
{
try
{
conn.close ();
System.out.println ("Conexão finalizada");
}
catch (Exception e) { /* ignore close errors */ }
}
}
}
}
Retira esses try/catch. Esconder o erro dificulta achar a causa e polui demais o código com algo que não é importante pra funcionalidade.
Olá amigo, obrigado pela dica, retirei o try/catch, mas ele macra erro nessas duas linhas:
Class.forName (“com.mysql.jdbc.Driver”).newInstance ();
conn = DriverManager.getConnection (url, userName, password);
O Eclipse me dá 3 opções de correção:
Add trows declaration
Sorround with try/multi-catch
Sorround with try/catch
Escolhendo a primeira, fica
public class Connect2 {
public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException {
Connection conn = null;
String userName = "root";
String password = "102030";
String url = "jdbc:mysql://localhost:3306/bdalmoxarifado";
Class.forName ("com.mysql.jdbc.Driver").newInstance ();
conn = DriverManager.getConnection (url, userName, password);
// TODO Auto-generated method stub
}
}
Ai me retorna o seguinte log de erros:
Exception in thread “main” com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Client does not support authentication protocol requested by server; consider upgrading MySQL client
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:353)
at com.mysql.jdbc.Util.getInstance(Util.java:336)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:985)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2938)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:855)
at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:3337)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1217)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:1930)
at com.mysql.jdbc.Connection.(Connection.java:716)
at com.mysql.jdbc.JDBC4Connection.(JDBC4Connection.java:46)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:353)
at com.mysql.jdbc.Connection.getInstance(Connection.java:295)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at view.Connect2.main(Connect2.java:15)
Grato…
Isso é porque Java é muito verboso e burocrático. Escolheu certo “Add trows declaration” é a opção menos pior quando não precisamos tratar exception no Java, embora ainda fique um pouco poluído. Não sei se tem outro jeito totalmente limpo que nao obrigue isso.
Está usando o mysql connector mais novo? https://dev.mysql.com/downloads/connector/j/
Veja se ajuda também: