O Microsoft Access é um sistema de gerenciamento de banco de dados desenvolvido pela Microsoft e incluso no pacote Office. Para esse exemplo é utilizado a versão que está presente no Office 2007.

A ideia inicial é criar um projeto simples responsável por gerenciar Filmes contendo inserção, alteração, exclusão e até uma pesquisa básica e intuitiva.

Após ter aberto o software, é preciso criar um novo banco de dados em branco, como demonstra na Figura 1.

Tela de criação de um novo arquivo de banco de dados onde consta a localização, nome do banco de dados e o tipo. Configurado, é só pressionar OK
Figura 1. Tela de criação de um novo arquivo de banco de dados onde consta a localização, nome do banco de dados e o tipo. Configurado, é só pressionar OK
Nota: Ao criar um novo banco de dados (com o nome de Banco), ele ficará com esse formato e extensão de arquivo: Banco.accdb. Saiba mais sobre a linguagem Java e sobre diferentes bancos de dados relacionais.

Após ter criado o banco de dados, ao clicar com o botão direito em cima de Tabela, vai aparecer um menu de opções e ao clicar em Abrir ele ficará com essa aparência de acordo com a Figura 2, presente na versão 2007.

Tela inicial da tabela a ser criada e também mostra o menu de opções da tabela
Figura 2. Tela inicial da tabela a ser criada e também mostra o menu de opções da tabela
Nota: Ao clicar em Modo Design, vai surgir uma janela pequena para dar um nome para a tabela, que nesse caso será o nome FILMES.

Logo após ter colocado o nome para a tabela, o layout dos campos ficará visível para que sejam inseridos o nome, o tipo e a descrição.

De acordo com a Figura 3, é proposto informar os campos descritos na Tabela 1 (Propriedade dos campos) com os respectivos nomes, tipos e a chave primária.

Nome do Campo Tipo Tamanho Chave Primária
FICODIGO TEXTO 5 PK
FINOME TEXTO 35
FIGENERO TEXTO 8
FIPRODUT TEXTO 15
FIDATCOM Data/Hora -
FIANOPRO TEXTO 4
FITEMDUR TEXTO 3
Tabela 1. Propriedades dos campos onde constam o nome, tipo, tamanho e chave primária

A Figura 3 ilustra o layout final do campo FICODIGO e exibe todos os campos criados juntamente com seus respectivos tipo de dados.

Layout do Modo Design após ter configurado os campos de acordo com a Tabela 1
Figura 3. Layout do Modo Design após ter configurado os campos de acordo com a Tabela 1

Finalmente, após ter configurado todos os campos, é preciso ir para a opção Abrir (visualizado na Figura 2) e inserir alguns filmes. A Figura 4 exemplifica alguns registros cadastrados.

Layout de alguns registros cadastrados
Figura 4. Layout de alguns registros cadastrados

ODBC

O ODBC é um gerenciador de conexões para a fonte de dados SGBD e nele podem ser criadas diversas interfaces que fazem acesso aos inúmeros bancos de dados existentes.

Para criar uma nova fonte de dados, no pesquisar ou no executar do Windows, basta digitar odbcad32 (caso o sistema operacional for de 32 bits) ou odbcad62 (caso o sistema operacional for de 64 bits). Nesse exemplo é utilizado o odbcad32, conforme ilustra a Figura 5.

Comando odbcad32 sendo encontrado durante a pesquisa
Figura 5. Comando odbcad32 sendo encontrado durante a pesquisa

Após ter aberto o odbcad32, será exibido a tela referente a um conjunto de fonte de dados, de acordo com a Figura 6.

Administrador de fonte de dados ODBC
Figura 6. Administrador de fonte de dados ODBC
Nota: Nesse exemplo já existem outras fontes de dados criadas anteriormente

No botão adicionar, é preciso selecionar um driver de conexão, como demonstra a Figura 7.

Tela para escolha do driver de conexão
Figura 7. Tela para escolha do driver de conexão. Nesse caso é escolhido Microsoft Access Driver (*.mdb, *.accdb)

Clicado no botão Concluir, vai aparecer a janela Configurar ODBC para Microsoft Access e é necessário colocar um nome, que nesse caso é MeuBanco. Após isso, tem que escolher o banco de dados em um caminho salvo anteriormente e para isso clica em Selecionar..., depois aparecerá a janela Selecionar banco de dados. Feito isso, é preciso selecionar o banco de dados, de acordo com a Figura 8.

