Capítulo 1. Acesso a Banco de Dados com JDBC (Java Database Connectivity) e o Padrão de Projeto DAO (Data Access Object)



Documentos relacionados
Acesso a Bancos de Dados (JDBC) Autor: Cleyton Maciel (clayton.maciel@ifrn.edu.br) Adaptação: Pedro Baesse (pedro.baesse@ifrn.edu.

PadrãoIX. Módulo II JAVA. Marcio de Carvalho Victorino. JDBC - Java Database Connectivity A,L,F,M

Acesso a Bancos de Dados (JDBC) Desenvolvimento de Aplicações em Java O QUE É JDBC JAVA E JDBC CARACTERÍSTICAS DE JDBC

Acessando dados em Java com JDBC

Integrando Java com Banco de Dados

Aula 1 Acesso a Banco de Dados

Programação Orientada a Objetos (DPADF 0063)

JDBC (Java Database Connectivity) Padrão de Projeto DAO (Data Access Object) Roteiro para instalação do banco de dados e do driver JDBC

Programação Orientada a Objetos JDBC Java Database Connectivity

Programação com Acesso a BD. Programação com OO Acesso em Java

Laboratório de Banco de Dados Aula 1 Acesso a Banco de Dados. Prof. Josenildo Silva jcsilva@ifma.edu.br

Acessando bancos de dados com o JDBC

Java & Bancos de Dados Adaptado de Slides da Universidade Salgado de Oliveira Goiânia

Programação com Acesso a Banco de Dados

Acesso a Bancos de Dados em Java (JDBC)

Banco de Dados. Banco de Dados. Alcides Pamplona Alcides Pamplona Linguagem de Programação CESBD 2010

Java 2 Standard Edition Fundamentos de

Figura 1. A Classe Java

JDBC. Java DataBase Connectivity

JDBC Java Database Connectivity

Banco de Dados. Sérgio Luiz Ruivace Cerqueira

JDBC Acessando Banco de Dados

Manipulação de Banco de Dados com Java. Ms. Bruno Crestani Calegaro Maio/ 2015

Manipulação de Banco de Dados com Java 1. Objetivos

Curso de Java. Acesso a banco de dados através de JDBC. Todos os direitos reservados Klais

DSS 08/09. Camada de Dados - JDBC. Aula 1. António Nestor Ribeiro /António Ramires Fernandes/ José Creissac Campos {anr,arf,jfc}@di.uminho.

Java e Conexão com Banco de Dados

JDBC. Siga as instruções para instalar o banco de dados H2 e criar a tabela Alunos.

DSS 09/10. DSS 09/10 Que métodos é que fazem parte de cada camada? Aplicações Multi-camada JDBC. Aula 3 DSS 09/10

Fernando Freitas Costa. Pós-Graduando em Gestão e Docência Universitária. blog.fimes.edu.br/fernando nando@fimes.edu.br

JAVA JDBC Java Database Connectivity

JDBC. Prof. Márcio Bueno

Java JDBC - I. Ex. 2: para o SQLServer da Microsoft, o driver JDBC pode ser obtido em

(UFF) JDBC (I) TEPIS II

INTRODUÇÃO. No entanto, o que pode ser considerado um produto (resultado) da criação de BDs?

Acesso a Banco. Conexão em Java. Conexão em Java. Programação Orientada a Objetos Profa. Cristiane e Prof. Daniel

Banco de Dados. Prof. Leonardo Barreto Campos 1

MYSQL: TIPOS DE DADOS. Gilvan Vieira Moura

JDBC (Fundamentos) Sang Shin Java Technology Architect Sun Microsystems, Inc.

Desenvolvimento Web TCC Turma A-1

JPA: Persistência padronizada em Java

No cabeçalho de cada arquivo Java onde haverá acesso a banco de dados, o seguinte Import deve ser colocado:

HIBERNATE EM APLICAÇÃO JAVA WEB

Introdução ao PHP. Prof. Késsia Marchi

INTRODUÇÃO BANCO DE DADOS. Prof. Msc. Hélio Esperidião

Acesso a banco de dados

JAVA JDBC COMO FUNCIONA. Programação Orientada a Objetos Flávio de Oliveira Silva 315. Programação Orientada a Objetos Flávio de Oliveira Silva 316

Java Básico JDBC. Razer Anthom Nizer Rojas Montaño Banco de Dados: JDBC

Linguagens de Programação

Banco de dados. Linguagens de Banco de Dados II. Wedson Quintanilha da Silva -

Persistência de Classes em Tabelas de Banco de Dados

Conectividade de Banco de Dados Java JDBC

INTRODUÇÃO BANCO DE DADOS(MYSQL) E PHP

Aula 4 JDBC - Java Database Connectivity

Linguagem SQL (Parte I)

Desenvolvimento de Aplicações para Internet Aula 9

Prof.: Clayton Maciel Costa

Java na WEB Banco de Dados

Android e Bancos de Dados

Prevayler. Perola. André Luís Sales de Moraes Juliana Keiko Yamaguchi Tatiana Yuka Takaki

Sistema de Banco de Dados Distribuídos e DataGrid

Programação Orientada a Objetos com PHP & MySQL Sistema Gerenciador de Banco de Dados: Introdução e configuração de bases de dados com Postgre e MySQL

MANIPULAÇÃO DE BANCO DE DADOS UTILIZANDO INTERFACE GRÁFICA

Desenvolvendo Aplicações Web com NetBeans

Programação WEB (JSP + Banco Dados) Eng. Computação Prof. Rodrigo Rocha

Especialização em web com interfaces ricas

Java JDBC Aplicação Java com Acesso a um SGBD. Ricardo Terra (rterrabh [at] gmail.com) Java JDBC Maio, 2010

(UFF) JDBC (II) TEPIS II

Leonardo Gresta Paulino Murta

Front-End Uso da Linguagem Turbo Delphi para Acesso ao Banco de Dados Mysql

Driver Mysql para Banco de Dados. Conexão com um Banco de Dados

Disciplina: Unidade V: Prof.: Período:

Noções de. Microsoft SQL Server. Microsoft SQL Server

Aplicativo web para definição do modelo lógico no projeto de banco de dados relacional

Projetar Arquitetura

18/04/2006 Micropagamento F2b Web Services Web rev 00

Java na Web. Aplicações Web

Desenvolvimento de aplicação web com framework JavaServer Faces e Hibernate

Banco de dados POO Márcio Delamaro. Programação Orientada a Objetos Prof Marcio Delamaro ICMC/USP

SQL Linguagem de Definição de Dados. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

J550 Integração com Bancos de Dados

Curso de Java Módulo III JDBC Fábio Mengue Centro de Computação - Unicamp

PROGRAMAÇÃO ORIENTADA A OBJETOS II -CRIANDO UM BD POSTGRESQL. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

JDBC - Java Data Base Connectivity

JDBC Tópicos avançados de acesso a base de dados relacional

(Open System Interconnection)

UFG - Instituto de Informática

Programação com ODBC 3

Orientação a Objetos

Curso de Aprendizado Industrial Desenvolvedor WEB

Sistema de Bancos de Dados. Conceitos Gerais Sistema Gerenciador de Bancos de Dados

LINGUAGEM DE BANCO DE DADOS

Ferramenta de apoio a gerência de configuração de software. Aluno: Rodrigo Furlaneto Orientador: Everaldo Artur Grahl

Transcrição:

Capítulo 1 Acesso a Banco de Dados com JDBC (Java Database Connectivity) e o Padrão de Projeto DAO (Data Access Object)

Introdução Os programas desenvolvidos em Java comunicam se com um banco de dados e manipulam seus dados utilizando a API JDBC. Um driver JDBC permite aos aplicativos java conectar se a um banco de dados em particular e aos programadores manipular essa base de dados através da API do JDBC. A separação entre API do JDBC e drivers de bancos de dados particulares permite aos desenvolvedores alterar o banco de dados subjacentes sem modificar o código java que acessa o banco de dados. Os SGBDs mais populares fornecem seus drivers JDBC e também existem muitos drivers independentes disponíveis.

Comunicação Através de JDBC

Os Componentes JDBC

Componentes JDBC em Detalhes

Classificação Funcional da API JDBC Categoria Conexão com uma fonte de dados Envio de instrucões SQL Recuperacão de resultados de uma consulta Classe ou Interface Fornecido por Comentario Classe DriverManager java.sql (Sun) Gerencia um conjunto de drivers JDBC Interface Driver Fabricante do SGBD Fornece comunicacão com o banco de dados Interface Connection Fabricante do SGBD Gerencia uma sessão com o banco de dados Interface Statement java.sql Instrucão SQL estática Objeto empacotador Interface PreparedStatement java.sql Instrucão SQL pré compilada Objeto empacotador Interface CallableStatement java.sql Procedimento armazenado Objeto empacotador Interface ResultSet java.sql ResultSet do Banco de Dados Objeto empacotador

Classificação Funcional da API JDBC (Cont.) Categoria Mapeamento entre tipos de dados SQL e tipos de dados Java Classe ou Interface Fornecido por Comentario Classe Date java.sql Valor SQL para data Classe Time java.sql Valor SQL para horario Classe TimeStamp java.sql Valor SQL para TimeStamp Fornecimento de metadados sobre o Interface DatabaseMetadata banco de dados Fabricante do SGBD Informacão sobre o banco de dados Objeto empacotador Interface ResultSetMetadata Fabricante do SGBD Colunas ResultSet Objeto empacotador de informacão Classe SQLException java.sql Erros de acesso ao banco de dados Classe SQLWarning java.sql Alertas de acesso ao banco de dados Geracao de Excecões

Conexão Através da Interface JDBC Visão Geral 1. Registre o driver JDBC fornecido pelo fabricante do mysql com a classe DriverManager Class.forName( com.mysql.jdbc.driver ); 2. Estabeleca uma sessão com o SGBD. String url = "jdbc:mysql://localhost:3306/facebook Connection con = DriverManager.getConnection(url, usuario, senha ) 3. Crie um objeto empacotador SQL. Statement stmt = con.createstatement(); 4. Envie uma consulta e receba um resultado String query = "SELECT * FROM PARTICIPANTE"; ResultSet rs = stmt.executequery(query); 5. Extrai os dados do objeto empacotador com o resultado while (rs.next()) { System.out.println(" IDPARTICIPANTE : " + rs.getstring("idparticipante").trim()); System.out.println(" IDPAIS :"+ rs.getstring("idpais").trim()); System.out.println(" NOME: " + rs.getstring("nome").trim()); System.out.println(""); }

Diagrama de Seqüência JDBC

Demonstracão ResultSet Arquivos: ExemploResultSet.java obs: o código deste exemplo bem como o script para criacão das tabelas está disponível no site http://www.pagliares.com.br

Mapeamento de Tipos de Dados SQL para Tipo de Dados Java Tipo de Dado SQL Tipo de Dado Java CHAR STRING VARCHAR STRING LONGVARCHAR STRING NUMERIC java.math.bigdecimal DECIMAL java.math.bigdecimal BIT java.math.bigdecimal TINYINT boolean SMALLINT byte INTEGER short

Mapeamento de Tipos de Dados SQL para Tipo de Dados Java (Cont.) Tipo de Dado SQL Tipo de Dado Java BIGINT long REAL float FLOAT double DOUBLE double BINARY byte [] VARBINARY byte [] LONGVARBINARY byte [] DATE java.sql.date TIME java.sql.time TIMESTAMP java.sql.timestamp

Os Métodos getxxx de ResultSet Metodo Tipo Java Retornado getasciistream java.io.inputstream getbigdecimal java.math.bigdecimal getbinarystream java.io.inputstream getboolean boolean getbyte byte getbytes byte [] getdate java.sql.date getdouble double getfloat float

Os Métodos getxxx de ResultSet(Cont.) Metodo Tipo Java Retornado getint int getlong long getobject Object getshort short getstring java.lang.string gettime java.sql.time gettimestamp java.sql.timestamp getunicodestream java.io.inputstream de caracteres Unicode

Os Métodos setxxx de ResultSet Metodo Tipos SQL setasciistream LONGVARCHAR produzido por um stream ASCII setbigdecimal NUMERIC setbinarystream LONGVARBINARY setboolean BIT setbyte TINYINT setbytes VARBINARY ou LONGVARBINARY(dependendo do tamanho relativo a VARBINARY) setdate DATE setdouble DOUBLE setfloat FLOAT

Os Métodos setxxx de ResultSet(Cont.) Metodo Tipos SQL setint INTEGER setlong BIGINT setobject O objeto que é convertido para o tipo SQL destino antes de ser enviado setnull NULL setshort SMALLINT setstring VARCHAR ou LONGVARCHAR (dependendo do tamanho relativo ao limite do driver sobre VARCHAR) settime TIME settimestamp TIMESTAMP

Prepared Statements JDBC fornece uma maneira de executarmos comandos SQL parametrizados Interface PreparedStatement, subclasse de Statement. Vantagens de PreparedStatement código mais legível melhor performance pois os comandos são pré compilados e otimizados. ganhos de seguranca minimizando ataques de injecão de SQL. Com PreparedStatement, a string contendo o comando SQL deve ser fornecida no momento de criacão do comando e não no momento de execucão do comando:... Connection con = null; PreparedStatement st = con.preparestatement("select * FROM pessoa where nome =?"); st.setstring(1, "Rodrigo"); resultado = st.executequery( );...

Prepared Statements(Cont.) Os parâmetros de um PreparedStatement são indicados por sinais de interrogacão dentro da string que contém o comando SQL. A interface PreparedStatement fornece uma série de métodos do tipo setint, setdate, etc. que permitem passar os valores dos parâmetros antes da execucão Os parâmetros são identificados pela sua posicão dentro da string SQL, iniciando por 1 Devido às vantagens de se ter o código mais simples e mais seguro, a maioria dos desenvolvedores prefere usar PreparedStatement o tempo todo, mesmo para comandos SQL que serão executados uma única vez e onde portanto não haveria ganho de performance

Demonstracão PreparedStatement Arquivos: ResultSetComPreparedeStatement.java obs: o código deste exemplo está disponível no site http://www.pagliares.com.br

A Interface RowSet A interface RowSet fornece vários métodos set que permitem ao programador especificar as propriedades necessárias para estabelecer uma conexão e criar um Statement. Há dois tipos de RowSet conectado e desconectado. Um objeto RowSet conectado conecta se ao banco de dados uma vez e permanece conectado até que o aplicativo termine.

A Interface RowSet (cont.) Um objeto RowSet desconectado conecta se ao banco de dados, executa uma consulta para recuperar os dados do banco e depois fecha a conexão. A interface RowSet possui duas subinterfaces JdbcRowSet e CachedRowSet. A interface JdbcRowSet é um RowSet conectado. A interface CachedRowSet é um RowSet desconectado.

Demonstracão RowSet Arquivos: ExemploRowSet.java obs: o código deste exemplo está disponível no site http://www.pagliares.com.br

Padrões de Projeto de Software Orientado a Objetos A idéia de padrões foi apresentada por Christopher Alexander em 1977 no contexto de Arquitetura (de prédios e cidades). Cada padrão descreve um problema que ocorre repetidamente, de novo e de novo, em nosso ambiente, e então descreve a parte central da solução para aquele problema de uma forma que você pode usar esta solução um milhão de vezes, sem nunca implementá la duas vezes da mesma forma. Um padrão de projeto é uma solução geral para um problema recorrente no desenvolvimento de software orientado a objetos. Um padrão de projeto é uma espécie de gabarito para como resolver um problema, ou melhor dizendo, é uma solução elegante na resolução de problemas.

O Padrão Data Access Object (DAO) A maioria das aplicações empresariais usa normalmente sistemas de gerenciamento de bancos de dados relacional (RDBMS, relational database management system) como armazenamento persistente. Entretanto, os dados empresariais podem residir em outros tipos de repositórios, como mainframes ou sistemas legados, repositórios LDAP (Lightweight Directory Access Protocol), bancos de dados orientados a objetos (OODB, object oriented databases) e arquivos simples. Misturar a lógica de persistência com a lógica de aplicação cria uma dependência direta entre a implementação da aplicação e do armazenamento persistente.

O Padrão Data Access Object (DAO) (Cont.) Tal dependência de código nos componentes torna difícil e maçante migrar a aplicação de um tipo de fonte de dados para outro. Quando as fontes de dados são alteradas, os componentes devem ser modificados para tratar o novo tipo de fonte de dados. Use um Data Access Object para abstrair e encapsular todo acesso ao armazenamento persistente. O Data Access Object gerencia a conexão com a fonte de dados para obter e armazenar dados.

Use o Padrão Data Access Object Quando: O principal objetivo de um DAO é encapsular o acesso e a manipulação de dados em uma camada separada; Você deseja implementar os mecanismos de acesso a dados para acessar e manipular dados em um armazenamento persistente; Você deseja desacoplar a implementação do armazenamento persistente do restante da aplicação;

Use o Padrão Data Access Object Quando (Cont.) Você deseja fornecer uma API de acesso uniforme aos dados para um mecanismo persistente para vários tipos de fontes de dados, como repositórios RDBMS, LDAP, OODB, XML, arquivos simples e assim por diante; Você deseja organizar os recursos de lógica de acesso a dados e encapsular recursos proprietários para facilitar a capacidade de manutenção e a portabilidade.

A Estrutura Do Data Access Object (DAO)

Os Participantes Do Data Access Object (DAO) Cliente o cliente é um objeto que requer acesso à fonte de dados para obter e armazenar dados. DAO o DAO é o objeto de função principal desse padrão. Ele abstrai a implementação de acesso a dados subjacente para o cliente a fim de permitir um acesso transparente a fonte de dados. BaseDeDado representa uma implementação de fonte de dados. ResultSet representa os resultados de uma execução de consulta. TipoDeDado representa um objeto de transferência usado como um carregador de dados.

Demonstracão DAO Arquivos: DAO.java, Pais.java, PaisDAO.java, BaseDeDados.java, TestaSelectPaisDAO.java, TestaInsertPaisDAO.java, TestaUpdatePaisDAO.java, TestaDeletePaisDAO.java, Participante.java, ParticipanteDAO.java, TestaSelectParticipanteDAO.java, TestaInsertParticipanteDAO, TestaUpdateParticipanteDAO.java, TestaDeleteParticipanteDAO.java, DAOException.java obs: o código deste exemplo está disponível no site http://www.pagliares.com.br

Conclusão Neste capítulo fomos apresentados à arquitetura da API do JDBC. Também vimos exemplos de como acessar e manipular uma base de dados MySQL via API do JDBC. Também aprendemos sobre a nova interface RowSet introduzida no J2SE 5.0. Introduzimos conceitos de padrões de projeto, em especial o padrão DAO,

Estudos Complementares Obrigatórios MySQL Para Desenvolvedores Java Revista Java Magazine, ed. 40. Código fonte dos exemplos disponível em http://www.devmedia.com.br JDBC de Ponta a Ponta (Parte 1) Revista Java Magazine, ed. 41. Código fonte dos exemplos disponível em http://www.devmedia.com.br JDBC de Ponta a Ponta (Parte 2) Revista Java Magazine, ed. 42. Código fonte dos exemplos disponível em http://www.devmedia.com.br observacão: Além da leitura dos textos acima, é importante testar os códigos de exemplo!!!!

Perguntas?