Galera alguém já passou por esse erro:
java.sql.SQLException: Unable to load authentication plugin ‘caching_sha2_password’.
Parece ser um erro de autenticação no login do banco; mas não faço ideia de como resolver;
Alguém sabe dizer o que está acontecendo? E como posso resolver?
Poste o código (e correlatos) onde a exceção foi lançada para avaliarmos. De qualquer forma, já existe um post aqui no fórum tratando do assunto. Sugiro que dê uma espiada por aqui: Não consigo conectar o Java ao MySQL.
código:
public class CargosInserir extends JPanel {
JLabel labelTitulo, labelCargo;
JTextField campoCargo;
JButton botaoGravar;
public CargosInserir() {
criarComponentes();
criarEventos();
}
private void criarComponentes() {
setLayout (null);
labelTitulo = new JLabel("Cadastro de cargo" + JLabel.CENTER);
labelTitulo.setFont(new Font(labelTitulo.getFont().getName(), Font.PLAIN, 20));
labelCargo = new JLabel("Nome do cargo" + JLabel.LEFT);
campoCargo = new JTextField();
botaoGravar = new JButton("Adicionar Cargo");
labelTitulo.setBounds(20, 20, 660, 40);
labelCargo.setBounds(150, 120, 400, 20);
campoCargo.setBounds(150, 140, 400, 40);
botaoGravar.setBounds(250, 380, 200, 40);
add(labelTitulo);
add(labelCargo);
add(campoCargo);
add(botaoGravar);
setVisible(true);
}
private void criarEventos() {
botaoGravar.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
Cargos novoCargo = new Cargos();
novoCargo.setNome(campoCargo.getText());
sqlInserirCargo(novoCargo);
}
});
}
private void sqlInserirCargo(Cargos novoCargo){
if(campoCargo.getText().length() <=3){
JOptionPane.showMessageDialog(null, "Por favor, preencha o nome corretamente!");
}
Connection conexao;
Statement instrucaoSQL;
ResultSet resultados;
try {
conexao = DriverManager.getConnection(BancoDeDados.URL, BancoDeDados.USER, BancoDeDados.PASS);
instrucaoSQL = conexao.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
instrucaoSQL.executeUpdate("insert into cargos (nome) values ('" + novoCargo.getNome()+ "');");
JOptionPane.showMessageDialog(null, "Cargo adicionado com sucesso!");
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, "Ocorreu um erro ao adicionar o Cargo.");
Logger.getLogger(CargosInserir.class.getName()).log(Level.SEVERE, null, ex);
}
}
retorno na saída:
run:
mai 23, 2020 10:39:00 PM sistema.telas.CargosInserir sqlInserirCargo
GRAVE: null
java.sql.SQLException: Unable to load authentication plugin ‘caching_sha2_password’.
Está usando o MySQL 8? Qual o driver? Instalou o conector correto?
Isso MySQL Workbench 8.0.
Driver é o próprio do MySQL baixado pela biblioteca.
se é o correto do Mysql 8 não sei.
java 5.1.23-bin;
O conector java do JDBC, qual está usando? Tem indicar o jar
na IDE. o Conector do MySQL 8 é esse: mysql-connector-java-8.0.20. O driver deverá ser esse: com.mysql.cj.jdbc.Driver
mysql - connector - java - 5.1.23-bin… esse esta no driver junto da biblioteca!
Esse é do MySQL 5. Exemplo:
public class ConectaBancoDeDados {
private static final String DRIVER = "com.mysql.cj.jdbc.Driver";
private static final String URL = "jdbc:mysql://localhost/"
+ "DataBase?useTimezone=true&serverTimezone=UTC";
private static final String USUARIO = "user";
private static final String SENHA = "password";
public static Connection getConexao() throws SQLException{
try{
Class.forName(DRIVER);
return DriverManager.getConnection(URL, USUARIO, SENHA);
}catch(ClassNotFoundException cnfe){
throw new SQLDataException(cnfe.getMessage());
}
}
public static void main(String[] args){
try{
getConexao();
System.out.println("Banco de dados conectado com sucesso!");
}catch(SQLException sqle){
System.out.println("Impossível se conectar ao banco de dados. "
+ "ERRO: " + sqle.getMessage());
}
}
}
No NetBeans, por exemplo:
Ixi… então se trocar resolve o problema?
Obrigado vou testar hoje subistiruindo pelo for…name tbm!
Deu certo era esse detalhe : ?useTimezone=true&serverTimezone=UTC"
Obrigado pela ajuda!