• Nenhum resultado encontrado

JDBC

N/A
N/A
Protected

Academic year: 2021

Share "JDBC"

Copied!
27
0
0

Texto

(1)

1

Bancos de Dados e

Java com JDBC

Cesar Rocha [email protected]

Bancos de Dados e

Bancos de Dados e

Java com JDBC

Java com JDBC

Cesar Rocha Cesar Rocha [email protected] [email protected]

(2)

2

Objetivos

§ Explorar importantes conceitos ligados à API JDBCJDBC

e seu uso para o acesso de bancos de dados

§ Criação e gerenciamento bancos de dados, principais

classes e métodos da API JDBC, sintaxe e comandos básicos SQL, drivers de conexão, bancos de dados atuais, boas práticas de programação e erros comuns

§ Exercícios e vários exemplos de códigos que você deve testar visando solidificar seus conhecimentos §

§ LembreLembre--se:se: este módulo é fundamental para a

conclusão e entrega do projeto deste estágio!

(3)

3

Motivação

§ Até aqui, boa parte dos projetos de disciplina Java envolviam alguma forma de persistência de dados:

§ Uso de estruturas de dados (coleções), organização de

informações em arquivos (streams I/O), etc.

§ Estas abordagens eram soluções simples e rápidas

para problemas relativamente fáceis…

§ … porém, garantimos escalabilidade e segurança?

§ Aplicações reais usam bancos de dados como meio

(quase sempre) principal de persistência

§ Modelos relacionais são comumente empregados

(4)

4

Modelo relacional

§ Um estilo muito popular de organizar os nossos dados em um banco de dados é o modo relacional

§ Um sistema gerenciador de banco de dados (SGBD)

relacional é o responsável por armazenar dados na forma de linhas e colunas (ou seja, em tabelas)

§ Os mais populares: MySQL, Postgrees, o Oracle,

Microsoft Access, o Microsoft SQL Server, Cloudscape...

§ Uma linguagem chamada Structured Query

Language (SQL) é quase universalmente utilizada

§ Diversas operações: criação, alteração, consultas...

§ Conceitos básicos serão essenciais aqui!

(5)

5

Tabelas

§ Em um modelo relacional, teremos as entidades

(tabelas) juntamente com os seus relacionamentos

§ Os registros (as linhas), campos (as colunas) e tipos de

dados associados definem a estrutura da tabela

§ Em geral, define-se um identificador único para cada

registro (isso evitará a duplicidade de registros)

... ... ... ... 2004 O’Reilly Redes I PJE-732 1998 Campus Java ZRT-446 Ano Editora Titulo ISBN • Campos da tabela

devem ter um tipo

•Note a presença de

uma chave-primária

Campos da tabela Campos da tabela devem ter um tipo

devem ter um tipo

Note a presenNote a presençça de a de uma

uma chave-primária

• Cada registro irá

representar um livro

Cada registro irCada registro iráá representar um livro

representar um livro

Tabela

(6)

6

Linguagem SQL

§ Conforme foi dito, a linguagem Structured Query Language (SQL) é um padrão aceito no mercado para manipular tabelas adequadamente

§ Veja o código utilizado para criar a tabela livro: CREATE TABLE tblLivro (

isbn VARCHAR ( 15 ), titulo VARCHAR ( 30 ), editora VARCHAR ( 20 ), ano INT,

PRIMARY KEY ( isbn ) )

CREATE TABLE tblLivro ( isbn VARCHAR ( 15 ), titulo VARCHAR ( 30 ), editora VARCHAR ( 20 ), ano INT,

PRIMARY KEY ( isbn ) )

O tipo

O tipo varcharvarchar representa texto

representa texto

Tipo int representa

Tipo int representa

inteiros inteiros C ód ig o pa ra c ria r a ta be la li vr o

Note a sintaxe para

Note a sintaxe para

chave

chave--primariaprimaria

Tamanho

Tamanho

* Há casos de pequenas variações: programadores poderiam declarar a chave diretamente, ou usar tipo charem vez de varchar

(7)

7

Linguagem SQL

§ Para inserir dados na tabela livro:

INSERT INTO tblLivro VALUES

(‘ZRT-446’, ‘Java’, ‘Campus’, ‘1998’);

§ Para atualizar (alterar) dados na tabela livro:

UPDATE tblLivro SET titulo = ‘Java II’

WHERE ano < 2004

§ Para remover dados da tabela livro:

DELETE FROM tblLivro

WHERE isbn = ‘ZRT-446’ AND titulo = ‘Java II’

§ Para consultar dados da tabela livro:

SELECT * FROM tblLivro

(8)

8

Relacionamentos

§ Suponha, neste exemplo da biblioteca de livros, que se precisa armazenar cada uma das cópias dos livros

§ Um livro terá muitas cópias a serem emprestadas

§ Cada cópia deverá ter seu código (rastreamento)

