Conexão MySql com o NetBeans

10 respostas
cellodedy
Olha estou desenvolvendo um aplicativo com o NetBeans para desktop. Estou utilizando o banco de dados access, para testes pois não sei como faço para conectar com o mysql 5.0, Alguêm poderia me ajudar? Aqui estão as minha classe de conexão:
package utilitarios; //estou informando onde a conexao vai ficar armazenado no pagote utilitarios
import java.sql.*; //.* importa todas as bibliotecas do java
import javax.swing.*; 
import javax.xml.transform.Result;


public class conexao //classe conexao tem que ser o mesmo nome class conexao
{
    //criei uma variavel driver tipo string e constatnte o conteudo desta variavel não poder ser alterado
    final private String driver = "sun.jdbc.odbc.JdbcOdbcDriver"; //conexao com o banco de dados access
    final private String url = "jdbc:odbc:controle"; //chamando o banco de dados "controle" esta armazenando a fonte de dados
    final private String usuario = "";
    final private String senha = "";
    private Connection conexao; //responsavel pela conexão do banco de dados
    public Statement statement; //abre caminho ate o banco e uma alto estrada
    public ResultSet resultset; // armazena o resultado no dados no banco 
    
    public boolean conecta() //metodo conecta servi para todas as tabelas e cadastros tipo boolean retorna um valor
    {
        // try e catch = ele tenta efetua alguma coisa caso não consiga ele vai para o catch tratamento de erro
        // no java se vc não tratar erro ele nem conecta com o banco
        boolean result = true; //variavel do tipo boolean inicia com true
        try
        { 
            Class.forName(driver); //carregar o driver
            conexao = DriverManager.getConnection(url, usuario, senha); //efetuar a conexao propriamente dita
            //JOptionPane.showMessageDialog(null, "Conectou");
        }
        catch (ClassNotFoundException Driver) //catch tratamento de erro vou tratar o erro
        {
            JOptionPane.showMessageDialog(null, "Driver não localizado: "+Driver); //variavel driver que eu criei vai mostrar o erro pelo catch
            result = false;
        }
        catch (SQLException fonte) //tratamente de erro com a conexao do banco de dados e minha fonte
        {
            JOptionPane.showMessageDialog(null,"Deu erro na conexão "+ 
                    "com a fonte de dados"+fonte);//variavel fonte vai mostrar para mim o erro tratamento de erro
            result = false;
        }
        return result; //retonando true ele da sequencia caso false ele para
    }
    
    //do tipo void nulo não retorna nenhum valor 
    public void desconecta() //metodo de desconectar o banco pois o banco não pode ficar sempre conectado
    {
        //o java não permite ligação com banco de dados sem usar o try catch 
        //vc tem que usar o tratamento de erro com o java senão não funciona nada
        boolean result = true;
        try
        {
            conexao.close();
            JOptionPane.showMessageDialog(null, "Banco Fechado");
        }
        catch(SQLException fecha)
        {
            JOptionPane.showMessageDialog(null,"Não foi possível "+
                    "Fechar o banco de dados"+fecha);
            result = false;
        }
    }
    
    //no momento que eu passar esse parametro na tabela setor qual o sql que eu quero executar
    public void executeSQL(String sql)//metodo para executar o banco de dados por parametro
    {
        try
        {
            statement = conexao.createStatement(
                        ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);            
//dois parametro que nos permite navegar por ele
// 1 ResultSet.TYPE_SCROLL_SENSITIVE me permite que eu passo navegar para ambos os lados para frente para traz
//2 ResultSet.CONCUR_READ_ONLY me permite que eu possa navegar 
//statement abre o caminho como uma alto estrada
            resultset = statement.executeQuery(sql); //aqui estou pegando o sql que esta sendo passado por parametro
            //resultset pega a alto estrada e sera executavel
        }
        //caso de alguma problema ele vai para o tratamento de erro
        catch (SQLException sqlex)
        {
            JOptionPane.showMessageDialog(null,"Não foi possível "+
                    "executar o comando SQL"+sqlex+", o sql passado foi"+sql);
        }
    }
}

10 Respostas

cellodedy
Na parte dos insert * from, Update, Delete muda algo de um banco para o outro Exemplo que esou usando com o access:
//código para Gravar os dados no Banco de Dados
        try
        {
            //insert int setor (nome,uf) values ('Carazinho','RS') exemplo de outros bancos
            
            //para inserir no banco de dados com o java tem que ter o try catch
            // criei uma variavel String sql insert para inserir nos campos abaixo
            String sqlinsert ="insert into setor (nome,talhoes,tipo,ha,data,apelido) values ('"+
                    tf_nome.getText()+"','"+
                    tf_talhoes.getText()+"','"+
                    cb_tipo.getSelectedItem()+"','"+
                    tf_ha.getText()+"','"+
                    tf_data.getText()+"','"+
                    tf_apelido.getText()+"')";
            con_setor.statement.executeUpdate(sqlinsert);
            JOptionPane.showMessageDialog(null,"Gravação realizado com sucesso!");
            
            //atualiza o ResultSet
            //con_setor.resultset = con_setor.statement.executeQuery("Select * from setor");
            con_setor.executeSQL("select * from setor  order by "+ordenacao);
            atualiza_combo_box_setor();
            con_setor.resultset.first(); //posiciona no primeiro registro
            mostrar_dados(); //irá chamar a função em que irá mstrar os dados no form
        }
        catch (SQLException erro)
        {
            JOptionPane.showMessageDialog(null,"Erro ao tentar Gravar o registro..."+erro);
        }


