• 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 alunoscesar@gmail.com

Bancos de Dados e

Bancos de Dados e

Java com JDBC

Java com JDBC

Cesar Rocha Cesar Rocha alunoscesar@gmail.com alunoscesar@gmail.com

(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

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

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

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

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

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