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

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

JDBC Java Dababase Connectivity Marco Antonio, Arquiteto de Software – TJDF Atualizado em Novembro/2008.

Apresentações semelhantes


Apresentação em tema: "JDBC Java Dababase Connectivity Marco Antonio, Arquiteto de Software – TJDF Atualizado em Novembro/2008."— Transcrição da apresentação:

1 JDBC Java Dababase Connectivity Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado em Novembro/2008

2 JDBC Java Database Connectivity. Tecnologia da Sun para acesso a dados. Acessa qualquer banco de dados. JDBC é uma API, ou seja, apenas especificação. Implementado através de um driver fornecido pelo fabricante. Pacote base: java.sql

3 JDBC API JDBC API é um conjunto de interfaces que são implementados pelos drivers dos fornecedores de banco de dados. O fato de utilizar interfaces garante a independência da aplicação em relação aos bancos de dados, garantindo a portabilidade. Você pode conferir uma lista dos drivers disponíveis no site: http://developers.sun.com/product/jdbc/drivers

4 Principais elementos da API Driver: fornecido pelo fabricando do banco de dados, é específico para cada SGBD. DriverManager: responsável pela criação da conexão. Connection: representa uma conexão física com o SGBD. Statement/PreparedStatement: comando executado no SGBD (insert, delete, update). ResultSet: resultado da consulta a um banco de dados.

5 Driver JDBC Cada banco de dados tem sua implementação para a API JDBC. Chamamos essa implementação de driver. O nome do Driver do MySQL é connectorJ Baixe o driver do site http://dev.mysql.com/downloads/connector/ Abra o arquivo compactado e procure pelo arquivo mysql-connector-versão_atual.jar. Salve esse arquivo no diretório lib da sua aplicação.

6 lib Botão direito na lib, Build Path -> Add to Build Path. A partir de agora, essa biblioteca está registrada para esse (e somente para esse) projeto.

7 Tabela de exemplo Crie o schema CursoDeJava, onde estarão nossas tabelas. Para nosso exemplo, precisamos da tabela Pessoa com as colunas: Id: int auto-numerado (primary key, chave-primária, pk). Nome: varchar(50). Endereco: varchar(50). Telefone: varchar(50). Cpf: varchar(11) Existem quatro operações em banco de dados: select, insert, update, delete. Em alguns livros podemos encontrar o termo CRUD (create, recover, update, delete).

8 Insert Comando para inclusão de dados em uma tabela. Veja o exemplo: –Insert into Pessoa (nome, endereco, telefone, cpf) values (Marco, QE4, 81108989, 8328579238) –Insert into Pessoa (nome, cpf) values (Diego Lucas, 090990099090) Informe corretamente o nome das colunas e em seguida os seus valores (na sequência correta).

9 Update Comando SQL para atualização de dados. Exemplo: –Update Pessoa set nome = Marco Antonio where id = 10 –Update Pessoa set nome = Marco Antonio, endereco = Novo Endereço where id = 22

10 Delete Apaga o registro, geralmente baseando-se na chave primária. Exemplo: –Delete from Pessoa where id = 100 –Delete from Pessoa where id in (10, 12, 14) –Delete from Pessoa Comando não muito recomendado. Apaga sua tabela inteira.

11 Select Chave do sucesso do SQL, o comando select recupera dados das tabelas de uma forma eficiente. Sua sintaxe é bastante flexível, possibilitando toda e qualquer forma de consulta para mostrar dados para os usuários. Exemplo: –Select * from Pessoa –Select nome, endereco from Pessoa –Select * from Pessoa where id = 10 –Select * from Pessoa where nome like %Ma% Recupera todos os registros onde o campo nome tenha a ocorrência Ma. O caracter % indica que Ma pode estar em qualquer lugar dentro da coluna nome.

12 Tutorial de SQL http://www.w3schools.com/sql/default.asp

