D S S 0 7 / 0 8

Transcrição

D S S 0 7 / 0 8
TP01
Universidade do Minho
Departamento de Informática
DSS 07/08
Camada de Dados - JDBC
Aula 1
António Nestor Ribeiro /António Ramires Fernandes
{anr,arf}@di.uminho.pt
TP01
2
Camada de Dados
•
A camada de dados, data layer, permite isolar o acesso aos
dados, por forma a que o resto da aplicação não esteja
dependente da origem ou estrutura sob a qual os dados estão
armazenados.
Presentation Layer
DSS 07/08
Business Logic
Data Layer
•
A combinação que aqui será explorada consiste na utilização de
bases de dados acedidas na camada de dados através de JDBC.
TP01
3
Aplicações Multi-Camada
•
Diversos tipos de objectos para efectuarem diferentes operações
DSS 07/08
– Presentation Objects
– Business Objects
– Data Objects
TP01
4
JDBC
•
JDBC = Java DataBase Connectivity
•
Pacotes: java.sql
import java.sql.*;
DSS 07/08
•
Passos:
1.
2.
3.
4.
inicializar o driver
estabelecer uma ligação
...
fechar a ligação
TP01
5
JDBC - Driver
•
Passo I: carregar a classe do driver
static Class forName(String nome);
– excepção: ClassNotFoundException
DSS 07/08
– Driver ODBC: sun.jdbc.odbc.JdbcOdbcDriver
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch (ClassNotFoundException e) {
// Driver não disponível
}
TP01
6
Drivers JDBC
DSS 07/08
•
Existem várias implementações de drivers JDBC para os
diversos motores de BD.
– Type 1: drivers que implementam a API JDBC como um mapeamento para
uma outra API. A portabilidade está dependente da existência do driver
destino. A ligação a ODBC é um exemplo destes drivers;
– Type 2: drivers que são escritos parcialmente em Java e numa outra
linguagem. É utilizado um cliente específico para o acesso à base de dados
pretendida;
– Type 3: drivers escritos em Java e que comunicam com um servidor de
middleware que faz o interface com as fontes de dados;
– Type 4: drivers em que o cliente liga directamente à base de dados
utilizando exclusivamente Java.
TP01
7
JDBC - Ligação
•
Passo II: Estabelecer uma ligação
•
Classe DriverManager disponibiliza os seguintes métodos de
classe:
DSS 07/08
Connection getConnection( String url);
Connection getConnection( String url, String login, String pass);
Connection getConnection( String url, java.util.Properties.info);
– excepção: SQLException
•
Connection é uma Interface que define um conjunto de métodos
para operar com a base de dados.
TP01
8
JDBC - Ligação
•
Passo II: Estabelecer uma ligação (2)
•
Parâmetro url => protocolo:subprotocolo:identificador
DSS 07/08
– protocolo: é constante e representado pela string "jdbc"
– subprotocolo: é função do motor da base de dados e da forma de acesso
(directa ou indirecta, por exemplo através de ODBC). No caso de acesso
através de ODBC o subprotocolo é "odbc".
– identificador da base de dados: Indica qual a base de dados a utilizar. No
caso da ligação ODBC-JDBC é o identificador definido em Data Source
Name.
TP01
9
JDBC - Ligação
•
Passo II: Estabelecer uma ligação (3)
Connection con;
...
DSS 07/08
try {
con =
DriverManager.getConnection("jdbc:odbc:bolsa");
}
catch (SQLException e) {
// Erro ao estabelecer a ligação
}
TP01
10
JDBC - Libertar Recursos
•
Passo IV: terminar a ligação
•
Interface Connection
void close();
boolean isClosed();
DSS 07/08
– excepção: SQLException
try {
con.close();
}
catch (SQLException e) {
// Erro ao terminar a ligação
}
TP01
11
JDBC - Comandos SQL
•
Tipos de comandos SQL
DSS 07/08
– DDL: Data Definition Language
CREATE TABLE idFunc (
cod VARCHAR(10) NOT NULL,
nome VARCHAR(50),
primary key(cod))
– Selecção
SELECT * FROM cotações
– Actualização
UPDATE clientes
SET numerário = 100000
WHERE nome = “João”
TP01
12
JDBC - Comandos SQL
•
Primeiro passo: criar um statement
•
Interface Connection
Statement createStatement();
DSS 07/08
– excepção: SQLException
•
Interface Statement
ResultSet executeQuery(String sql);
int executeUpdate(String sql);
– excepção: SQLException
TP01
13
JDBC - SELECT
•
Exemplo para comandos de selecção
Connection con;
... // iniciar a ligação
Statement st;
ResultSet res;
String sql;
DSS 07/08
sql = "SELECT nome FROM clientes WHERE numerário > 100000";
try {
st = con.createStatement();
res = st.executeQuery(sql);
} catch (SQLException e) {
// lidar com as excepções
}
TP01
14
JDBC - Actualização e DDL
• int executeUpdate(String sql);
– Se for um comando de actualização (UPDATE, INSERT ou DELETE)
• devolve o número de registos afectados
DSS 07/08
– Comandos DDL (ex: CREATE TABLE)
• devolve 0
Statement st;
try {
st = con.createStatement();
int count = st.executeUpdate("UPDATE...");
} catch (SQLException e) {
// lidar com as excepções
}
TP01
15
JDBC - Result Set
•
Acesso aos resultados armazenados num ResultSet
•
Interface ResultSet
– funciona como iterador sobre os registos devolvidos
–
boolean next();
DSS 07/08
– dentro de um registo fornece um conjunto de métodos para aceder aos
campos, por exemplo:
• getString(int índiceDoCampo);
• getString(String nomeDoCampo);
– Um ResultSet está disponível até ser fechado ou até o statement ser
reutilizado ou fechado
TP01
16
JDBC - Result Set
•
exemplo de acesso a um ResultSet
Statement st; ResultSet rs;
try {
DSS 07/08
rs = st.executeQuery("SELECT saldo FROM contas");
int total = 0;
while (rs.next())
total += rs.getInt ("saldo");
// nunca fazer isto em casa!!!
System.out.println("Soma :" + total");
} catch (SQLException e) {
// lidar com as excepções
}
TP01
17
DSS 07/08
JDBC - Exercício
•
Crie uma base de dados em Access com uma tabela "clientes"
com os seguintes campos: cod (chave), saldo e nome. Preencha
a tabela com alguns valores;
•
Registe a base de dados no ODBC;
•
Escreva um programa em java para inserir um registo na tabela
e em seguida calcular o total dos saldos (iterando o ResultSet).
TP01
18
Apêndice - Dummy's Guide to JDBC-ODBC e
Access
•
Para registar uma base de dados no ODBC realizar os
seguintes passos:
1. Abrir "Data Sources (ODBC)". ControlPanel -> Administrative Tools;
DSS 07/08
2. Seleccionar "Add" e escolher "Driver do Microsoft Access";
3. Preencher "Data Source Name" (este vai ser o nome pela qual a base de
dados é conhecida numa aplicação java com JDBC-ODBC;
4. Pressionar "Select..." para indicar o nome do ficheiro da base de dados;
5. "OK"!

Documentos relacionados

Curso de Java – Módulo III

Curso de Java – Módulo III Claro que para criar um programa Java que faz acesso a banco, deve-se instalar a JDK. Ao fazer isso, já existe na API o acesso ao pacote básico. Após a instalação do Java, devemos instalar um drive...

Leia mais

JDBC – Trabalhando com banco de dados em Java

JDBC – Trabalhando com banco de dados em Java padrão Microsoft de acesso a banco de dados, ODBC (Open DataBase Connectivity), porém tem a vantagem de ser multi-plataforma. Além da independência da plataforma, o Java também visa obter independê...

Leia mais

Acesso a Banco de Dados com JDBC

Acesso a Banco de Dados com JDBC DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE", "system", "senha");

Leia mais

JDBC – Conexão com Banco de Dados

JDBC – Conexão com Banco de Dados ◦ DriverManager: responsável por criar uma conexão com o banco de dados ◦ Connection: classe responsável por manter uma conexão aberta com o banco de dados ◦ Statement: gerencia e executa instruçõe...

Leia mais

Acesso a Banco de Dados com JDBC

Acesso a Banco de Dados com JDBC PASSO 1: IMPORTAÇÃO DOS PACOTES NECESSÁRIOS PASSO 2: REGISTRO DO(S) DRIVER(S) PASSO 3: ABERTURA DA CONEXÃO PASSO 4: EXECUÇÃO DE CONSULTAS E RECUPERAÇÃO DOS RESULTADOS PASSO 5: FECHAMENTO DA CONEXÃO

Leia mais

Java e Bancos de Dados

Java e Bancos de Dados //Recebendo o conjunto de dados da consulta SQL ResultSet rs = stmt.executeQuery("SELECT id, nome FROM ALUNO"); // Se houver resultados, posiciona-se o cursor na próxima linha de dados while (rs.ne...

Leia mais