Janelas de configuração do nome da fonte de dados e de seleção para caminho do banco de dados
Figura 8. Janelas de configuração do nome da fonte de dados e de seleção para caminho do banco de dados

IDEJCREATOR

O JCreator é uma IDE Java criado pela Xinox Software e sua interface lembra a do Microsoft Visual Studio. Por ela ser programada totalmente em C++, a Xinox afirma que o JCreator é mais rápido que as IDE(s) concorrentes baseadas na linguagem JAVA. Essa IDE está disponível apenas para o sistema operacional Windows, porém, tanto a versão LE quanto a versão Pro do JCreator funciona adequadamente no Linux usando o Wine.

O conjunto de recursos disponíveis para a versão Pro é comparável à de outros IDE(s) no que diz respeito a recursos de gerenciamento e edição de projetos, mas não tem recursos avançados, tais como refatoração, dentre outros, que pode ser encontrada em outras IDE(s) que acercam a linguagem JAVA como Eclipse e Netbeans, por exemplo.

Já a versão gratuita LE carece de mais alguns recursos como conclusão de código, que são incluídas com outras IDEs livres e também não tem o nível de extensibilidade através de plug-ins de terceiros que é comum em outras IDE(s) populares do JAVA.

Dentre as características do JCREATOR, podemos destacar:

  • Diferentes perfis do JDK podem ser utilizados;
  • Esquema de cores personalizado;
  • Facilidades de escrever códigos e modelar projetos;
  • Fácil visualização do projeto com navegador de classe;
  • Depuração com uma interface fácil e intuitiva;
  • Assistentes ajudam a ir direto ao ponto de escrever o projeto de uma forma ágil e facilitada;
  • Interface de usuário muito parecida com a Microsoft Visual Studio;
  • A IDE JCreator não requer um ambiente de tempo de execução JAVA para executar, o que pode torná-lo rápido no que comparado em outras IDE(s)baseadas em JAVA.

Além disso, temos como vantagens do JCREATOR uma interface um modo simples e facilitado e ele ocupa pouco tamanho em disco, depois de instalado, comparado com outras IDE(s).

Entre as desvantagens podemos destacar que a IDE JCreator está disponível apenas para o sistema operacional Windows, embora o Linux Wine pode ser usado em sistemas Unix para executar o JCreator. Além disso, na maioria das vezes, o JCreator tem o navegador Internet Explorer como sendo o padrão, as configurações de impressoras usadas para impressões não são confiáveis e suas versões são pagas.

Iniciando o Projeto Java

Para iniciar um novo projeto JAVA pelo JCreator é necessário ter o mesmo e também um JDK instalado e recente. Feito isso, é só ir na barra de menus (caso esteja na versão inglês) FileNew Project (ArquivoNovo Projeto) e definir o nome (Exemplo) para o novo Projeto JAVA que será sobre Gerenciamento de Filmes.

Finalmente é só colocar no projeto JAVA o que está descrito na Listagem 1.


importjava.sql.*;
importjavax.swing.*;
importjava.awt.*;
importjava.awt.event.*;
 