13 O que é importante Para criar uma conexão com um SGBD qualquer precisamos seguir diversos passos que não precisam ser decorados!!! Quando nosso sistema começa a crescer e se sofisticar (JEE, Hibernate, Servlet, JSP, etc), você não irá mais ter contato com esse mecanismo, pois tudo será feito de forma automática pelos servidores. Apesar de haver diversos frameworks que facilitam o acesso a dados, o JDBC ainda é um dos mais usados.

14 Parâmetros da conexão Para acessar um SGBD na rede, você deve informar a localização do mesmo. Alguns parâmetros são obrigatórios. Veja a lista: Url: protocolo e endereço do SGBD na rede. Driver: nome do driver que você vai usar para acessar o banco. User: nome do usuário. Password: senha do usuário.

15 URL Usada para criar a conexão com a base de dados. Geralmente contém nome do servidor, porta, protocolo, subprotocolo, database. É específico para cada banco de dados, sendo assim, você deve verificar a documentação.

16 Driver A interface Driver é utilizada pelo mecanismo interno do JDBC (suas implementações). É obrigatório carregá-lo, pois só assim sua aplicação saberá como interpretar os comandos SQL. Veja um exemplo: Class.forName(com.mysql.jdbc.Driver);

17 Connection Representa uma conexão física com o SGBD. A sintaxe é fornecida pelo fabricante, mas todas são similares. Veja alguns exemplos: jdbc:odbc:anuncios jdbc:oracle:thin:@200.206.192.216:1521:exemplo jdbc:mysql://alnitak.orion.org/clientes jdbc:cloudscape:rmi://host:1098/MyDB;create=true