§ § 11aa tentativatentativa:: 300 200 100 CodCopia 2004 O’Reilly Redes I PJE-732 1998 Campus Java ZRT-446 1998 Campus Java ZRT-446 Ano Editora Titulo ISBN Tabela

Tabela de de CCóópiaspias

Existe algum problema nesta abordagem?

Existe

(9)

9

Relacionamentos

300 200 100 CodCopia PJE-732 ZRT-446 ZRT-446 ISBN Tabela

Tabela de de CCópiasópias

... ... ... ... 2004 O’Reilly Redes I PJE-732 1998 Campus Java ZRT-446 Ano Editora Titulo ISBN Tabela

Tabela de de LivrosLivros

A chave prim

A chave primáária em tabela ria em tabela livros tornar

livros tornar--sese--ááchave estrangeira na tabela de cna tabela de cóópias!pias!

(10)

10

Relacionamentos

§ Enfim, a chave-primária da tabela livros (a parte “um”) irá para a tabela cópias (parte “muitos”).

§ Ela será, portanto, uma chave estrangeira

§ Veja o código utilizado para criar a tabela copias: CREATE TABLE tblCopias (

codCopia int,

isbn VARCHAR ( 15 ),

PRIMARY KEY ( codCopia ), FOREIGN KEY ( isbn )

REFERENCES tblLivro )

CREATE TABLE tblCopias ( codCopia int,

isbn VARCHAR ( 15 ),

PRIMARY KEY ( codCopia ),

FOREIGN KEY ( isbn )

REFERENCES tblLivro ) A chave estrangeira A chave estrangeira C ód ig o pa ra c ria r a ta be la c op ia s

De onde ela vem?

(11)

11

Java Database Conectivity

§ JDBC é o mecanismo básico de Java para acesso a bancos de dados via linguagem SQL

§ O JDBC é uma API baseada em Java para conexão com

qualquer bancos de dados compatível com SQL

§ Toda a API encontra-se no pacote java.sql

§ Porém, JDBC nos permite integrar aplicações Java com bancos de dados que tenham drivers JDBC

§ Todos os mais populares bancos de dados mencionados

no início do módulo possuem drivers gratuitos

§ O banco deve ter pelo menos um driver ODBC, se não

(12)

12

Principais classes e interfaces

§ Interfaces § Driver § Connection § Statement § ResultSet § DatabaseMetadata § ResultSetMetadata § PreparedStatement § CallableStatement § Classes § DriverManager § Date § Time

(13)

13

Drivers

§ Um driver JDBC pode ser visto como uma camada intermediária que traduz chamadas da API JDBC em chamadas à API particular do banco de dados

§ As classes nativas do banco de dados implementam as

interfaces vistas no slide anterior, formando o driver

§ A implementação destas interfaces são diferentes para

cada banco de dados e são fornecidas por cada fabricante específico do banco de dados

§ Por isso, toda a aplicação Java que precise acessar um banco de dados, deverá utilizar um driver

(14)

14

Tipos de drivers

§ Tipo 1: JDBC-ODBC bridge

§ Usam uma ponte para ter acesso a um banco de dados. Vem com o J2SE. O driver ODBC deve estar configurado no cliente.

§ Tipo 2: Código nativo

§ Usam uma API nativa. Este driver converte chamadas JDBC em chamadas a API do banco. Mais rápido que o anterior.

§ Tipo 3: Servidor Intermediário

§ Oferecem uma API de rede via middleware que traduz

requisições para API do driver desejado. O servidor intermediário é capaz de se conectar a vários bancos de dados

§ Tipo 4: solução 100% Java

§ Drivers que se comunicam diretamente com o banco de dados usando soquetes de rede. É uma solução puro Java. Não requer código adicional do lado do cliente.

(15)

15

(16)

16

Passos para acessar um banco com JDBC

§ Os seguintes passos resumem, de forma macro, o

que é necessário para configurar e utilizar JDBC:

Œ Baixar o driver JDBC compatível com o banco

Importar as classes necessárias (pacote java.sql)

Ž Carregar e registrar o driver JDBC

Identificar o banco de dados (uma string) (URL)

Estabelecer uma conexão com o banco

Criar um comando a ser processado

Executar o comando SQL

Extrair os dados

(17)

17

1. Baixar o driver JDBC

§ A primeira coisa a fazer é entrar na página do

fabricante do banco de dados e procurar pelo driver

§ Configure o driver na IDE de programação

§ Normalmente, o driver está num arquivo extensão .jar

§ Se, mesmo assim, você não o encontrar o arquivo,

visite a página da SUN que contém informações sobre os bancos que implementam a API JDBC

java.sun.com/products/jdbc

§ Se, ainda assim, você não encontrar nada, sugiro

uma última tentativa: site “busca-driver” da SUN

(18)

18

2. Importar as classes

§ Como já foi dito, todas as principais interfaces e classes da API JDBC se encontram em java.sql:

import java.sql.*

§ Nota: alguns recursos avançados se encontram na javax.sql

(19)

19

3. Carregar e registrar o driver JDBC

§ Todo driver possui uma classe que o representa

