A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Curso Programação – JAVA Centro de Formação São Domingos Frei Joaquim José Hangalo JDBC.

Apresentações semelhantes


Apresentação em tema: "Curso Programação – JAVA Centro de Formação São Domingos Frei Joaquim José Hangalo JDBC."— Transcrição da apresentação:

1 Curso Programação – JAVA Centro de Formação São Domingos Frei Joaquim José Hangalo JDBC

2 Manipulação de Bases de Dados com Java Objetivos deste capítulo Demonstrar os fundamentos básicos para a manipulação de bases de dados com Java; Conceituar e demonstrar a criação de uma conexão com a base dados; Demonstrar como uma aplicação realiza uma conexão e manipulação de uma base 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 base de dados.

3 Definição A linguagem Java possui classes que permitem a conexão com bases de dados. Para que seja possível realizar a manipulação de bases 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 base de dados por meio de uma aplicação são os seguintes: 1) A criação da base de dados; 2) A configuração do sistema por meio da criação de uma fonte de dados (fonte ODBC-JDBC) ou conexão entre a base de dados criada e a linguagem Java; 3) A criação da aplicação Java propriamente dita.

4 A Criação do Banco de Dados A criação da base de dados é uma tarefa bem simples que pode ser feita com Microsoft Access 2000 ou com o MYSQL ou outro Sistema de Gestão de Base de Dados Realize os seguintes procedimentos (NO MS ACCESS): 1) Abra o Access; 2) Crie uma base de dados; 3) Crie uma tabela com o nome funcionario, por exemplo: #codigonumero 11 (duplo) nome texto 50 cargo texto 30 salario numero 9(decimal) Onde: # representa a chave primária e

5 A Criação do Banco de Dados A criação da base de dados é uma tarefa bem simples que pode ser feita com Microsoft Access 2000 ou com o MYSQL ou outro Sistema de Gestão de Base de Dados Realize os seguintes procedimentos (NO MYSQL): 1) Aceda ao MYSQL Adminstrator; 2) Crie uma base de dados; 3) Crie uma tabela com o nome funcionario, por exemplo: #codigoInteger auto_increment nome varchar(45) cargo varchar(45) salariodouble Onde: # representa a chave primária e

6 Configuração do Sistema No MS ACCESS Para que seja possível aceder à base de dados em Java, é necessário criar uma fonte de dados ODBC por meio do sistema operativo. Esta fonte de dados será usada para estabelecer uma ponte de comunicação entre a base 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) Aceda a guia NDF (Nome da Fontes de Dados) de utilizadores e pressione o botão adicionar, conforme a figura a seguir:

7 Configuração do Sistema (cont.)

8 4) A próxima janela apresenta todos os drivers disponíveis. Como estamos a trabalhar com o Access, deve ser escolhido o driver Microsoft Access Driver. A seguir clique no botão concluir.

9 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 a base de dados criada anteriormente.

10 Configuração do Sistema (cont.) 6) A fonte de dados criada deve aparecer entre as fontes de dados do utilizador. Neste ponto, a base de dados que será manipulada pela aplicação já está criada e devidamente configurado.

11 1. Incluir no programa: import java.sql.*; 2. Carregar corretamente o driver desejado. 3. Conectar-se com a base 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 a BD atual. JDBC – principais passos Importante: os índices em JDBC começam em 1.

12 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”); Class.forName (“ com.mysql.jdbc.Driver ”); - 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

13 A Criação do Banco de Dados A criação da base de dados é uma tarefa bem simples que pode ser feita com Microsoft Access 2000 ou com o MYSQL ou outro Sistema de Gestão de Base de Dados Realize os seguintes procedimentos: 1) Abra o Access; 2) Crie uma base de dados; 3) Crie uma tabela com o nome funcionario, por exemplo: #codigonumero 11 (duplo) nome texto 50 cargo texto 30 salario numero 9(decimal) Onde: # representa a chave primária e * campos obrigatórios

14 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 bases de dados utilizando o seu nome (anyname) e uma senha (password) quando isso se fizer necessário. Esses argumentos são opcionais e podem ser desconsiderados. - Exemplo: Connection conexao=DriverManager.getConnection(url,”UserID”,”password” );

15 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 a base de dados conexao=DriverManager.getConnection(url); System.out.println("Conexão executada com sucesso"); conexao.close(); } NO MYSQL driver=“com.mysql.jdbc.Driver ”); "; url=“jdbc:mysql://localhost:3306/test ";

16 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(); }

17 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.

18 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 na BD (stored procedures). Utiliza o método con.prepareCall(String sql).

