segunda-feira, 19 de março de 2012

Acesso ao MySQL

Chega uma hora que desejamos acessar um banco de dados para podermos gravar as informações de nossos programas, não é?

Muitas ferramentas como NetBeans e Eclipse possuem classes prontas para serem utilizadas e algumas até na forma de Beans. Neste post vamos fazer algo da "velha guarda", vamos criar uma classe para acessar um banco de dados MySQL diretamente da linha de comando... e aproveitar para ver algumas pequenas configurações que temos que fazer para que isto funcione.

Vamos ver o código de teste de acesso.

//Classes necessarias para uso de Banco de dados //
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
 
//Inicio da classe de
//
// ************************************* ConexaoMySQL
//
//
class ConexaoMySQL {
  public static String status = "Nao conectou...";

  static String serverName = "localhost";    //caminho do servidor do BD
  static String mydatabase ="mysql";        //nome do seu banco de dados
  static String username = "root";        //nome de um usuario de seu BD     
  static String password = "senharoot";      //sua senha de acesso

  private static Connection connection = null;  //atributo do tipo Connection

  //Metodo Construtor da Classe//
  public ConexaoMySQL() {
  }
 
  public ConexaoMySQL(String usuario, String senha) {
    username = usuario;
    password = senha;
  }

  public ConexaoMySQL(String usuario, String senha, String host) {
    serverName = host;
    username = usuario;
    password = senha;
  }

  //Metodo de Conexao//
  public static java.sql.Connection getConexaoMySQL() {
     return connection;
  }

  public static java.sql.Connection openConexaoMySQL() {
     try {
       // Carregando o JDBC Driver padrao
       String driverName = "com.mysql.jdbc.Driver";                       
       Class.forName(driverName);
 
       // Configurando a nossa Conexao com um banco de dados//
       String url = "jdbc:mysql://" + serverName + "/" + mydatabase;
       connection = DriverManager.getConnection(url, username, password);
 
       //Testa sua Conexao// 
       if (connection != null) {
         status = ("STATUS--->Conectado com sucesso! [" + serverName + "]");
       } else {
         status = ("STATUS--->Nao foi possivel realizar Conexao");
       }
 
       return connection;
 
    } catch (ClassNotFoundException e) { 
       //Driver nao encontrado
       System.out.println("O driver expecificado nao foi encontrado.");
       return null;
    } catch (SQLException e) {
       //Nao conseguindo se conectar ao banco
       System.out.println("Nao foi possivel conectar ao Banco de Dados.");
       return null;
    }
 
 }
 
  //Metodo que retorna o status da sua Conexao//
  public static String statusConection() {
    return status;
  }
 
  //Metodo que fecha sua Conexao//
  public static boolean FecharConexao() {
    try {
       connection.close();
       return true;
    } catch (SQLException e) {
       return false;
    }
 
  }
 
  //Metodo que reinicia sua Conexao//
  public static java.sql.Connection ReiniciarConexao() {
     FecharConexao();
     return ConexaoMySQL.openConexaoMySQL();
  }


}

public class TestaMySQL {

    static ConexaoMySQL conn;

    // main --> cria a conexão com o banco de dados e nada mais
    public static void main(String[] args) {
   
        conn = new ConexaoMySQL();
        conn.openConexaoMySQL();
        System.out.println(conn.statusConection());
       
        if (conn.getConexaoMySQL() != null) {
           
           System.out.println("Conexão realizada com sucesso !");
           System.out.println("Esta na hora de colocar o código para acesso aos dados do MySQL");
           
        }
        conn.FecharConexao();
   
    }
}


Para a classe de conexão funcionar são necessárias três classes de java.sql.
  • Connection:
  • DriverManager:
  • SQLException:
Note que criamos 3 construtores:
  • um sem parâmetros, assim são utilizados os valores default
  • um com 2 parâmetros, permitindo selecionar um novo usuário e senha com acesso a localhost
  • um que permite definir o usuário, senha e servidor
Vamos compilar e rodar
Não rodou! Por que?
Lembram-se do DriverManager que ele carregava "com.mysql.jdbc.Driver". Onde está este driver? O melhor lugar para ele estar (na sua máquina de desenvolvimento) é no diretorio ext do java. No meu computador isto quer dizer [C:\Arquivos de programas\Java\jre7\lib\ext].