classExemplo extends JFrame implements ActionListener
{
JLabel L1,L2,L3,L4,L5,L6,L7,L8;
JButton b1,b2,b3,b4,b5;
staticJTextFieldtfCodigo,tfNome,tfGenero,tfProdut,tfDatcom,tfAnopro,tfTemdur;
JPanel p1 = new JPanel();
ResultSetrs;
  Statement MeuState;
 
public static void main(String args[])
{
            JFrame Janela = new Exemplo();
            Janela.show();
            WindowListener x = new WindowAdapter()
{
            public void windowClosing(WindowEvent e)
            {
                        System.exit(0);
            }
 };
            Janela.addWindowListener(x);
  }
 
Exemplo()
  {
            p1.setLayout(new FlowLayout(FlowLayout.LEFT));
            L1 = new JLabel("Código ");
            L2 = new JLabel("Título");
            L3 = new JLabel("Gênero");
            L4 = new JLabel("Produtora");
            L5 = new JLabel("Data de Compra  ");
            L6 = new JLabel("Ano de Produção");
            L7 = new JLabel("Tempo de Duração");
            L8 = new JLabel(" ");
            for (int i=0;i<60;i++)
            L8.setText(L8.getText()+" ");
            tfCodigo = new JTextField(10);
            tfCodigo.addActionListener(this);
            tfNome = new JTextField(35);
            tfGenero = new JTextField(10);
            tfProdut = new JTextField(15);
            tfDatcom = new JTextField(8);
            tfAnopro = new JTextField(5);
            tfTemdur = new JTextField(5);
            b1=new JButton("Inserir");
            b2=new JButton("Atualizar");
            b3=new JButton("Excluir");
            b4=new JButton("Localizar");
            b5=new JButton("Novo");
            b1.setBackground(new Color(180,180,250));
            b2.setBackground(new Color(180,180,250));
            b3.setBackground(new Color(180,180,250));
            b4.setBackground(new Color(180,180,250));
            b5.setBackground(new Color(180,180,250));
            b1.addActionListener(this);
            b2.addActionListener(this);
            b3.addActionListener(this);
            b4.addActionListener(this);
            b5.addActionListener(this);
            p1.add(L1); p1.add(tfCodigo); p1.add(L2); p1.add(tfNome);
            p1.add(L3); p1.add(tfGenero); p1.add(L4); p1.add(tfProdut);
            p1.add(L5); p1.add(tfDatcom); p1.add(L6); p1.add(tfAnopro);
            p1.add(L7); p1.add(tfTemdur); p1.add(L8);
            p1.add(b1); p1.add(b2); p1.add(b3);p1.add(b4);p1.add(b5);
            getContentPane().add(p1);
            setTitle("Cadastramento de Filmes");
            setSize(610,140);
            setResizable(false);
            String url = "jdbc:odbc:MeuBanco";
            try
{
Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );
Connection MinhaConexao = DriverManager.getConnection(url);
MeuState = MinhaConexao.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs = MeuState.executeQuery("SELECT * FROM Filmes");
rs.first();
atualizaCampos();
}
            catch(ClassNotFoundException ex)
{
System.out.println("Driver JDBC-ODBC nãoencontrado!");
}
catch(SQLExceptionex)
{
System.out.println("Problemas na conexao com a fonte de dados");
}
  }
 
 
