SlideShare uma empresa Scribd logo
Linguagens e Técnicas de Programação - JAVA José  Marcos  Barbosa da Silveira [email_address]
Manipulação de Banco de Dados com Java Objetivos deste capítulo Demonstrar os fundamentos básicos para a manipulação de banco de dados com Java; Conceituar e demonstrar a criação de uma fonte de dados; Demonstrar como uma aplicação realiza uma conexão e manipulação de banco de dados; Apresentar as técnicas para navegação em registros; Apresentar a sintaxe de comandos SQL usados em Java; Enumerar os aspectos essenciais para a consulta de banco de dados.
Definição A linguagem Java possui classes que permitem a conexão com banco de dados.  Para que seja possível realizar a manipulação de banco de dados em Java, é necessário que diversos procedimentos sejam realizados a fim de configurar o sistema. Os passos necessários para a manipulação de banco de dados por meio de uma aplicação são os seguintes: 1) A criação do banco de dados; 2) A configuração do sistema por meio da criação de uma fonte de dados entre o banco de dados criado e a linguagem Java (fonte ODBC-JDBC); 3) A criação da aplicação Java propriamente dita.
A Criação do Banco de Dados A criação do banco de dados é uma tarefa bem simples que será realizada com Microsoft Access 2000.  Realize os seguintes procedimentos: 1) Abra o Access; 2) Crie um banco de dados; 3) Crie uma tabela, por exemplo: #cpf  numero 11  (duplo) *nome  texto  50 *cargo  texto  30 *salario  numero  9 (decimal) Onde: # representa a chave primária e  * campos obrigatórios
Configuração do Sistema Para que seja possível acessar o banco de dados em Java, é necessário criar uma fonte de dados ODBC por meio do sistema operacional. Esta fonte de dados será usada para estabelecer uma ponte de comunicação entre o banco de dados  e o Java. Realize os seguintes procedimentos: 1) Clique no botão iniciar, escolha configurações 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 usuários e pressione o botão adicionar, conforme a figura a seguir:
Configuração do Sistema (cont.)
Configuração do Sistema (cont.) 4)  A próxima janela apresenta todos os drivers disponíveis. Como estamos trabalhando com banco de dados Access, deve ser escolhido o driver Microsoft Access Driver. A seguir clique no botão concluir.
Configuração do Sistema (cont.) 5) Na próxima janela  no campo Nome da fonte de dados digite o nome que deseja dar a fonte de dados, por exemplo Empresa. Depois clique no botão selecionar e localize o banco de dados criado anteriormente.
Configuração do Sistema (cont.) 6) A fonte de dados criada deve aparecer entre as fontes de dados do usuário. Neste ponto, o banco de dados que será manipulado pela aplicação já está criado e devidamente configurado.
1.  Incluir no programa:  import java.sql.*; 2.  Carregar corretamente o driver desejado. 3.  Conectar com o banco de dados. 4.  Criar o comando JDBC. 5.  Enviar comandos SQL. 6.  Capturar dados da tabela resultante. 7.  Confirmar ou desfazer transações. 8.  Recuperar metadados sobre a tabela  resultante ou sobre o BD atual. JDBC – principais passos Importante:   os índices em JDBC começam em 1.
O ClassLoader tenta localizar e carregar uma instância da classe ou interface designada pela String s. A JVM deve poder encontrar a classe especificada. Caso essa não seja encontrada, é lançada uma exceção  ClassNotFoundException .  Para aplicações, a variável de ambiente CLASSPATH deve incluir os drivers. JDBC – Carga do driver Vários drivers podem ser carregados com o método Class.forName( String s). Por exemplo: Class.forName (“oracle.jdbc.driver.OracleDriver”); Class.forName (“sun.jdbc.odbc.JdbcOdbcDriver”);
JDBC – Conexão com o BD A abertura da conexão (sessão) é feita pelo método  getConnection  da classe DriverManager (o serviço básico 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 não consegue, tenta o driver seguinte. Caso não seja localizado, é lançada uma exceção  SQLException . A classe Connection possibilita estabelecer uma conexão em banco de dados utilizando o seu nome (anyname) e uma senha (password) quando isso se fizer necessário, que não é o nosso caso. Esses argumentos são opcionais e podem ser desconsiderados. Exemplo:   Connection conexao=DriverManager.getConnection(url,”UserID”,”password” );
Exemplo de Conexão 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("Conexão executada com sucesso"); conexao.close(); }
Exemplo de Conexão (cont.) catch(SQLException SqlExc){ System.out.println("Erro de SQL!"); } catch(ClassNotFoundException exc){ System.out.println("Classe não encontrada!"); } } public  static void main(String args[]){ TestaConexao ins=new TestaConexao(); } }
Criação 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 método  createStatement   a partir da conexão já estabelecida. Statement comando=conexao.createStatement(); ou Statement comando=conexao.createStatement(navegação,ação)- Cria um objeto com os parâmetros fornecidos que irão definir o comportamento do objeto Statement, em que: Navegação  pode ser: TYPE_FORWARD_ONLY (navegação apenas para frente, TYPE_SCROLL_INSENSITIVE (navegação nos dois sentidos) ou TYPE_SCROLL_SENSITIVE (navegação nos dois sentidos). Os dois últimos tipos de navegação são similares. A diferença é que as alterações no conteúdo da tabela realizadas em tempo de execução não refletem no tipo INSENSITIVE, enquanto no SENSITIVE sim. Se o parâmetro de navegação não for especificado, será usada a navegação TYPE_FORWARD_ONLY.
Criação do Statement (cont.) Ação  pode ser: CONCUR_READ_ONLY (somente leitura) ou CONCUR_UPDATABLE (leitura e atualização). Refere-se ao modo como o objeto ResultSet será criado, ou seja, se ele será somente leitura ou seu valor pode ser alterado. Há outros dois subtipos de Statement: PreparedStatement  : o comando SQL é pré-compilado e utilizado posteriormente, sendo mais eficiente nos casos onde o mesmo comando é utilizado várias vezes. Utiliza o método con. prepareStatement (String sql) . Este  comando pode conter um ou mais '?' parâmetros. CallableStatement  : utilizado para chamar procedimentos SQL armazenados no BD (stored procedures). Utiliza o método con. prepareCall (String sql) .
A classe Statement Dois dos seus principais métodos são: 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 número de colunas alteradas .
Movimentação em Registros Quando um ResultSet é navegável, diversas operações podem ser realizadas por meio dele, pelos métodos de movimentação do ponteiro, os quais são 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 próximo registro do objeto do ResultSet; previous() – posiciona o ponteiro no registro anterior do objeto do ResultSet;
Envio de comandos SQL Obtenção do resultado A classe  ResultSet  oferece à aplicação a tabela resultante de um SELECT. Mantém um cursor posicionando em uma linha da tabela. De início, esse cursor está posicionado antes da primeira linha. O método  next( )  é que movimenta o cursor para o próximo registro. Permite à aplicação capturar os dados de cada coluna da tupla (linha) corrente através do método  getXXX(<coluna>) , onde  XXX  é o tipo da coluna e  <coluna>  é o nome da coluna ou sua posição ( a partir de 1 ). Exemplo : ResultSet  rs = stmt. executeQuery  ( “ select a, b, c from table1”); while (rs. next  ( )) {   int x  =  rs. getInt (“a”); String s  =  rs. getString (2); float f  =  rs. getFloat (“c”); }
Uma transação é um conjunto de um ou mais comandos que são executados juntos como uma unidade: se não for possível que todos sejam executados, então nenhum deles será executado. Uma transação é um conjunto de Statements que são validados no BD com  commit  ou cancelados com  rollback .  Transações podem ajudar a preservar a integridade dos dados de uma tabela. Por default, todos os comandos no JDBC são auto-commit. Transações 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 ();  //senão, desfaz os updates
Consulta do Banco de Dados por meio do SQL O exemplo a seguir mostrar os procedimentos necessários 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=&quot;sun.jdbc.odbc.JdbcOdbcDriver&quot;;   url=&quot;jdbc:odbc:Empresa&quot;; //url=&quot;jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=c:/java/empresa.mdb&quot;; }
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(&quot;Conexão executada com sucesso&quot;); } catch(SQLException SqlExc){ System.out.println(&quot;Erro de SQL!&quot;); } catch(ClassNotFoundException exc){ System.out.println(&quot;Classe não encontrada!&quot;); } }
Exemplo (cont.) public void insereDados(){ try{ String sql=&quot;insert into empregados values(1238,'Marcos','Analista',2000);&quot;; comando=conexao.createStatement(); comando.executeUpdate(sql); } catch(SQLException SqlExc){ System.out.println(&quot;Erro de SQL!&quot;); } }
Exemplo (cont.) public void listaDados (){   String sql=&quot;select cpf,nome,cargo,salario from empregados&quot;; try{ comando=conexao.createStatement(); resultado=comando.executeQuery(sql); while(resultado.next()){ String cpf=resultado.getString(&quot;cpf&quot;); String nome=resultado.getString(&quot;nome&quot;); String cargo=resultado.getString(&quot;cargo&quot;); String salario=resultado.getString(&quot;salario&quot;); System.out.println(&quot;CPF: &quot;+cpf+&quot; - &quot;+&quot;NOME: &quot;+nome+&quot; - &quot;+&quot;CARGO: &quot;+cargo+&quot; - &quot;+&quot;SALARIO:&quot;+salario); } } catch(SQLException SqlExc){ System.out.println(&quot;Erro de SQL!&quot;); } }
Exemplo (cont.) public void modificaDados(){ try{ String sql=&quot;update empregados set salario=3000 where cpf=1238;&quot;; comando=conexao.createStatement();   comando.executeUpdate(sql); } catch(SQLException SqlExc){ System.out.println(&quot;Erro de SQL!&quot;); } }
Exemplo (cont.) public void eliminaDados(){ try{ String sql=&quot;delete from empregados where cpf=1238;&quot;; comando=conexao.createStatement(); comando.executeUpdate(sql); } catch(SQLException SqlExc){ System.out.println(&quot;Erro de SQL!&quot;); } }
Exemplo (cont.) public void desconecta(){ try{ conexao.close(); } catch(SQLException SqlExc){ System.out.println(&quot;Erro de SQL!&quot;); } } public  static void main(String args[]){ TestaDML tdml=new TestaDML(); tdml.conecta();   tdml.insereDados();   tdml.listaDados();   tdml.modificaDados();   tdml.eliminaDados();   tdml.desconecta(); } }
Navegando no BD através de uma interface gráfica O exemplo a seguir apresenta a navegação em uma interface gráfica. O exemplo foi dividido em diversos métodos a fim de facilitar o entendimento. Os tratamentos de exceção não foram introduzidos para não deixar o código muito extenso.
Exemplo de navegação 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;
Exemplo de navegação em BD (cont.) public NavegaBanco(){ driver=&quot;sun.jdbc.odbc.JdbcOdbcDriver&quot;; url=&quot;jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=c:/java/empresa.mdb&quot;; jlcpf=new JLabel(&quot;CPF&quot;); jlnome=new JLabel(&quot;Nome&quot;); jlcargo=new JLabel(&quot;Cargo&quot;); jlsalario=new JLabel(&quot;Salário&quot;); jtfcpf=new JTextField(10); jtfnome=new JTextField(10); jtfcargo=new JTextField(10); jtfsalario=new JTextField(10); jbproximo=new JButton(&quot;próximo&quot;); jbanterior=new JButton(&quot;anterior&quot;); jbprimeiro=new JButton(&quot;primeiro&quot;); jbultimo=new JButton(&quot;último&quot;);
Exemplo de navegação em BD (cont.) jbincluir=new JButton(&quot;incluir&quot;); jbalterar=new JButton(&quot;alterar&quot;); jbexcluir=new JButton(&quot;excluir&quot;); jbsair=new JButton(&quot;sair&quot;); jblimpa=new JButton(&quot;limpar&quot;); jpdados=new JPanel(new GridLayout(4,1)); jpnavegacao=new JPanel(new FlowLayout()); jpalteracao=new JPanel(new FlowLayout()); jpgeral=new JPanel(new GridLayout(4,2)); jpdados.add(jlcpf); jpdados.add(jtfcpf); jpdados.add(jlnome); jpdados.add(jtfnome); jpdados.add(jlcargo); jpdados.add(jtfcargo); jpdados.add(jlsalario); jpdados.add(jtfsalario);
Exemplo de navegação em BD (cont.) jpnavegacao.add(jbproximo); jpnavegacao.add(jbanterior); jpnavegacao.add(jbprimeiro); jpnavegacao.add(jbultimo); jpalteracao.add(jbincluir); jpalteracao.add(jbalterar); jpalteracao.add(jbexcluir); jpalteracao.add(jblimpa); jpalteracao.add(jbsair); jpgeral.add(jpdados); jpgeral.add(jpnavegacao); jpgeral.add(jpalteracao); getContentPane().add(jpgeral); jbproximo.addActionListener(this); jbanterior.addActionListener(this); jbprimeiro.addActionListener(this); jbultimo.addActionListener(this);
Exemplo de navegação em BD (cont.) jbsair.addActionListener(this); jblimpa.addActionListener(this); jbincluir.addActionListener(this); jbalterar.addActionListener(this); jbexcluir.addActionListener(this); setTitle(&quot;Navegando no Banco de Dados&quot;); setVisible(true); pack(); }
Exemplo de navegação em BD (cont.) public void actionPerformed(ActionEvent e){ try{ if(e.getSource()==jbproximo) resultado.next(); if(e.getSource()==jbanterior) resultado.previous(); if(e.getSource()==jbprimeiro) resultado.first(); if(e.getSource()==jbultimo) resultado.last(); if(e.getSource()==jbincluir) insereDados(); if(e.getSource()==jbalterar) modificaDados(); if(e.getSource()==jbexcluir) eliminaDados();
Exemplo de navegação em BD (cont.) if(e.getSource()==jblimpa) limpaCampos(); if(e.getSource()!=jblimpa || e.getSource()!=jbexcluir)atualizaCampos(); if(e.getSource()==jbsair){ desconecta(); System.exit(0); } } catch(SQLException SqlExc){ System.out.println(&quot;Erro de SQL!&quot;); } }
Exemplo de navegação em BD (cont.) public void conecta(){ try{   Class.forName(driver);   conexao=DriverManager.getConnection(url);   System.out.println(&quot;Conexão executada com sucesso&quot;); } catch(SQLException SqlExc){   System.out.println(&quot;Erro de SQL!&quot;); } catch(ClassNotFoundException exc){   System.out.println(&quot;Classe não encontrada!&quot;); } } public void listaDados (){ String sql=&quot;select cpf,nome,cargo,salario from empregados&quot;;
Exemplo de navegação em BD (cont.) try{ comando=conexao.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE ); resultado=comando.executeQuery(sql); resultado.first(); atualizaCampos(); } catch(SQLException SqlExc){ System.out.println(&quot;Erro de SQL!&quot;); } } public void insereDados(){ try{   String sql=&quot;insert into empregados values(&quot;+jtfcpf.getText()+&quot;,'&quot;+jtfnome.getText()+&quot;','&quot;+
Exemplo de navegação em BD (cont.) jtfcargo.getText()+&quot;',&quot;+jtfsalario.getText()+&quot;);&quot;; comando.executeUpdate(sql); listaDados (); } catch(SQLException SqlExc){ System.out.println(&quot;Erro de SQL!&quot;); } }
Exemplo de navegação em BD (cont.) public void modificaDados(){ try{   String sql=&quot;update empregados set nome='&quot;+jtfnome.getText()+&quot;',cargo='&quot;+jtfcargo.getText()+&quot;',salario=&quot;+jtfsalario.getText()+&quot; where cpf=&quot;+jtfcpf.getText()+&quot;;&quot;;   comando.executeUpdate(sql);   listaDados (); } catch(SQLException SqlExc){   System.out.println(&quot;Erro de SQL!&quot;); } }
Exemplo de navegação em BD (cont.) public void eliminaDados(){ try{   String sql=&quot;delete from empregados where cpf=&quot;+jtfcpf.getText()+&quot;;&quot;;   comando.executeUpdate(sql);   listaDados (); } catch(SQLException SqlExc){ System.out.println(&quot;Erro de SQL!&quot;); } }
Exemplo de navegação em BD (cont.) public void atualizaCampos(){ try{   jtfcpf.setText(resultado.getString(&quot;cpf&quot;));   jtfnome.setText(resultado.getString(&quot;nome&quot;));   jtfcargo.setText(resultado.getString(&quot;cargo&quot;));   jtfsalario.setText(resultado.getString(&quot;salario&quot;)); } catch(SQLException SqlExc){   System.out.println(&quot;Erro de SQL!&quot;); } }
Exemplo de navegação em BD (cont.) public void limpaCampos(){ jtfcpf.setText(&quot;&quot;); jtfnome.setText(&quot;&quot;); jtfcargo.setText(&quot;&quot;); jtfsalario.setText(&quot;&quot;); } public  void desconecta(){ try{ conexao.close(); } catch(SQLException SqlExc){ System.out.println(&quot;Erro de SQL!&quot;); } } public static void main(String args[]){ NavegaBanco nb=new NavegaBanco(); nb.conecta(); nb.listaDados(); } }
Exercício Como sugestão para manipulação de banco de dados, faça um cadastro de clientes, seguindo os mesmos procedimentos apresentados no cadastramento de empregados. Utilize pelo menos os campos código, nome, endereço, telefone e sexo. Você deve seguir todos os passos desde a criação do banco de dados. Utilize sua criatividade.
Bibliografia FURGERI, Sérgio.  Java 2: Ensino didático: Desenvolvendo e Implementando Aplicações  – São 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.

Mais conteúdo relacionado

Mais procurados (20)

PPTX
Curso Java Básico - Aula 03
Natanael Fonseca
 
PPTX
Curso Java Básico - Aula02
Natanael Fonseca
 
PDF
Java orientação a objetos (variaveis de instancia e metodos)
Armando Daniel
 
PDF
Curso de Java (Parte 4)
Mario Sergio
 
PDF
Curso de Java (Parte 3)
Mario Sergio
 
PPTX
Curso Java Básico - Aula 01
Natanael Fonseca
 
PPTX
Curso Java Básico - Aula 04
Natanael Fonseca
 
PDF
Curso de Java (Parte 2)
Mario Sergio
 
PPTX
Introdução a linguagem C# (CSharp)
Marcos Castro
 
PDF
Revisão Sobre Programação Orientada a Objetos com Java
Mario Jorge Pereira
 
PDF
Java orientação a objetos (interfaces)
Armando Daniel
 
PPTX
Aula05
Natanael Fonseca
 
PDF
Java introdução ao java
Armando Daniel
 
PDF
Apostila de Introdução a POO com C#
Andre Nascimento
 
ODP
Java 10 Classes Abstratas Interfaces
Regis Magalhães
 
PPTX
Curso Básico de Java - Aula 2
PeslPinguim
 
PDF
Exercícios de programação orientado a objeto
Gleyciana Garrido
 
Curso Java Básico - Aula 03
Natanael Fonseca
 
Curso Java Básico - Aula02
Natanael Fonseca
 
Java orientação a objetos (variaveis de instancia e metodos)
Armando Daniel
 
Curso de Java (Parte 4)
Mario Sergio
 
Curso de Java (Parte 3)
Mario Sergio
 
Curso Java Básico - Aula 01
Natanael Fonseca
 
Curso Java Básico - Aula 04
Natanael Fonseca
 
Curso de Java (Parte 2)
Mario Sergio
 
Introdução a linguagem C# (CSharp)
Marcos Castro
 
Revisão Sobre Programação Orientada a Objetos com Java
Mario Jorge Pereira
 
Java orientação a objetos (interfaces)
Armando Daniel
 
Java introdução ao java
Armando Daniel
 
Apostila de Introdução a POO com C#
Andre Nascimento
 
Java 10 Classes Abstratas Interfaces
Regis Magalhães
 
Curso Básico de Java - Aula 2
PeslPinguim
 
Exercícios de programação orientado a objeto
Gleyciana Garrido
 

Semelhante a Java13 (20)

PDF
Apostila: Curso de java III
Verônica Veiga
 
PDF
Fundamentos de JDBC
Mario Jorge Pereira
 
PDF
Fundamentos de JDBC
Denis L Presciliano
 
PDF
Fundamentos de JDBC
Denis L Presciliano
 
PDF
Java com banco my sql
Andre Oliveira
 
PPTX
Java database connectivity jdbc
Dinarte Filho
 
PDF
Apache Struts
Denis L Presciliano
 
PDF
Conectando seu banco de dados usando jdbc
Jeison Barros
 
PPT
Spring & Struts
eduan
 
PDF
Desenvolvimento de Apps e Games para Android - Parte 6
Erisvaldo Junior
 
PDF
Jdbc, JAVA DATABASE CONNECTIVITY
raquelcarsi
 
PDF
Java Web - MVC básico com JSP e Servlets
Eduardo Mendes
 
PPS
Trabalho teorico de Linguagem de Programação
carlosveiga
 
PDF
Silo.tips utilizando os-componentes-da-paleta-dbexpress-para-acesso-ao-banco-...
Edisio Nascimento
 
ODP
Java 16 Jdbc
Regis Magalhães
 
PDF
Persistência com JPA usando o NetBeans 7
Claudio Martins
 
PDF
Testes em Aplicações Web com Cactus
Denis L Presciliano
 
PPT
Aula1
mentrixmax
 
Apostila: Curso de java III
Verônica Veiga
 
Fundamentos de JDBC
Mario Jorge Pereira
 
Fundamentos de JDBC
Denis L Presciliano
 
Fundamentos de JDBC
Denis L Presciliano
 
Java com banco my sql
Andre Oliveira
 
Java database connectivity jdbc
Dinarte Filho
 
Apache Struts
Denis L Presciliano
 
Conectando seu banco de dados usando jdbc
Jeison Barros
 
Spring & Struts
eduan
 
Desenvolvimento de Apps e Games para Android - Parte 6
Erisvaldo Junior
 
Jdbc, JAVA DATABASE CONNECTIVITY
raquelcarsi
 
Java Web - MVC básico com JSP e Servlets
Eduardo Mendes
 
Trabalho teorico de Linguagem de Programação
carlosveiga
 
Silo.tips utilizando os-componentes-da-paleta-dbexpress-para-acesso-ao-banco-...
Edisio Nascimento
 
Java 16 Jdbc
Regis Magalhães
 
Persistência com JPA usando o NetBeans 7
Claudio Martins
 
Testes em Aplicações Web com Cactus
Denis L Presciliano
 
Aula1
mentrixmax
 
Anúncio

Mais de Robson Silva Espig (20)

PDF
Master Place - Convenção Bloco D
Robson Silva Espig
 
PPS
Aquarelas Envelhecidas
Robson Silva Espig
 
PDF
[ reference ] Processos - PMBOK
Robson Silva Espig
 
PDF
[ ref ] Convergência - Mobilidade
Robson Silva Espig
 
PDF
[ ref ] Normalizing a Data Model in SQL Server
Robson Silva Espig
 
PDF
A Evolucao dos Processos de Desenvolvimento de Software
Robson Silva Espig
 
PDF
Como implementar uma plataforma de ILM com eficiência, reduzindo custos
Robson Silva Espig
 
PDF
Gestao Projetos - Aula 02
Robson Silva Espig
 
PDF
Gestao Projetos - Aula 01
Robson Silva Espig
 
PDF
Aula 01
Robson Silva Espig
 
PDF
Aula 05
Robson Silva Espig
 
PDF
Aula 04
Robson Silva Espig
 
PDF
Aula 02
Robson Silva Espig
 
PDF
Caso de Desenvolvimento
Robson Silva Espig
 
PDF
Aula 03
Robson Silva Espig
 
PDF
Artigo Caso de Uso
Robson Silva Espig
 
PDF
Analise de Requisitos de Software
Robson Silva Espig
 
PDF
Desenvolvimento Iterativo e Incremental
Robson Silva Espig
 
Master Place - Convenção Bloco D
Robson Silva Espig
 
Aquarelas Envelhecidas
Robson Silva Espig
 
[ reference ] Processos - PMBOK
Robson Silva Espig
 
[ ref ] Convergência - Mobilidade
Robson Silva Espig
 
[ ref ] Normalizing a Data Model in SQL Server
Robson Silva Espig
 
A Evolucao dos Processos de Desenvolvimento de Software
Robson Silva Espig
 
Como implementar uma plataforma de ILM com eficiência, reduzindo custos
Robson Silva Espig
 
Gestao Projetos - Aula 02
Robson Silva Espig
 
Gestao Projetos - Aula 01
Robson Silva Espig
 
Caso de Desenvolvimento
Robson Silva Espig
 
Artigo Caso de Uso
Robson Silva Espig
 
Analise de Requisitos de Software
Robson Silva Espig
 
Desenvolvimento Iterativo e Incremental
Robson Silva Espig
 
Anúncio

Java13

  • 1. Linguagens e Técnicas de Programação - JAVA José Marcos Barbosa da Silveira [email_address]
  • 2. Manipulação de Banco de Dados com Java Objetivos deste capítulo Demonstrar os fundamentos básicos para a manipulação de banco de dados com Java; Conceituar e demonstrar a criação de uma fonte de dados; Demonstrar como uma aplicação realiza uma conexão e manipulação de banco de dados; Apresentar as técnicas para navegação em registros; Apresentar a sintaxe de comandos SQL usados em Java; Enumerar os aspectos essenciais para a consulta de banco de dados.
  • 3. Definição A linguagem Java possui classes que permitem a conexão com banco de dados. Para que seja possível realizar a manipulação de banco de dados em Java, é necessário que diversos procedimentos sejam realizados a fim de configurar o sistema. Os passos necessários para a manipulação de banco de dados por meio de uma aplicação são os seguintes: 1) A criação do banco de dados; 2) A configuração do sistema por meio da criação de uma fonte de dados entre o banco de dados criado e a linguagem Java (fonte ODBC-JDBC); 3) A criação da aplicação Java propriamente dita.
  • 4. A Criação do Banco de Dados A criação do banco de dados é uma tarefa bem simples que será realizada com Microsoft Access 2000. Realize os seguintes procedimentos: 1) Abra o Access; 2) Crie um banco de dados; 3) Crie uma tabela, por exemplo: #cpf numero 11 (duplo) *nome texto 50 *cargo texto 30 *salario numero 9 (decimal) Onde: # representa a chave primária e * campos obrigatórios
  • 5. Configuração do Sistema Para que seja possível acessar o banco de dados em Java, é necessário criar uma fonte de dados ODBC por meio do sistema operacional. Esta fonte de dados será usada para estabelecer uma ponte de comunicação entre o banco de dados e o Java. Realize os seguintes procedimentos: 1) Clique no botão iniciar, escolha configurações 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 usuários e pressione o botão adicionar, conforme a figura a seguir:
  • 7. Configuração do Sistema (cont.) 4) A próxima janela apresenta todos os drivers disponíveis. Como estamos trabalhando com banco de dados Access, deve ser escolhido o driver Microsoft Access Driver. A seguir clique no botão concluir.
  • 8. Configuração do Sistema (cont.) 5) Na próxima janela no campo Nome da fonte de dados digite o nome que deseja dar a fonte de dados, por exemplo Empresa. Depois clique no botão selecionar e localize o banco de dados criado anteriormente.
  • 9. Configuração do Sistema (cont.) 6) A fonte de dados criada deve aparecer entre as fontes de dados do usuário. Neste ponto, o banco de dados que será manipulado pela aplicação já está criado e devidamente configurado.
  • 10. 1. Incluir no programa: import java.sql.*; 2. Carregar corretamente o driver desejado. 3. Conectar com o banco de dados. 4. Criar o comando JDBC. 5. Enviar comandos SQL. 6. Capturar dados da tabela resultante. 7. Confirmar ou desfazer transações. 8. Recuperar metadados sobre a tabela resultante ou sobre o BD atual. JDBC – principais passos Importante: os índices em JDBC começam em 1.
  • 11. O ClassLoader tenta localizar e carregar uma instância da classe ou interface designada pela String s. A JVM deve poder encontrar a classe especificada. Caso essa não seja encontrada, é lançada uma exceção ClassNotFoundException . Para aplicações, a variável de ambiente CLASSPATH deve incluir os drivers. JDBC – Carga do driver Vários drivers podem ser carregados com o método Class.forName( String s). Por exemplo: Class.forName (“oracle.jdbc.driver.OracleDriver”); Class.forName (“sun.jdbc.odbc.JdbcOdbcDriver”);
  • 12. JDBC – Conexão com o BD A abertura da conexão (sessão) é feita pelo método getConnection da classe DriverManager (o serviço básico 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 não consegue, tenta o driver seguinte. Caso não seja localizado, é lançada uma exceção SQLException . A classe Connection possibilita estabelecer uma conexão em banco de dados utilizando o seu nome (anyname) e uma senha (password) quando isso se fizer necessário, que não é o nosso caso. Esses argumentos são opcionais e podem ser desconsiderados. Exemplo: Connection conexao=DriverManager.getConnection(url,”UserID”,”password” );
  • 13. Exemplo de Conexão import java.sql.*; public class TestaConexao{ private String driver,url; private Connection conexao; public TestaConexao(){ driver=&quot;sun.jdbc.odbc.JdbcOdbcDriver&quot;; url=&quot;jdbc:odbc:Empresa&quot;; 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(&quot;Conexão executada com sucesso&quot;); conexao.close(); }
  • 14. Exemplo de Conexão (cont.) catch(SQLException SqlExc){ System.out.println(&quot;Erro de SQL!&quot;); } catch(ClassNotFoundException exc){ System.out.println(&quot;Classe não encontrada!&quot;); } } public static void main(String args[]){ TestaConexao ins=new TestaConexao(); } }
  • 15. Criação 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 método createStatement a partir da conexão já estabelecida. Statement comando=conexao.createStatement(); ou Statement comando=conexao.createStatement(navegação,ação)- Cria um objeto com os parâmetros fornecidos que irão definir o comportamento do objeto Statement, em que: Navegação pode ser: TYPE_FORWARD_ONLY (navegação apenas para frente, TYPE_SCROLL_INSENSITIVE (navegação nos dois sentidos) ou TYPE_SCROLL_SENSITIVE (navegação nos dois sentidos). Os dois últimos tipos de navegação são similares. A diferença é que as alterações no conteúdo da tabela realizadas em tempo de execução não refletem no tipo INSENSITIVE, enquanto no SENSITIVE sim. Se o parâmetro de navegação não for especificado, será usada a navegação TYPE_FORWARD_ONLY.
  • 16. Criação do Statement (cont.) Ação pode ser: CONCUR_READ_ONLY (somente leitura) ou CONCUR_UPDATABLE (leitura e atualização). Refere-se ao modo como o objeto ResultSet será criado, ou seja, se ele será somente leitura ou seu valor pode ser alterado. Há outros dois subtipos de Statement: PreparedStatement : o comando SQL é pré-compilado e utilizado posteriormente, sendo mais eficiente nos casos onde o mesmo comando é utilizado várias vezes. Utiliza o método con. prepareStatement (String sql) . Este comando pode conter um ou mais '?' parâmetros. CallableStatement : utilizado para chamar procedimentos SQL armazenados no BD (stored procedures). Utiliza o método con. prepareCall (String sql) .
  • 17. A classe Statement Dois dos seus principais métodos são: 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 número de colunas alteradas .
  • 18. Movimentação em Registros Quando um ResultSet é navegável, diversas operações podem ser realizadas por meio dele, pelos métodos de movimentação do ponteiro, os quais são 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 próximo registro do objeto do ResultSet; previous() – posiciona o ponteiro no registro anterior do objeto do ResultSet;
  • 19. Envio de comandos SQL Obtenção do resultado A classe ResultSet oferece à aplicação a tabela resultante de um SELECT. Mantém um cursor posicionando em uma linha da tabela. De início, esse cursor está posicionado antes da primeira linha. O método next( ) é que movimenta o cursor para o próximo registro. Permite à aplicação capturar os dados de cada coluna da tupla (linha) corrente através do método getXXX(<coluna>) , onde XXX é o tipo da coluna e <coluna> é o nome da coluna ou sua posição ( a partir de 1 ). Exemplo : ResultSet rs = stmt. executeQuery ( “ select a, b, c from table1”); while (rs. next ( )) { int x = rs. getInt (“a”); String s = rs. getString (2); float f = rs. getFloat (“c”); }
  • 20. Uma transação é um conjunto de um ou mais comandos que são executados juntos como uma unidade: se não for possível que todos sejam executados, então nenhum deles será executado. Uma transação é um conjunto de Statements que são validados no BD com commit ou cancelados com rollback . Transações podem ajudar a preservar a integridade dos dados de uma tabela. Por default, todos os comandos no JDBC são auto-commit. Transações 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 (); //senão, desfaz os updates
  • 21. Consulta do Banco de Dados por meio do SQL O exemplo a seguir mostrar os procedimentos necessários 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=&quot;sun.jdbc.odbc.JdbcOdbcDriver&quot;; url=&quot;jdbc:odbc:Empresa&quot;; //url=&quot;jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=c:/java/empresa.mdb&quot;; }
  • 22. 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(&quot;Conexão executada com sucesso&quot;); } catch(SQLException SqlExc){ System.out.println(&quot;Erro de SQL!&quot;); } catch(ClassNotFoundException exc){ System.out.println(&quot;Classe não encontrada!&quot;); } }
  • 23. Exemplo (cont.) public void insereDados(){ try{ String sql=&quot;insert into empregados values(1238,'Marcos','Analista',2000);&quot;; comando=conexao.createStatement(); comando.executeUpdate(sql); } catch(SQLException SqlExc){ System.out.println(&quot;Erro de SQL!&quot;); } }
  • 24. Exemplo (cont.) public void listaDados (){ String sql=&quot;select cpf,nome,cargo,salario from empregados&quot;; try{ comando=conexao.createStatement(); resultado=comando.executeQuery(sql); while(resultado.next()){ String cpf=resultado.getString(&quot;cpf&quot;); String nome=resultado.getString(&quot;nome&quot;); String cargo=resultado.getString(&quot;cargo&quot;); String salario=resultado.getString(&quot;salario&quot;); System.out.println(&quot;CPF: &quot;+cpf+&quot; - &quot;+&quot;NOME: &quot;+nome+&quot; - &quot;+&quot;CARGO: &quot;+cargo+&quot; - &quot;+&quot;SALARIO:&quot;+salario); } } catch(SQLException SqlExc){ System.out.println(&quot;Erro de SQL!&quot;); } }
  • 25. Exemplo (cont.) public void modificaDados(){ try{ String sql=&quot;update empregados set salario=3000 where cpf=1238;&quot;; comando=conexao.createStatement(); comando.executeUpdate(sql); } catch(SQLException SqlExc){ System.out.println(&quot;Erro de SQL!&quot;); } }
  • 26. Exemplo (cont.) public void eliminaDados(){ try{ String sql=&quot;delete from empregados where cpf=1238;&quot;; comando=conexao.createStatement(); comando.executeUpdate(sql); } catch(SQLException SqlExc){ System.out.println(&quot;Erro de SQL!&quot;); } }
  • 27. Exemplo (cont.) public void desconecta(){ try{ conexao.close(); } catch(SQLException SqlExc){ System.out.println(&quot;Erro de SQL!&quot;); } } public static void main(String args[]){ TestaDML tdml=new TestaDML(); tdml.conecta(); tdml.insereDados(); tdml.listaDados(); tdml.modificaDados(); tdml.eliminaDados(); tdml.desconecta(); } }
  • 28. Navegando no BD através de uma interface gráfica O exemplo a seguir apresenta a navegação em uma interface gráfica. O exemplo foi dividido em diversos métodos a fim de facilitar o entendimento. Os tratamentos de exceção não foram introduzidos para não deixar o código muito extenso.
  • 29. Exemplo de navegação 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;
  • 30. Exemplo de navegação em BD (cont.) public NavegaBanco(){ driver=&quot;sun.jdbc.odbc.JdbcOdbcDriver&quot;; url=&quot;jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=c:/java/empresa.mdb&quot;; jlcpf=new JLabel(&quot;CPF&quot;); jlnome=new JLabel(&quot;Nome&quot;); jlcargo=new JLabel(&quot;Cargo&quot;); jlsalario=new JLabel(&quot;Salário&quot;); jtfcpf=new JTextField(10); jtfnome=new JTextField(10); jtfcargo=new JTextField(10); jtfsalario=new JTextField(10); jbproximo=new JButton(&quot;próximo&quot;); jbanterior=new JButton(&quot;anterior&quot;); jbprimeiro=new JButton(&quot;primeiro&quot;); jbultimo=new JButton(&quot;último&quot;);
  • 31. Exemplo de navegação em BD (cont.) jbincluir=new JButton(&quot;incluir&quot;); jbalterar=new JButton(&quot;alterar&quot;); jbexcluir=new JButton(&quot;excluir&quot;); jbsair=new JButton(&quot;sair&quot;); jblimpa=new JButton(&quot;limpar&quot;); jpdados=new JPanel(new GridLayout(4,1)); jpnavegacao=new JPanel(new FlowLayout()); jpalteracao=new JPanel(new FlowLayout()); jpgeral=new JPanel(new GridLayout(4,2)); jpdados.add(jlcpf); jpdados.add(jtfcpf); jpdados.add(jlnome); jpdados.add(jtfnome); jpdados.add(jlcargo); jpdados.add(jtfcargo); jpdados.add(jlsalario); jpdados.add(jtfsalario);
  • 32. Exemplo de navegação em BD (cont.) jpnavegacao.add(jbproximo); jpnavegacao.add(jbanterior); jpnavegacao.add(jbprimeiro); jpnavegacao.add(jbultimo); jpalteracao.add(jbincluir); jpalteracao.add(jbalterar); jpalteracao.add(jbexcluir); jpalteracao.add(jblimpa); jpalteracao.add(jbsair); jpgeral.add(jpdados); jpgeral.add(jpnavegacao); jpgeral.add(jpalteracao); getContentPane().add(jpgeral); jbproximo.addActionListener(this); jbanterior.addActionListener(this); jbprimeiro.addActionListener(this); jbultimo.addActionListener(this);
  • 33. Exemplo de navegação em BD (cont.) jbsair.addActionListener(this); jblimpa.addActionListener(this); jbincluir.addActionListener(this); jbalterar.addActionListener(this); jbexcluir.addActionListener(this); setTitle(&quot;Navegando no Banco de Dados&quot;); setVisible(true); pack(); }
  • 34. Exemplo de navegação em BD (cont.) public void actionPerformed(ActionEvent e){ try{ if(e.getSource()==jbproximo) resultado.next(); if(e.getSource()==jbanterior) resultado.previous(); if(e.getSource()==jbprimeiro) resultado.first(); if(e.getSource()==jbultimo) resultado.last(); if(e.getSource()==jbincluir) insereDados(); if(e.getSource()==jbalterar) modificaDados(); if(e.getSource()==jbexcluir) eliminaDados();
  • 35. Exemplo de navegação em BD (cont.) if(e.getSource()==jblimpa) limpaCampos(); if(e.getSource()!=jblimpa || e.getSource()!=jbexcluir)atualizaCampos(); if(e.getSource()==jbsair){ desconecta(); System.exit(0); } } catch(SQLException SqlExc){ System.out.println(&quot;Erro de SQL!&quot;); } }
  • 36. Exemplo de navegação em BD (cont.) public void conecta(){ try{ Class.forName(driver); conexao=DriverManager.getConnection(url); System.out.println(&quot;Conexão executada com sucesso&quot;); } catch(SQLException SqlExc){ System.out.println(&quot;Erro de SQL!&quot;); } catch(ClassNotFoundException exc){ System.out.println(&quot;Classe não encontrada!&quot;); } } public void listaDados (){ String sql=&quot;select cpf,nome,cargo,salario from empregados&quot;;
  • 37. Exemplo de navegação em BD (cont.) try{ comando=conexao.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE ); resultado=comando.executeQuery(sql); resultado.first(); atualizaCampos(); } catch(SQLException SqlExc){ System.out.println(&quot;Erro de SQL!&quot;); } } public void insereDados(){ try{ String sql=&quot;insert into empregados values(&quot;+jtfcpf.getText()+&quot;,'&quot;+jtfnome.getText()+&quot;','&quot;+
  • 38. Exemplo de navegação em BD (cont.) jtfcargo.getText()+&quot;',&quot;+jtfsalario.getText()+&quot;);&quot;; comando.executeUpdate(sql); listaDados (); } catch(SQLException SqlExc){ System.out.println(&quot;Erro de SQL!&quot;); } }
  • 39. Exemplo de navegação em BD (cont.) public void modificaDados(){ try{ String sql=&quot;update empregados set nome='&quot;+jtfnome.getText()+&quot;',cargo='&quot;+jtfcargo.getText()+&quot;',salario=&quot;+jtfsalario.getText()+&quot; where cpf=&quot;+jtfcpf.getText()+&quot;;&quot;; comando.executeUpdate(sql); listaDados (); } catch(SQLException SqlExc){ System.out.println(&quot;Erro de SQL!&quot;); } }
  • 40. Exemplo de navegação em BD (cont.) public void eliminaDados(){ try{ String sql=&quot;delete from empregados where cpf=&quot;+jtfcpf.getText()+&quot;;&quot;; comando.executeUpdate(sql); listaDados (); } catch(SQLException SqlExc){ System.out.println(&quot;Erro de SQL!&quot;); } }
  • 41. Exemplo de navegação em BD (cont.) public void atualizaCampos(){ try{ jtfcpf.setText(resultado.getString(&quot;cpf&quot;)); jtfnome.setText(resultado.getString(&quot;nome&quot;)); jtfcargo.setText(resultado.getString(&quot;cargo&quot;)); jtfsalario.setText(resultado.getString(&quot;salario&quot;)); } catch(SQLException SqlExc){ System.out.println(&quot;Erro de SQL!&quot;); } }
  • 42. Exemplo de navegação em BD (cont.) public void limpaCampos(){ jtfcpf.setText(&quot;&quot;); jtfnome.setText(&quot;&quot;); jtfcargo.setText(&quot;&quot;); jtfsalario.setText(&quot;&quot;); } public void desconecta(){ try{ conexao.close(); } catch(SQLException SqlExc){ System.out.println(&quot;Erro de SQL!&quot;); } } public static void main(String args[]){ NavegaBanco nb=new NavegaBanco(); nb.conecta(); nb.listaDados(); } }
  • 43. Exercício Como sugestão para manipulação de banco de dados, faça um cadastro de clientes, seguindo os mesmos procedimentos apresentados no cadastramento de empregados. Utilize pelo menos os campos código, nome, endereço, telefone e sexo. Você deve seguir todos os passos desde a criação do banco de dados. Utilize sua criatividade.
  • 44. Bibliografia FURGERI, Sérgio. Java 2: Ensino didático: Desenvolvendo e Implementando Aplicações – São 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.