18 DriverManager O DriverMaganer manipula os Drivers informados anteriormente. Possui métodos para registrar um driver, remover ou listar todos. É utilizado para recuperar uma conexão baseando-se em parâmetros. Veja um exemplo: Connection con = DriverManager.getConnection(jdbc:mysql://nome_do_servidor/nome_do_database, root, senha);

19 Statement Oferece meios para passar comandos ao SGBD. Statement stmt = con.createStatement(); Com o stmt podemos usar os métodos execute(), executeQuery(), executeBatch() e executeUpdate() para enviar instruções ao SGBD. Subinterfaces: PreparedStatement (instruções SQL pré- compiladas) e CallableStatement (StoredProcedures).

20 Enviando instruções stmt.execute(CREATE TABLE Pessoa + (id MEDIUMINT NOT NULL AUTO_INCREMENT +, nome varchar(50) +, endereco varchar(50) +, telefone varchar(20) +, cpf varchar(20) +, PRIMARY KEY(id) ) ); int quantidadeDeRegistros = stmt.executeUpdate(INSERT INTO + PESSOA (nome, endereco, telefone, cpf) + VALUES + ('Marco Antonio', 'CNB 14 LOTE 10', '33521134', '832869') );

21 ResultSet O ResultSet encapsula o resultado de uma consulta a uma tabela na forma de um cursor. Métodos de navegação: next(), previous(), first() e last(). Métodos para obter dados de uma coluna: getInt(), getString(), getDate(), getObject(), etc.

22 Obtenção de dados ResultSet rs = stmt.executeQuery(SELECT * FROM Pessoa ); while (rs.next()) { int idPessoa = rs.getInt(id); String nomeDaPessoa = rs.getString(nome); String enderecoDaPessoa = rs.getString(endereco); //Continua para todas as colunas //Depois, faça algo com os valores obtidos. //Mostrar numa tela por exemplo }

23 PreparedStatement É um Statemente pré-compilado que é mais eficiente quando temos o mesmo comando repetido várias vezes, mudando apenas os parâmetros. Veja o exemplo: String sql = INSERT INTO Pessoa (nome, endereco, telefone, cpf) values (?, ?, ?, ?); PreparedStatement stmt = con.prepareStatement(sql); stmt.setString(1, Marco Antonio); stmt.setString(2, CNB 14 LOTE 10); stmt.setString(3, 33521134); stmt.setString(4, 832869); stmt.executeUpdate();

24 Feche tudo Lembre-se de fechar todos os recursos que você abriu para que outras pessoas possa utilizá-los. Veja alguns exemplos: con.close; stmt.close; rs.close;

25 GerenteDeConexao package com.livraria.persistencia; import java.sql.*; public class GerenteDeConexao { private Connection conexao; private String driver = "com.mysql.jdbc.Driver"; private String url = "jdbc:mysql://localhost:3306/CursoDeJava"; private String usuario = "root"; private String senha = ""; /** * Conecta a aplicação no banco de dados usando os parâmetros informados */ private void conectar() { try { Class.forName(driver); conexao = DriverManager.getConnection(url, usuario, senha); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); }

26 GerenteDeConexao /** * Recupera uma conexão válida * Conecta caso a conexão ainda não tenha sido feita * @return uma conexão válida com o banco de dados */ private Connection getConexao() { if (conexao == null) { conectar(); } return conexao; }

27 GerenteDeConexao /** * Executa comandos SQL de inclusão, alteração e exclusão * @param comando Comando SQL a ser executado no banco de dados * @param valores Lista de valores passados para o banco de dados (utiliza argumentos variáveis) */ public void executarComando(String comando, String... valores) { try { PreparedStatement stmt = getConexao().prepareStatement(comando); int indice = 1; for (String valor : valores) { stmt.setString(indice, valor); indice++; } } catch (SQLException e) { e.printStackTrace(); }

28 GerenteDeConexao /** * Executa uma consulta no banco de dados * @param consulta Consulta SQL (SELECT) * @return Um ResultSet contendo o resultado da consulta */ public ResultSet executarConsulta(String consulta) { try { PreparedStatement stmt = getConexao().prepareStatement(consulta); return stmt.executeQuery(); } catch (SQLException e) { e.printStackTrace(); } return null; }

29 InsereDados package com.livraria.persistencia; public class InsereDados { public static void main(String[] args) { GerenteDeConexao gerente = new GerenteDeConexao(); StringBuilder sql = new StringBuilder("INSERT INTO PESSOA "); sql.append("(NOME, ENDERECO TELEFONE, CPF)"); sql.append("VALUES(?, ?, ?, ?)"); gerente.executarComando(sql.toString(), "MARCO", "GUARÁ", "7777-8888", "898.423.342.77"); }

30 AtualizaDados package com.livraria.persistencia; public class AtualizaDados { public static void main(String[] args) { GerenteDeConexao gerente = new GerenteDeConexao(); StringBuilder sql = new StringBuilder("UPDATE PESSOA "); sql.append("SET NOME = ?, ENDERECO = ? "); sql.append("WHERE ID = ? "); gerente.executarComando(sql.toString(), "NOVO NOME", "NOVO ENDEREÇO", 1"); }

31 ExcluiDados package com.livraria.persistencia; public class ExcluiDados { public static void main(String[] args) { GerenteDeConexao gerente = new GerenteDeConexao(); StringBuilder sql = new StringBuilder("DELETE FROM PESSOA WHERE ID = ?"); gerente.executarComando(sql.toString(), "1"); ; }

32 Algumas considerações result nome do ResultSet (resultado da consulta). result.getString(id") Recupera o valor da coluna codigo. result.getString("nome") Recupera o valor da coluna nome.

33 ConsultaDados package com.livraria.persistencia; import java.sql.*; public class ConsultaDados { public static void main(String[] args) { GerenteDeConexao gerente = new GerenteDeConexao(); StringBuilder sql = new StringBuilder("SELECT * FROM PESSOA"); ResultSet result = gerente.executarConsulta(sql.toString()); try { while (result.next()) { System.out.println("ID: " + result.getString("ID")); System.out.println("NOME: " + result.getString("NOME")); System.out.println("ENDEREÇO: " + result.getString("ENDERECO")); System.out.println("TELEFONE: " + result.getString("TELEFONE")); System.out.println("CPF: " + result.getString("CPF")); System.out.println("______________________________"); } } catch (SQLException e) { e.printStackTrace(); }

34 Dúvidas?


Carregar ppt "JDBC Java Dababase Connectivity Marco Antonio, Arquiteto de Software – TJDF Atualizado em Novembro/2008."

Apresentações semelhantes


Anúncios Google