try
        {
            String sql = "select * from setor Where codigo = "+tf_codigo.getText();
            con_setor.executeSQL(sql);
            con_setor.resultset.first();
            String nome = "Deseja deletar o setor : "+con_setor.resultset.getString("nome")+" ?";
            int opcao_escolhida = JOptionPane.showConfirmDialog(null,nome,"Exclusão ",JOptionPane.YES_NO_OPTION);
            if (opcao_escolhida == JOptionPane.YES_OPTION)
        {
                sql = "DELETE FROM setor Where codigo ="+tf_codigo.getText();
                int conseguiu_excluir = con_setor.statement.executeUpdate(sql);
                if (conseguiu_excluir == 1) 
        {
                    JOptionPane.showMessageDialog(null,"Exclusão realizada com sucesso");
                    //atualiza o ResultSet
                    con_setor.executeSQL("Select * from setor  order by "+ordenacao);
                    atualiza_combo_box_setor();
                    con_setor.resultset.first(); //posiciona no primeiro registro
                    mostrar_dados(); //irá chamar a função em que irá mstrar os dados no form
                }
            }
            else 
                return;
        }
        catch (SQLException erro)
        {
             JOptionPane.showMessageDialog(null,"Erro ao tentar excluir o registro..."+erro);
        }

//código para Alterar os dados no Banco de Dados
        try
            {
            //variavel do tipo String sql vou fazer um update no banco de dados
            
            String sql ="UPDATE setor SET nome ='"+tf_nome.getText()+"',"+
                    "talhoes = '"+tf_talhoes.getText()+"',"+
                    "tipo = '"+cb_tipo.getSelectedItem()+"',"+
                    "ha = '"+tf_ha.getText()+"',"+
                    "data = '"+tf_data.getText()+"',"+
                    "apelido = '"+tf_apelido.getText()+"' where codigo = "+tf_codigo.getText();
            con_setor.statement.executeUpdate(sql);
            //abri caminho ate o banco e estou atualizando os dados
            JOptionPane.showMessageDialog(null,"Alteração realizado com sucesso!");
            
            //se eu deletei ou atualizaei eu sempre tenho que atualizar o resultset 
            //atualiza o ResultSet
            con_setor.executeSQL("Select * from setor  order by "+ordenacao);
            atualiza_combo_box_setor();
            con_setor.resultset.first(); //posiciona no primeiro registro
            mostrar_dados(); //irá chamar a função em que irá mstrar os dados no form
        }
        catch (SQLException erro)
        {
            JOptionPane.showMessageDialog(null,"Erro ao tentar Alterar o registro..."+erro);
        }
WashingtonBotelho

Fala ai cellodedy, tudo em cima?

Vou te passar a minha classe Conexao.java, sempre uso ela nos meus projetos.
package com.washingtonbotelho.util;

import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import javax.swing.JOptionPane;

final public class Conexao {

  private static Conexao conexao = null;
  private static Connection conn;
  private String caminho,  sep = File.separator;

  private Conexao() {
    caminho = "data" + sep + "Banco.mdb"; // Caminho onde se encontra meu banco, neste caso estará dentro de uma pasta chamada data no mesmo diretório que o meu jar.

    try {
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
      conn = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" + caminho + "", "", ""); // Código direto para não precisar de configurar a ponte ODBC no Windows, assim é só rodar que já estará conectado.
    } catch (Exception e) {
      System.out.println("[Conexao.conectar] Erro: " + e.toString());
      System.exit(0);
    }
  }

  public synchronized static Connection getConn() {
    if (conexao == null) {
      conexao = new Conexao();
    }
    return conn;
  }

