Java + MySQL

Bom dia galera!
Eu não estou conseguindo fazer a conexão com o banco de dados no meu JFrame do Java.
É algo bem simples, uma tela de login/senha. Vou disponibilizar os dois códigos (tanto da conexão quanto da classe main).

BANCO:

>     package br.com.warehouse.dal;
> //Classes necessárias para uso de Banco de dados //
> import java.sql.Connection;
> import java.sql.DriverManager;
> import java.sql.SQLException;
> 
> //Início da classe de conexão//
> 
> public class ModuloConexao {
> 
>            public static String status = "Não conectou...";
> 
> //Método Construtor da Classe//
> 
>       public ModuloConexao() {
> 
>   
>       }
> 
> 
> //Método de Conexão//
> 
> public static java.sql.Connection getConexaoMySQL() {
> 
>       Connection connection = null;          //atributo do tipo Connection
> 
> 
> try {
> 
> //Carregando o JDBC Driver padrão
> 
> String driverName = "com.mysql.cj.jdbc.Driver";                        
> 
> Class.forName(driverName);
> 
> 
> 
> //Configurando a nossa conexão com um banco de dados//
> 
>           String serverName = "localhost";    //caminho do servidor do BD
> 
>           String mydatabase ="dbwarehouse";        //nome do seu banco de dados
> 
>           String url = "jdbc:mysql://localhost:3306/dbwarehouse";
> 
>           String username = "root";        //nome de um usuário de seu BD      
> 
>           String password = "";      //sua senha de acesso
> 
>           connection = DriverManager.getConnection(url, username, password);
> 
> 
> 
>           //Testa sua conexão//  
> 
>           if (connection != null) {
> 
>               status = ("STATUS--->Conectado com sucesso!");
> 
>           } else {
> 
>               status = ("STATUS--->Não foi possivel realizar conexão");
> 
>           }
> 
> 
> 
>           return connection;
> 
> 
> 
>       } catch (ClassNotFoundException e) {  //Driver não encontrado
> 
>       
> 
>           System.out.println("O driver expecificado nao foi encontrado.");
> 
>           return null;
> 
>       } catch (SQLException e) {
> 
> //Não conseguindo se conectar ao banco
> 
>           System.out.println("Nao foi possivel conectar ao Banco de Dados.");
> 
>           return null;
> 
>       }
> 
> 
> 
>   }
> 
> 
> 
>   //Método que retorna o status da sua conexão//
> 
>   public static String statusConection() {
> 
>       return status;
> 
>   }
> 
>  
> 
>  //Método que fecha sua conexão//
> 
>   public static boolean FecharConexao() {
> 
>       try {
> 
>           ModuloConexao.getConexaoMySQL().close();
> 
>           return true;
> 
>       } catch (SQLException e) {
> 
>           return false;
> 
>       }
> 
> 
> 
>   }
> 
>  
> 
>  //Método que reinicia sua conexão//
> 
>   public static java.sql.Connection ReiniciarConexao() {
> 
>       FecharConexao();
> 
> 
> 
>       return ModuloConexao.getConexaoMySQL();
> 
>   }
> 
> }

CLASSE MAIN:

> package br.com.warehouse.telas;
> import java.sql.*;
> import br.com.warehouse.dal.ModuloConexao;
> import java.awt.BorderLayout;
> import java.awt.EventQueue;
> import javax.swing.JFrame;
> import javax.swing.JPanel;
> import javax.swing.border.EmptyBorder;
> import javax.swing.JLabel;
> import javax.swing.JTextField;
> import javax.swing.JButton;
> import javax.swing.JPasswordField;
> 
> 
> public class TelaLogin extends JFrame {
> 
> 	Connection getConexaoMySQL = null;
> 	PreparedStatement pst = null;
> 	ResultSet rs = null;
> 	
> 	private JPanel contentPane;
> 	private JTextField textField;
> 	private JPasswordField passwordField;
> 
> 	/**
> 	 * Launch the application.
> 	 */
> 	public static void main(String[] args) {
> 		
> 		EventQueue.invokeLater(new Runnable() {
> 			public void run() {
> 				try {
> 					TelaLogin frame = new TelaLogin();
> 					frame.setVisible(true);
> 				} catch (Exception e) {
> 					e.printStackTrace();
> 				}
> 			}
> 		});
> 	}
> 
> 	/**
> 	 * Create the frame.
> 	 */
> 	public TelaLogin() {
> 		
> 
> 		getConexaoMySQL = ModuloConexao.getConexaoMySQL();
> 		System.out.println(getConexaoMySQL);
> 		
> 		setResizable(false);
> 		setTitle("Lovato Estoque - Login");
> 		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
> 		setBounds(100, 100, 374, 188);
> 		contentPane = new JPanel();
> 		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
> 		setContentPane(contentPane);
> 		contentPane.setLayout(null);
> 		setLocationRelativeTo(null);
> 		
> 		JLabel lblUsurio = new JLabel("Usu\u00E1rio");
> 		lblUsurio.setBounds(29, 28, 48, 24);
> 		contentPane.add(lblUsurio);
> 		
> 		JLabel lblSenha = new JLabel("Senha");
> 		lblSenha.setBounds(29, 65, 46, 14);
> 		contentPane.add(lblSenha);
> 		
> 		textField = new JTextField();
> 		textField.setBounds(110, 30, 190, 20);
> 		contentPane.add(textField);
> 		textField.setColumns(10);
> 		
> 		JButton btnLogin = new JButton("Login");
> 		btnLogin.setBounds(152, 93, 89, 23);
> 		contentPane.add(btnLogin);
> 		
> 		passwordField = new JPasswordField();
> 		passwordField.setBounds(110, 62, 190, 20);
> 		contentPane.add(passwordField);
> 	}
> }
  • Eu não estou usando senha no banco

  • Estou usando a versão do Driver 8.0.11

  • Já coloquei o Driver na pasta do meu projeto
    (C:\Users\leonardo.lovato\Desktop\Sistema\prjwarehouse)

  • Já coloquei o Driver na pasta ext do jdk
    C:\Program Files\Java\jdk1.8.0_111\jre\lib\ext