§ Podemos carregar um driver na aplicação utilizando o

comando: Class.forName(nomeDaClasse)

§ O comando acima irá carregar as classes do driver, e

este será gerenciado pelo DriverManager de JDBC

§ Uma vez registrado o driver o DriverManager poderá

utilizá-lo para obter uma conexão com o banco

import java.sql.*;

try {

Class.forName( "org.postgresql.Driver" );

} catch ( ClassNotFoundException e ) {

// codigo para tratamento de erro...

(20)

20

4. Identificar o banco de dados (URL)

§ Para determinar qual driver será usado usa-se uma URL no formato:

jdbc:<subprotocolo>:<dsn>

§ A aplicação usa o subprotocolo para identificar e

selecionar o driver a ser instanciado.

§ O dsn é o nome que o subprotocolo utilizará para

localizar um determinado servidor ou base de dados.

§ Sintaxe dependente do fabricante. Exemplos:

jdbc:odbc:anuncios

jdbc:oracle:thin:@200.206.192.216:1521:BDExemplo jdbc:postgresql://localhost:5432/BDTeste

(21)

21

5. Criar uma conexão com o banco

§ Para se conectar ao banco, você irá precisar de um objeto Connection

§ Representa uma conexão ao banco de dados. É

retornada pelo DriverManager num objeto.

...

String url = "jdbc:postgresql://localhost:5432/BDTeste";

String login = "postgres";

String senha = "postgres";

try {

Connection con =

DriverManager.getConnection( url, login, senha ); } catch ( SQLException e ) {

// codigo para tratamento de erro...

(22)

22

6. Criar um comando a ser processado

§ Uma vez que obtemos o objeto Connection, chama-se sobre ele o método createStatement() para

obter um objeto do tipo Statement

§ Este objeto é que poderá enviar/executar comandos

SQL sobre o banco de dados

try {

Statement st = con.createStatement();

} catch ( SQLException e ) {

// codigo para tratamento de erro...

(23)

23

7. Executar o comando SQL

§ Uma vez que temos um Statement em mãos (o comando) podemos executar operações no banco

§ O método executeQuery(comando_sql), da

interface Statement, retorna um objeto ResultSet.

§ Os métodos de navegação de ResultSet:

next(), previous(), first() e last()

§ Métodos para obtenção de dados de ResultSet:

getInt(), getString(), getDate() ... try {

ResultSet rs =

st.executeQuery( “SELECT * FROM TBLIVROS” ); } catch ( SQLException e ) { // codigo erro...}

(24)

24

8. Extrair os dados

§ Com um ResultSet em mãos (o resultado da

consulta no banco) podemos extrair dados desta (sub)tabela de maneira direta:

... try {

ResultSet rs =

st.executeQuery( “SELECT isbn, ano FROM TBLIVROS” );

while ( rs.next() ) {

String isbn = rs.getString(“isbn");

int ano = rs.getInt(“ano");

// faça algo com os dados...

}

} catch ( SQLException e ) {

// codigo para tratamento de erro...

(25)

25

(26)

26

9. Fechando a conexão

§ Este passo é simples, porém importante:

§ deve-se fechar as conexões abertas com o banco no

final das operações

try {

rs.close();

st.close(); con.close();

(27)

27

Para um bom aproveitamento:

Para um bom aproveitamento:

§ Codifique os exemplos mostrados nestes slides e verifique pontos de dúvidas

§ Resolva todas as questões da lista de JDBClista de JDBC § Procure o professor ou monitor da disciplina e

questione conceitos, listas, etc.

§ Não deixe para codificar tudo e acumular assunto

para a avaliação.

Referências

Documentos relacionados

a) Realizar os serviços objeto do presente Contrato em conformidade com os requisitos de contratação, os interesses da CONTRATANTE e as necessidades do negócio. b)

It is pointed out from the results of our study that the social functioning values measured by the SF-36 in elderly after hip fracture are not significantly influenced by the type

Para tornar mais concreto esse processo abstrato, do amor, na narrativa, Mário de Andrade personifica o desejo no personagem Fräulein, porque ela, empregando várias

Todavia, se retirarmos o efeito da linha Outras Receitas (Despesas) Operacionais em ambos os anos, por terem uma natureza não recorrente, temos um crescimento de

Os lab-on-a-chip ficam cada vez mais viáveis economicamente e abrangem um hori- zonte ainda maior de aplicações quando uma nova ferramenta microfluídica é desenvolvida.

Com essa série, busca-se mostrar imagens descritivas a partir da fotografia de modelos que posam para este fim, bem como de apropriações de imagens de obras de arte de grandes

➢ Agora que você assistiu e ouviu, as orientações e explicações na videoaula, desenvolva as atividades das páginas 58 até 60... SEQUÊNCIA DIDÁTICA–METODOLÓGICA

A camada 4 gerencia esse processo, para assegurar de maneira confiável o sucesso no transporte dos dados, por exemplo, um serviço bastante interessante que atua de forma