public void actionPerformed(ActionEvent e)
{
            if (e.getSource()==b5)//limpar
            {
            limpaCampos();
            return;
            }
            if (e.getSource()==b1) //inserir
{
            if (tfCodigo.getText().equals(""))
            {
                        JOptionPane.showMessageDialog(null,"Informe um código");
            }
            else
            {
                        try
                          {

             String SQL = "INSERT INTO Filmes (Ficodigo,Finome,Figenero," + 
             "Fiprodut,Fidatcom,Fianopro,Fitemdur) Values ('"+
                        tfCodigo.getText()+"','"+
                        tfNome.getText()+"','"+
                        tfGenero.getText()+"','"+
                        tfProdut.getText()+"','"+
                        tfDatcom.getText()+"','"+
                        tfAnopro.getText()+"','"+
                        tfTemdur.getText()+"')";
                        MeuState.executeUpdate(SQL);
            JOptionPane.showMessageDialog(null,"Gravação realizada com sucesso!");
                        limpaCampos();
            }
            catch(SQLException ex)
            {
                        if (ex.getMessage().equals("General error"))
                                   JOptionPane.showMessageDialog(null,"Filme já Cadastrado");
                        else
                        JOptionPane.showMessageDialog(null,"Data Inválida! 
                        \nEla precisa ser informada e que esteja no formato: dd/mm/aaaa");
            }
            }
}// Final da Inclusão 
            if (e.getSource()==b2) //Atualizar
            {
                        if (tfCodigo.getText().equals(""))
                        {
                                   JOptionPane.showMessageDialog(null,"Não há filme pesquisado 
                                   para ser alterado!");
                        }
                        else
                        {
                        try
                            {
                                               String SQL = "UPDATE Filmes SET "+
                                   "Ficodigo='"+tfCodigo.getText()+"',"+
                                               "Finome='"+tfNome.getText()+"',"+
                                                 "Figenero='"+tfGenero.getText()+"',"+
                                                 "Fiprodut='"+tfProdut.getText()+"',"+
                                                 "Fidatcom='"+tfDatcom.getText()+"',"+
            "Fianopro='"+tfAnopro.getText()+"',"+
                                   "Fitemdur='"+tfTemdur.getText()+"' "+
                                   "WHERE Ficodigo = '"+tfCodigo.getText()+"'";
                                   int r = MeuState.executeUpdate(SQL);
                                   if (r==1)
                        JOptionPane.showMessageDialog(null,"Atualização realizada com sucesso");
            else
            JOptionPane.showMessageDialog(null,"Esse Filme ainda não está cadastrado 
            \nPressione Inserir para cadastrar filme!");
            }
                        catch(SQLException ex)       
{
JOptionPane.showMessageDialog(null,"Ocorreu um erro durante a alteração do Filme ou algum dado foi 
digitado incorretamente!");    
}
            }
}// - Final da Atualização -
            if (e.getSource()==b3) // Excluir
            {
                        try
                        {
                        String SQL = "SELECT Ficodigo, Finome FROM Filmes Where Ficodigo = 
                        '"+tfCodigo.getText()+"'";
                                   rs = MeuState.executeQuery(SQL);
                        String nome = "";
                        try
                        {
                        rs.next();
                        nome = "Deletar o Filme: "+rs.getString("finome");
                                   }
                                   catch(SQLException ex1)
                                   {
                                   JOptionPane.showMessageDialog(null,"Filme nao cadastrado!");
                                   return;
                        }
                                   int n = JOptionPane.showConfirmDialog(null,nome," 
                                   ",JOptionPane.YES_NO_OPTION);
                        if (n==JOptionPane.YES_OPTION)
                                   {
                                               SQL = "DELETE FROM Filmes Where Ficodigo = 
                                               '"+tfCodigo.getText()+"'";
                                               int r = MeuState.executeUpdate(SQL);
                                               if (r==1)
                                   JOptionPane.showMessageDialog(null,"Exclusão realizada com sucesso");
                                   else
                                   JOptionPane.showMessageDialog(null,"Não foi possível excluir o filme");
                        }
                        else
                                   return;
            }
                        catch(SQLException ex)
{
                        JOptionPane.showMessageDialog(null,"Houve um erro durante a execução do comando
                         SQL");
}
            limpaCampos();
}// - Final da Exclusão -
if (e.getSource()==b4 || e.getSource()==tfCodigo)
            {
                        try
            {
                                   String SQL = "SELECT * FROM Filmes Where Ficodigo = 
                                   '"+tfCodigo.getText()+"'";
                        rs = MeuState.executeQuery(SQL);
                                   rs.next();
                                   tfCodigo.setText(rs.getString("Ficodigo"));
                                   tfNome.setText(rs.getString("Finome"));
                                   tfGenero.setText(rs.getString("Figenero"));
                                   tfProdut.setText(rs.getString("Fiprodut"));
                                   tfDatcom.setText(""+rs.getDate("Fidatcom"));
                                   tfAnopro.setText(rs.getString("Fianopro"));
                                   tfTemdur.setText(rs.getString("Fitemdur"));
            }
            catch(SQLException ex)
            {
                 JOptionPane.showMessageDialog(null,"Filme nao Encontrado!");
                 return;
            }
            }// - Final da Localização -
}
 
public static void limpaCampos() //limpar campos
  {
            tfCodigo.setText("");
            tfNome.setText("");
            tfGenero.setText("");
            tfProdut.setText("");
            tfDatcom.setText("");
            tfAnopro.setText("");
            tfTemdur.setText("");
}
 
public void atualizaCampos() //atualizar campos
{
            try
               {
                        tfCodigo.setText(rs.getString("Ficodigo"));
                        tfNome.setText(rs.getString("Finome"));
                        tfGenero.setText(rs.getString("Figenero"));
                        tfProdut.setText(rs.getString("Fiprodut"));
                        tfDatcom.setText(""+rs.getDate("Fidatcom"));
                        tfAnopro.setText(rs.getString("Fianopro"));
                        tfTemdur.setText(rs.getString("Fitemdur"));
            }
            catch(SQLExceptionex)
{
            JOptionPane.showMessageDialog(null,"Ocorreu um erro no momento de atualização!");
    }
  }
}
Listagem 1. Projeto Java (completo) criado no JCreator para controle de filmes

Vamos entender o código do projeto apresentado na Listagem 1:

  • A classe Exemplo faz uma herança de JFrame e implementa todos os ouvintes das ações denominado ActionListener.
  • O método public static void main(String args[]) é responsável por imprimir na janela uma tela e também por liberar da memória caso o usuário tenha fechado a aplicação.
  • O método Exemplo() é responsável por controlar todos os objetos na tela. Desde a posição da tela, quantidade de caixas de texto (inclusive com seu tamanho máximo de caracteres), de labels e até de botões, faz também o redirecionamento dos objetos. Nesse método também tem a conectividade com o banco de dados representado pela declaração da string:

String url = "jdbc:odbc:MeuBanco"; 
//string que recebe o conjunto de caracteres referente ao driver JDBC direcionando 
//ao MeuBanco (criado anteriormente no ODBC)

e também pelos comandos que estão dentro de um try catch:


Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" ); 
//Ponteiro para o JDBC que chama o banco de dados criado via ODBC.
Connection MinhaConexao = DriverManager.getConnection(url); 
//variável recebendo a conexão para o JDBC.
MeuState = MinhaConexao.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY); 
//cria conexão do tipo sensitive e somente leitura.
catch(ClassNotFoundException ex) 
//Erro de classe não encontrado, caso isso ocorra é emitido uma mensagem.
catch(SQLExceptionex) 
//Erro de instrução de SQL informado errado, se acontecer isso é emitido uma mensagem.
  • O método public void actionPerformed(ActionEvent e) é responsável por executar ações para que o ouvinte ActionListener entenda e as realizam. Nesse método se encontra as seguintes ações:
    o if (e.getSource()==b5)// caso o usuário clicar no botão de limpar, é executado um método para limpar os campos.
    o if (e.getSource()==b1)// caso o usuário clique no botão de inserir e antes não foi informado um código, é mostrado uma mensagem para que o usuário insira um código, feito isso, caso ocorra tudo certo, dentro de um try catch é feito um recebimento de todos os dados digitados pelo usuário dentro de uma instrução de SQL para Insert cuja finalidade é gravar os dados dentro da tabela Filmes, e isso é executado através do método executeUpdate(SQL).Caso apresente algum erro como, por exemplo, o filme foi inserido com um mesmo código novamente é emitida uma mensagem. Se a data informada pelo usuário foi inválida, também é exibida uma mensagem dizendo que a data está inválida e que precisa estar no formato correto (dd/mm/aaaa).
    o if (e.getSource()==b2) // caso o usuário clique no botão de atualizar e antes não foi pesquisado algum filme, é mostrado uma mensagem para que o usuário tenha que realizar alguma pesquisa de filme, feito isso, caso ocorra tudo certo, dentro de um try catch é feito um recebimento de todos os dados digitados pelo usuário dentro de uma instrução de SQL para Update cuja finalidade é alterar os dados dentro da tabela Filmes, e isso é realizado através do método executeUpdate(SQL). Caso o retorno da alteração seja igual a 1 isso quer dizer que a atualização ocorreu tudo certo, caso contrário vai aparecer uma mensagem de erro dizendo que o filme não está cadastrado ou uma mensagem dizendo que houve erro na alteração por vários motivos como por exemplo os dados informados foram incorretos.
    o if (e.getSource()==b3) // caso o usuário clicar no botão de excluir após ter pesquisado um filme, é feita a exclusão através do método executeQuery(SQL) e vai aparecer uma mensagem dizendo que a exclusão foi realizada com sucesso. Se houve algum erro como, por exemplo, do filme não foi encontrado, então aparece a mensagem dizendo que não foi possível excluir o filme. E por fim se encontrar erro de SQL é informado que houve um erro durante a execução do comando SQL. Logo após é executado o método para limpar os campos na tela.
    o if (e.getSource()==b4 || e.getSource()==tfCodigo) // caso o usuário clicar no botão de localizar ou ter informado um código anteriormente, é feita a pesquisa do filme dentro de um bloco try catch, é executado uma instrução SQL para Select onde vai selecionar todos os campos do registro pesquisado através do método executeQuery(SQL) e retornará informação por informação em cada um dos campos. Caso contrário, por erro de SQL ou por não ter encontrado nenhum filme já gravado, é emitido uma mensagem.
  • O método limpaCampos() tem a finalidade para que todos os campos da tela sejam limpados (apagados).
  • O método atualizaCampos()é responsável por ser um auxiliar na hora de criação de objetos com seus dados/valores na tela.

Após isso, basta executar o projeto (com a tecla de atalho F5) e aparecerá a janela da forma, como ilustra a Figura 9.

Tela inicial do projeto JAVA – Gerenciamento de Filmes
Figura 9. Tela inicial do projeto JAVA – Gerenciamento de Filmes