Obs.: Não está entrando no connection, mas pelo que vi, ele nem chega a validar os dados acima (campo user, password, etc):

Alguem poderia me ajudar ? Preciso muito fazer essa conexão.

Agradeço a todos!

eu utilizo esse driver

private static final String DRIVER = "com.mysql.jdbc.Driver";

e instancio as constantes como USER, DRIVER, PASS, URL no inicio da classe;

1 curtida

Ola,
pra saber oq está acontecendo vc precisa colocar um stacktrace ai pq pra n conectar deve estar dando erro, do contrário está conectando.
O código de conexao é extremamente simples, se vc tem a biblioteca importada e não conecta, mais provável é q vc tenha algum problema com o banco, como endereço, porta, usuario, parado.
E quanto a “validadar os dados acima”, o nome do servidor, o banco, usuário e senha, são meras variáveis, pq estaria sendo feita uma validação aí? A “validação” é getConnection q vai conectar ou dar erro.

1 curtida

Então, a partir da atualização do Driver 8.0, a sintaxe mudou de "com.mysql.jdbc.Driver" para "com.mysql.cj.jdbc.Driver"

https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-api-changes.html

1 curtida

Entendi Rodrigo.
O pior é que eu conferi todos os endereçamentos, porta (como pôde ver, é server local), nome do banco, eu consigo entrar normalmente no banco com esse usuário/senha.

Fiz o StackTrace e olha a “lasanha”:

Nao foi possivel conectar ao Banco de Dados.
java.sql.SQLException: The server time zone value 'Hora oficial do Brasil' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:127)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:95)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:87)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:61)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:71)
	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:76)
	at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:862)
	at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:444)
	at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:230)
	at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:226)
	at java.sql.DriverManager.getConnection(Unknown Source)
	at java.sql.DriverManager.getConnection(Unknown Source)
	at br.com.warehouse.dal.ModuloConexao.getConexaoMySQL(ModuloConexao.java:50)
	at br.com.warehouse.telas.TelaLogin.<init>(TelaLogin.java:49)
	at br.com.warehouse.telas.TelaLogin$1.run(TelaLogin.java:34)
	at java.awt.event.InvocationEvent.dispatch(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$500(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value 'Hora oficial do Brasil' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
	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.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:59)
	at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:83)
	at com.mysql.cj.util.TimeUtil.getCanonicalTimezone(TimeUtil.java:128)
	at com.mysql.cj.protocol.a.NativeProtocol.configureTimezone(NativeProtocol.java:2201)
	at com.mysql.cj.protocol.a.NativeProtocol.initServerSession(NativeProtocol.java:2225)
	at com.mysql.cj.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.java:1391)
	at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:993)
	at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:852)
	... 22 more
null

Tenta essa solução aqui;

2 curtidas

FUNCIONOU MANO!!! VALEEEEEEEEEEEEEEEEEEEEEU!
TERIA QUE DEIXAR EXPLICITO O FUSO HORÁRIO!

Sem palavras mano! Muito obrigado mesmo!

2 curtidas

Cuidado ao usar um timezones diferentes entre a aplicação e o banco, seus times podem ficar zoados.

1 curtida

Sim, mas estranho ter que deixar explicito o timezone… será que é pela nova versão do connector ?

Na verdade não… e passei pelo mesmo erro a muito tempo atraz.

1 curtida

Estranho… vou pesquisar a fundo o motivo.

Eu acredito que seja pq vc tem esse timezone na aplicação pq ele vai tentar usar o mesmo no banco, ai vc poderia fixar outro timezone padrão na aplicação e testar. É estranho este timezone q vc tem na sua aplicação, ai ele tenta usa-lo no banco mas lá n existe.

1 curtida

Entendi! Obrigado pelo esclarecimento Rodrigo!

Aqui nao funcionou. qual .jar vc utiliza no seu projeto?

Vamos com calma…

1 - O que está acontecendo com o seu projeto?
2 - Qual a versão do seu .jar?
3 - Se houver erros, nos diga quais são.

Estou tentando atualizar um registro do mysql com CachedRowSet
Jar:
mysql-connector-java-8.0.152
Erro:
java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/agencia?useTimezone=true&serverTimezone=UTC

Já adicionou o driver do MySql?

sim está no Libraries
postei as funções: https://pastebin.com/eAurnzSV