  public static void desconectar() throws SQLException {
    conn.close();
  }
}
Quanto ao SQL, de preferência para o PreperadStatement, pois este já é um código pré compilado e será muito mais rápido, sem contar que ele é mais limpo pra entender. ;D
public void inserir(Object obj) throws SQLException {
    funcionario = (FuncionarioBean) obj;

    ps = conn.prepareStatement(
            "INSERT INTO Funcionario (id, nome, cargo, setor, entrada, inicioAlmoco, " +
            "fimAlmoco, saida, obs, pontos, dataPonto) " +
            "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); // Cada interrogação aqui corresponde a um número abaixo.

    ps.setInt(1, funcionario.getId());
    ps.setString(2, funcionario.getNome());
    ps.setString(3, funcionario.getCargo());
    ps.setString(4, funcionario.getSetor());
    ps.setTime(5, funcionario.getEntrada());
    ps.setTime(6, funcionario.getInicioAlmoco());
    ps.setTime(7, funcionario.getFimAlmoco());
    ps.setTime(8, funcionario.getSaida());
    ps.setString(9, funcionario.getObs());
    ps.setInt(10, funcionario.getPontos());
    ps.setDate(11, funcionario.getDataPonto());
    ps.executeUpdate();
    ps.close();
  }
public FuncionarioBean consultar(Object obj) throws SQLException {
    ps = conn.prepareStatement("SELECT * FROM Funcionario WHERE id = ?");
    ps.setInt(1, (Integer) obj);

    rs = ps.executeQuery();

    funcionario = null;

    if (rs.next()) {
      funcionario = new FuncionarioBean(
              rs.getInt("codFunc"), rs.getInt("id"), rs.getString("nome"),
              rs.getString("cargo"), rs.getString("setor"), rs.getTime("entrada"),
              rs.getTime("inicioAlmoco"), rs.getTime("fimAlmoco"),
              rs.getTime("saida"), rs.getString("obs"), rs.getInt("pontos"), rs.getDate("dataPonto"));
    }

    return funcionario;
  }
Para conectar no MySQL é simples também, só muda o nome do driver. =D
package com.washingtonbotelho.util;

import java.sql.Connection;
import java.sql.DriverManager;

final public class Conexao {

  private static Connection conn = null;
  private static Conexao conexao = null;

  private Conexao() {
    try {
      Class.forName("com.mysql.jdbc.Driver");
      conn = DriverManager.getConnection("jdbc:mysql://localhost/NOMEBANCO", "USUARIO", "SENHA"); // Por exemplo: livraria, "root", "" (sem senha).
    } catch (Exception e) {
      System.out.println("[Conexao.Conexao] Erro: " + e.toString());
    }
  }

  public static synchronized Connection getConnection() {
    if (conexao == null) {
      conexao = new Conexao();
    }
    return conn;
  }
}

E de quebra você estará usando SINGLETON que é conectar apenas uma vez no banco, caso já tenha a conexão feita ele retorna esta e não fica conectando toda vez.

Espero que te ajude, pois no início passei pelos mesmos processos. :wink:

cellodedy

E ai WashingtonBotelho BLZ?

Bom em relação a conexão:
esta mesma conexão serve para desktop, pois vc me passou o localhost, que e pra web certo?

da na mesma, pra web ou desktop?

Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql://localhost/NOMEBANCO", "USUARIO", "SENHA"); // Por exemplo: livraria, "root", "" (sem senha).

Tem o localhost se for pra desktop eu devo remover o localhost ou não minha aplicação e para desktop.

Valeww pela ajuda…Obrigado, T+

cellodedy

Bom no access eu tive que instalar o driver, no mysql eu tbm vou ter que fazer a mesma coisa?

Kara como eu estou perdido nestas conexão…

Minha aplicação esta funcionando 100% so falata a conexão com o banco que eu estou me matando!!!

WashingtonBotelho

É o seguinte.

Quando usamos o MySQL temos de passar um endereço, como se fosse uma url mesmo, mas no caso é um IP, onde localhost se refere ao IP 127.0.0.1 log uso:

Se for um arquivo do Access temos de usar uma ponte ODBC-JDBC que é uma referência que o própio Windows faz, então usamos a API do Windows e não o IP que seria:

Este código do Access é um código direto para não precisar configurar a ponte ODBC lá em Windows/System32/odbcad32.exe dar um nome e referenciar o nome assim:

Qualquer dúvida estamos ai… :wink:

ceneri

amigo tem como voce me ajudar no meu codigo fonte, não estou conseguindo fazer um update no meu sistema...abraços...

try{
          Class.forName("com.mysql.jdbc.Driver");
          Connection con;
          con = DriverManager.getConnection("jdbc:mysql://localhost:3306/fabrica",
                  "root", "");
          Statement sta = con.createStatement();
          if (true){
              String comandoSQL ="UPDATE fabrica SET data_chegada ='"+txt_chegada_material.getText()+"',"+
                    "km_chegada = '"+txt_km_chegada.getText()+"',"+
                    "resultada = '"+txt_resultado.getText()+"',"+
                    "hora_chegada = '"+txt_km_chegada.getText()+"',"+
                    "' where data_chegada = "+txt_chegada_material.getText();

 
          sta.executeUpdate(comandoSQL);
JOptionPane.showMessageDialog(null,"Alteração realizado com sucesso!");
              JOptionPane.showMessageDialog(null,"Dados Gravados com Sucesso","Atenção",
                                         JOptionPane.INFORMATION_MESSAGE);

         }


        }
       
   catch(Exception erro){
               JOptionPane.showMessageDialog(null,"CÓDIGO JA CADASTRADO!","Atenção",
                                         JOptionPane.INFORMATION_MESSAGE);
        txt_numero_gerado.requestFocus();
Dan_xD

Ceneri,

Está apresentando algum erro ao tentar dar o update?

RenanRosa

aqui está uma coisa que vai te ajudar e muito

orobsonpires

Oi,

posta o erro aí!

ViniGodoy

Movido para o fórum de persistência.

Criado 9 de novembro de 2008
Ultima resposta 23 de mai. de 2011
Respostas 10
Participantes 7