Professional Documents
Culture Documents
Definio
A linguagem Java possui classes que permitem a conexo com banco de dados. Para que seja possvel realizar a manipulao de banco de dados em Java, necessrio que diversos procedimentos sejam realizados a fim de configurar o sistema. Os passos necessrios para a manipulao de banco de dados por meio de uma aplicao so os seguintes: 1) A criao do banco de dados; 2) A configurao do sistema por meio da criao de uma fonte de dados entre o banco de dados criado e a linguagem Java (fonte ODBC-JDBC); 3) A criao da aplicao Java propriamente dita.
Configurao do Sistema
Para que seja possvel acessar o banco de dados em Java, necessrio criar uma fonte de dados ODBC por meio do sistema operacional. Esta fonte de dados ser usada para estabelecer uma ponte de comunicao entre o banco de dados e o Java. Realize os seguintes procedimentos: 1) Clique no boto iniciar, escolha configuraes e Painel de Controle; 2) D um duplo-clique sobre o item ODBC 32 bits; 3) Acesse a guia NDF (Nome da Fontes de Dados) de usurios e pressione o boto adicionar, conforme a figura a seguir:
instncia da classe ou interface designada pela String s. - A JVM deve poder encontrar a classe especificada. Caso essa no seja encontrada, lanada uma exceo ClassNotFoundException. - Para aplicaes, a varivel de ambiente CLASSPATH deve incluir os drivers.
getConnection da classe DriverManager (o servio bsico para gerenciamento de um conjunto de drivers JDBC). Retorna um objeto do tipo Connection. A URL composta de protocolo:subprotocolo:subnome. O DriverManager tenta conectar com o primeiro driver carregado; se no consegue, tenta o driver seguinte. Caso no seja localizado, lanada uma exceo SQLException. A classe Connection possibilita estabelecer uma conexo em banco de dados utilizando o seu nome (anyname) e uma senha (password) quando isso se fizer necessrio, que no o nosso caso. Esses argumentos so opcionais e podem ser desconsiderados.
Exemplo: Connection conexao=DriverManager.getConnection(url,UserID,password );
Exemplo de Conexo
import java.sql.*; public class TestaConexao{ private String driver,url; private Connection conexao; public TestaConexao(){ driver="sun.jdbc.odbc.JdbcOdbcDriver"; url="jdbc:odbc:Empresa"; conecta(driver,url); } public void conecta(String driver, String url){ try{ // carrega o driver da ponte jdbc-odbc Class.forName(driver); // abre conexao com o banco de dados conexao=DriverManager.getConnection(url); System.out.println("Conexo executada com sucesso"); conexao.close(); }
Criao do Statement
Esta classe tem por objetivo executar um comando SQL e obter o resultado produzido por esse. Apenas um ResultSet (resultado SQL) pode ser aberto a cada vez. Um objeto desta classe criado pelo mtodo createStatement a partir da conexo j estabelecida. Statement comando=conexao.createStatement(); ou Statement comando=conexao.createStatement(navegao,ao)- Cria um objeto com os parmetros fornecidos que iro definir o comportamento do objeto Statement, em que: Navegao pode ser: TYPE_FORWARD_ONLY (navegao apenas para frente, TYPE_SCROLL_INSENSITIVE (navegao nos dois sentidos) ou TYPE_SCROLL_SENSITIVE (navegao nos dois sentidos). Os dois ltimos tipos de navegao so similares. A diferena que as alteraes no contedo da tabela realizadas em tempo de execuo no refletem no tipo INSENSITIVE, enquanto no SENSITIVE sim. Se o parmetro de navegao no for especificado, ser usada a navegao TYPE_FORWARD_ONLY.
A classe Statement
Dois dos seus principais mtodos so:
- ResultSet executeQuery(String sql): usado para comandos SQL que retornam uma nica tabela (ResultSet), tipicamente o SELECT. - int executeUpdate(String sql): usado para executar comandos SQL que alteram a tabela (CREATE, INSERT, UPDATE ou DELETE). Retorna o nmero de colunas alteradas.
Movimentao em Registros
Quando um ResultSet navegvel, diversas operaes podem ser realizadas por meio dele, pelos mtodos de movimentao do ponteiro, os quais so descritos a seguir: first() posiciona o ponteiro no primeiro registro do objeto ReusltSet; last() posiciona o ponteiro no ltimo registro do objeto do ResultSet; next() posiciona o ponteiro no prximo registro do objeto do ResultSet; previous() posiciona o ponteiro no registro anterior do objeto do ResultSet;
Transaes
Uma transao um conjunto de um ou mais comandos que so executados juntos como uma unidade: se no for possvel que todos sejam executados, ento nenhum deles ser executado. Uma transao um conjunto de Statements que so validados no BD com commit ou cancelados com rollback. Transaes podem ajudar a preservar a integridade dos dados de uma tabela. Por default, todos os comandos no JDBC so auto-commit.
con.setAutoCommit(false); // muda o default Statement stmt = con.createStatement(); stmt.executeUpdate(...); stmt.executeUpdate(...); if (...) con.commit(); //se Ok, valida os 2 updates else con.rollback(); //seno, desfaz os updates
O exemplo a seguir mostrar os procedimentos necessrios para executar comandos DML ao banco de dados por meio de comandos SQL.
import java.sql.*; public class TestaDML{ private static String driver,url; private Connection conexao; private Statement comando; private ResultSet resultado; public TestaDML(){ driver="sun.jdbc.odbc.JdbcOdbcDriver"; url="jdbc:odbc:Empresa"; //url="jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=c:/java/empresa.mdb"; }
Exemplo (cont.)
public void conecta(){ try{ // carrega o driver da ponte jdbc-odbc Class.forName(driver); // abre conexao com o banco de dados conexao=DriverManager.getConnection(url); System.out.println("Conexo executada com sucesso"); } catch(SQLException SqlExc){ System.out.println("Erro de SQL!"); } catch(ClassNotFoundException exc){ System.out.println("Classe no encontrada!"); } }
Exemplo (cont.)
public void insereDados(){ try{ String sql="insert into empregados values(1238,'Marcos','Analista',2000);"; comando=conexao.createStatement(); comando.executeUpdate(sql); } catch(SQLException SqlExc){ System.out.println("Erro de SQL!"); } }
Exemplo (cont.)
public void listaDados (){ String sql="select cpf,nome,cargo,salario from empregados"; try{ comando=conexao.createStatement(); resultado=comando.executeQuery(sql); while(resultado.next()){ String cpf=resultado.getString("cpf"); String nome=resultado.getString("nome"); String cargo=resultado.getString("cargo"); String salario=resultado.getString("salario"); System.out.println("CPF: "+cpf+" - "+"NOME: "+nome+" "+"CARGO: "+cargo+" - "+"SALARIO:"+salario); } } catch(SQLException SqlExc){ System.out.println("Erro de SQL!"); }}
Exemplo (cont.)
public void modificaDados(){ try{ String sql="update empregados set salario=3000 where cpf=1238;"; comando=conexao.createStatement(); comando.executeUpdate(sql); } catch(SQLException SqlExc){ System.out.println("Erro de SQL!"); } }
Exemplo (cont.)
public void eliminaDados(){ try{ String sql="delete from empregados where cpf=1238;"; comando=conexao.createStatement(); comando.executeUpdate(sql); } catch(SQLException SqlExc){ System.out.println("Erro de SQL!"); } }
Exemplo (cont.)
public void desconecta(){ try{ conexao.close(); } catch(SQLException SqlExc){ System.out.println("Erro de SQL!"); } } public static void main(String args[]){ TestaDML tdml=new TestaDML(); tdml.conecta(); tdml.insereDados(); tdml.listaDados(); tdml.modificaDados(); tdml.eliminaDados(); tdml.desconecta(); }
Exemplo de navegao em BD
import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.sql.*; public class NavegaBanco extends JFrame implements ActionListener{ private JLabel jlcpf,jlnome,jlcargo,jlsalario; private JTextField jtfcpf,jtfnome,jtfcargo,jtfsalario; private JButton jbproximo,jbanterior,jbprimeiro,jbultimo, jbalterar,jbincluir,jbexcluir,jbsair,jblimpa; private JPanel jpdados,jpnavegacao,jpalteracao,jpgeral; private Connection conexao; private Statement comando; private ResultSet resultado; private static String driver,url;
Exerccio
Como sugesto para manipulao de banco de dados, faa um cadastro de clientes, seguindo os mesmos procedimentos apresentados no cadastramento de empregados. Utilize pelo menos os campos cdigo, nome, endereo, telefone e sexo. Voc deve seguir todos os passos desde a criao do banco de dados. Utilize sua criatividade.
Bibliografia
- FURGERI, Srgio. Java 2: Ensino didtico: Desenvolvendo e Implementando Aplicaes - So Paulo: rica, 372p. 2002. - TAMASSIA, R.; GOODRICH, M.T. Estrutura de Dados e Algoritmos em Java. Bookman, 2002. - DEITEL,H.M.; DEITEL, P.J. Java: Como Programar, Bookman, 2002.