19 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.

20 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;

21 A classe ResultSet oferece à aplicação a tabela resultante de um SELECT. -Mantém um cursor posicionando numa 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( ), onde XXX é o tipo da coluna e é 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”); } Envio de comandos SQL Obtenção do resultado

22 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 na 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. con.setAutoCommit(false); // muda o default Statement stmt = con.createStatement(); stmt.executeUpdate(“...”); if (...) con.commit(); //se Ok, valida os 2 updates else con.rollback(); //senão, desfaz os updates Transações

23 Consulta da Base de Dados O exemplo a seguir mostrar os procedimentos necessários para executar comandos DML a base 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"; }

24 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("Conexão executada com sucesso"); } catch(SQLException SqlExc){ System.out.println("Erro de SQL!"); } catch(ClassNotFoundException exc){ System.out.println("Classe não encontrada!"); }

25 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!"); }

26 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(“codigo"); String nome=resultado.getString("nome"); String cargo=resultado.getString("cargo"); String salario=resultado.getString("salario"); System.out.println(“Código: "+codigo+" - "+"NOME: "+nome+" - "+"CARGO: "+cargo+" - "+"SALARIO:"+salario); } catch(SQLException SqlExc){ System.out.println("Erro de SQL!"); }

27 Exemplo (cont.) public void modificaDados(){ try{ String sql="update empregados set salario=3000 where codigo=1238;"; comando=conexao.createStatement(); comando.executeUpdate(sql); } catch(SQLException SqlExc){ System.out.println("Erro de SQL!"); }

28 Exemplo (cont.) public void eliminaDados(){ try{ String sql="delete from empregados where codigo=1238;"; comando=conexao.createStatement(); comando.executeUpdate(sql); } catch(SQLException SqlExc){ System.out.println("Erro de SQL!"); }

29 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(); }

30 Navegando na BD através de uma interface gráfica O exemplo a seguir apresenta a navegação numa 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.

31 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;

32 Exemplo de navegação em BD (cont.) public NavegaBanco(){ driver="sun.jdbc.odbc.JdbcOdbcDriver"; url="jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=c:/java/empresa.mdb"; jlcpf=new JLabel("Código"); jlnome=new JLabel("Nome"); jlcargo=new JLabel("Cargo"); jlsalario=new JLabel("Salário"); jtfcpf=new JTextField(10); jtfnome=new JTextField(10); jtfcargo=new JTextField(10); jtfsalario=new JTextField(10); jbproximo=new JButton("próximo"); jbanterior=new JButton("anterior"); jbprimeiro=new JButton("primeiro"); jbultimo=new JButton("último");

33 Exemplo de navegação em BD (cont.) jbincluir=new JButton("incluir"); jbalterar=new JButton("alterar"); jbexcluir=new JButton("excluir"); jbsair=new JButton("sair"); jblimpa=new JButton("limpar"); 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);

34 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);

35 Exemplo de navegação em BD (cont.) jbsair.addActionListener(this); jblimpa.addActionListener(this); jbincluir.addActionListener(this); jbalterar.addActionListener(this); jbexcluir.addActionListener(this); setTitle("Navegando na Base de Dados"); setVisible(true); pack(); }

36 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();

37 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("Erro de SQL!"); }

38 Exemplo de navegação em BD (cont.) public void conecta(){ try{ Class.forName(driver); conexao=DriverManager.getConnection(url); System.out.println("Conexão executada com sucesso"); } catch(SQLException SqlExc){ System.out.println("Erro de SQL!"); } catch(ClassNotFoundException exc){ System.out.println("Classe não encontrada!"); } public void listaDados (){ String sql="select codigo,nome,cargo,salario from empregados";

39 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("Erro de SQL!"); } public void insereDados(){ try{ String sql="insert into empregados values("+jtfcodigo.getText()+",'"+jtfnome.getText()+"','"+

40 Exemplo de navegação em BD (cont.) jtfcargo.getText()+"',"+jtfsalario.getText()+");"; comando.executeUpdate(sql); listaDados (); } catch(SQLException SqlExc){ System.out.println("Erro de SQL!"); }

41 Exemplo de navegação em BD (cont.) public void modificaDados(){ try{ String sql="update empregados set nome='"+jtfnome.getText()+"',cargo='"+jtfcargo.getText()+"',salario="+jtfsalario.getText()+" where codigo="+jtfcodigo.getText()+";"; comando.executeUpdate(sql); listaDados (); } catch(SQLException SqlExc){ System.out.println("Erro de SQL!"); }

Apresentações semelhantes


Anúncios Google