Este driver pode ser achado em [http://dev.mysql.com/downloads/connector/j/]. Faça o download do arquivo para um local no seu computador. Descompacte e copie o arquivo [mysql-connector-java-5.1.19-bin.jar] para o diretório ext.

Dependendo de quando você estiver lendo este post o número de versão do arquivo poderá ser diferente.

Vamos tentar novamente:
Funciona!!!

Em breve vamos rodar alguns selects, inserts, updates em tabelas do MySQL.

Dê uma olhada no vídeo para os passos deste post.

quinta-feira, 1 de março de 2012

Layout Manager #4 - Usando CardLayout

Um objeto tipo CardLayout é um gerenciado de layout para um container, que trata cada componente neste container como um cartão (em um rolodex), sendo que somente um cartão pode ser visto por vez. O primeiro componente acrescentado ao CardLayout é o que será exibido quando a aplicação abre.

Vamos ver uma aplicação para entender melhor. O código java que usei vai criar uma aplicação com painel com dois paineis: o primeiro contem um combobox cujo listener permite trocar os cards e o outro painel foi criada com CardLayout, gerando um aplicativo com a seguinte "cara":


O código simplificado é:

public class ExemploCardLayout implements ItemListener {
    JPanel cartoes; //é neste panel que utilizaremos CardLayout
    final static String BUTTONPANEL = "Cartao com JButtons";
    final static String TEXTPANEL = "Cartao com JTextField";
    final static String CHECKPANEL = "Cartao com JCheckBox";
   
    public void adicionarComponentesAoPanel(Container pane) {
        JPanel comboBoxPane = new JPanel();
        String comboBoxItems[] = { BUTTONPANEL, TEXTPANEL, CHECKPANEL };
        JComboBox cb = new JComboBox(comboBoxItems);
        cb.setEditable(false);
        cb.addItemListener(this);
        comboBoxPane.add(cb);
       
        //Cria os "cartoes".
        // 1. botões
        JPanel cartaoComBotoes = new JPanel();
        cartaoComBotoes.add(new JButton("Botao n#1"));
        cartaoComBotoes.add(new JButton("Botao n#2"));
        cartaoComBotoes.add(new JButton("Botao n#3"));
        // 2. texto
        JPanel cartaoComTexto = new JPanel();
        cartaoComTexto.add(new JTextField("Campo de texto de exemplo", 20));


        // 3. checkbox
        JCheckBox chinButton;
        JCheckBox glassesButton;
        JCheckBox hairButton;
        JCheckBox teethButton;
        chinButton = new JCheckBox("Chin");
        chinButton.setMnemonic(KeyEvent.VK_C);
        chinButton.setSelected(false);

        glassesButton = new JCheckBox("Glasses");
        glassesButton.setMnemonic(KeyEvent.VK_G);
        glassesButton.setSelected(false);

        hairButton = new JCheckBox("Hair");
        hairButton.setMnemonic(KeyEvent.VK_H);
        hairButton.setSelected(false);

        teethButton = new JCheckBox("Teeth");
        teethButton.setMnemonic(KeyEvent.VK_T);
        teethButton.setSelected(true);
       
        JPanel cartaoComCheckbox = new JPanel();
        cartaoComCheckbox.add(chinButton);
        cartaoComCheckbox.add(glassesButton);
        cartaoComCheckbox.add(hairButton);
        cartaoComCheckbox.add(teethButton);
       
        //Cpanel que conterá os cartoes
        cartoes = new JPanel(new CardLayout());
        cartoes.add(cartaoComBotoes, BUTTONPANEL);
        cartoes.add(cartaoComTexto, TEXTPANEL);
        cartoes.add(cartaoComCheckbox, CHECKPANEL);
       
        pane.add(comboBoxPane, BorderLayout.PAGE_START);
        // note que os cartões estão utilizando BORDERLAYOUT       
        pane.add(cartoes, BorderLayout.CENTER);
       
    }
   
    // trocar entre os cartões
    public void itemStateChanged(ItemEvent evt) {
        CardLayout cl = (CardLayout)(cartoes.getLayout());
        cl.show(cartoes, (String)evt.getItem());
    }
   
     /**
     * Criate GUI e mostra
     */
    private static void createAndShowGUI() {
        JFrame frame = new JFrame("Exemplo com gerenciador CardLayout");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     
        ExemploCardLayout demo = new ExemploCardLayout();
        ex.adicionarComponentesAoPanel(frame.getContentPane());
       
        //mostra o frame
        frame.pack();
        frame.setVisible(true);
    }
   
    public static void main(String[] args) {     
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}

Fig. Cartão com os botões

Fig. Cartão com Checkbox

Fig. Cartão com Texto