Você está na página 1de 28

Gerência de Banco de

Dados

Professora: Simone de Almeida


Criando aplicação Java com
acesso ao SGBD Firebird

API JDBC
(Java Database Connectivity)
Aplicação Java
• A API JAVA para executar instruções SQL
(Structured Query Language) é a java.sql.*
• Contém as classes para comunicação com o BD
import java.sql.*;
• Resultado de consultas: é sempre tratado como
uma classe em JAVA
• O JDBC é o responsável em garantir a conexão
de Java com BD (contém os rotinas para
tratamento de dados)
• A combinação JAVA - JDBC permite que
programadores escrevam aplicações
multiplataforma. Por exemplo:
 A aplicação desenvolvida em Windows funcionará em
Linux, por exemplo
API JDBC
• Promove independência do servidor de
dados para a aplicação
• Não é necessária existência de driver
adicional para comunicação, como o
ODBC.
• Pode ser usada com quaisquer dados
tabulares (como tabelas, planilhas, ...)
• Usa strings SQL como argumentos para
as requisições ao servidor (dinâmica)
JDBC X ODBC (Open
Database Connectivity)
• ODBC muito usado em ambiente Windows e não
é apropriado para Java, porque usa uma interface
em C.
• ODBC precisa ser manualmente instalado em
toda máquina cliente (configurado no Painel de
Controle).
 Para usar PostgreSQL, Oracle, ..., em Delphi, temos que
instalar e configurar o driver ODBC específico para cada
SGBD
• JDBC driver é escrito completamente em JAVA, e
o código é automaticamente “instalado” e
portável.
• Com o JDBC o acesso torna-se “nativo”.
Drivers JDBC disponíveis
• SQL Server
• IBM DB2
• Oracle
• Interbase/Firebird
• PostgreSQL
• MySQL
• Informix
• Sybase
• ...
• ODBC/OLE DB
Arquitetura de duas camadas
• Aplicação “fala” (se comunica)
diretamente com a Base de Dados (a
aplicação sabe onde está o BD)
• Instruções SQL são levadas para a Base
de Dados e os resultados são enviados
de volta para a aplicação
Arquitetura de três camadas
• Instruções SQL são enviadas para um servidor de
aplicação (camada intermediária), que realiza o
tratamento dos dados e somente depois há envio à
Base de Dados.
• Somente o servidor de aplicação conhece o BD.
• Provê vantagens de desempenho (o cliente não
precisa ser robusto) – aplicações Web e Desktop
em camadas.
• O servidor de aplicação precisa ser robusto!
Como implemento uma aplicação em Delphi?
Quais objetos/componentes necessito?

• Por exemplo, desejamos inserir um


CLIENTE em Delphi
Componentes necessários:
 IBDatabase: responsável pela conexão
com o BD (configuro o IP do servidor,
caminho do BD, usuário e senha)
 IBTransaction: ligado ao anterior, tem o
objetivo de garantir o processamento das
transações (COMMIT/ROLLBACK)
Como implemento uma aplicação em Delphi?
Quais objetos/componentes necessito?

• IBQuery: deverá estar associado ao


IBDatabase e ao IBTransaction (conexão
e transação, respectivamente). Este
componente é o responsável por enviar
instruções SQL ao BD conectado.
• DataSource: é o componente que,
associado ao IBQuery, exibirá o
resultado de uma consulta em um
DBGrid, por exemplo.
Comandos em Delphi
IBQuery.SQL.Text:=‘insert into CLIENTE ...’
IBQuery.ParamByName(‘NOME’).AsString:=...
IBQuery.ParamByName(‘TELEFONE’).AsInteger:=...
...
IBQuery.ExecSQL;
Legenda
Comando SQL
Passagem de parâmetros
Execução do comando
Java

• E em Java?
• Como funciona?
• Quais classes deverei utilizar?
• Qual a sequência de comandos
para inserir um
• CLIENTE?
• E para retornar os dados?
Principais classes da API
java.sql.*
• Driver - intermediação entre aplicação e SGBD. É o
carregamento do JDBC na aplicação.
• Connection – responsável pela conexão com o BD
(depende do JDBC, servidor, caminho, usuário e
senha) = IBDatabase +IBTransaction em Delphi.
• DriverManager - gerencia os diferentes drivers
carregados. Trabalha em conjunto com a classe
anterior, para garantir o sucesso da conexão.
• Statement – é a classe que emite SQL para
modificação ou consulta = semelhante ao IBQuery.
• ResultSet – recebe o resultado de consulta
realizada pela classe Statement = semelhante ao
DataSource.
Connection
• Representa uma conexão (sessão) com um
determinado banco de dados
• Necessita de um driver JDBC carregado para
realizar a conexão
• Através desta classe, são criados objetos
Statement para requisições ao BD (comandos
SQL)
• Gerencia transações (commit/rollback)
• Possibilita obter informações sobre a base de
dados em tempo de execução (tabelas, visões,
procedimentos armazenados, usuários, etc)
Connection
• Classe DriverManager
 A lista de drivers (classes) registrados é obtida através
do método
DriverManager.registerDriverloaded()
 O DriverManager carrega e registra automaticamente o
driver através do método
Class.forName(“nome do driver”);
• Estabelecimento de conexão
 Uma vez que a classe de driver foi carregada e
registrada com a classe DriverManager, é estabelecida
a conexão com a Base de Dados
 Quando uma requisição para conexão é feita com uma
chamada para o método DriverManager.getConnection,
a classe DriverManager testa cada driver disponível
Visão Geral de uma Conexão

• O objeto Connection representa a


conexão com a Base de Dados
• Uma sessão de conexão inclui
instruções SQL que são executadas e
os resultados retornados
• Uma aplicação pode ter uma ou mais
conexões com uma Base de Dados ou
várias Bases de Dados ao mesmo
tempo
Abrindo uma Conexão

• Chamada ao método
DriverManager.getConnection()
String url ="jdbc:postgresql://aplicacao";
Connection conexao =

DriverManager.getConnection(url,”usuario”,
”senha”);
Statement
• Possibilita enviar requisições SQL através de
uma conexão associada
• Tipos de requisições:
 consultas (sempre retornam um ResultSet):
Statement.executeQuery (SQL)
Em Delphi seria: IBQuery.Open

 Modificações (insert, update, delete, create, ...):


Statement.executeUpdate (SQL)
Em Delphi seria: IBQuery.ExecSQL
ResultSet
• Armazena o resultado de consulta
(cursor)
• Possibilita obter o valor das colunas
• Possibilita obter informações da
tabela/visão em tempo de execução
(nome, tipo e propriedades das
colunas, nome da tabela, etc.)
• Sempre está associado a um
Statement para exibir os dados
Criando uma conexão
import java.sql.*;
...
//registra o driver e carrega para a aplicação usar
Class.forName(“org.firebirdsql.jdbc.FBDriver”);

//cria conexão com o BD através do driver carregado


Connection conexao = DriverManager.getConnection
(“jdbc:firebirdsql:servidor/3050:caminho”, “usuario”,
“senha”);
Indicar o caminho completo da base de
Informar o servidor dados, usando ‘/’. Simplificar a árvore de
a ser conectado. A pastas (Ex.: c:/bd/meubd.fdb). Usuário e
porta padrão é 3050 senha devem ser indicados também.
Modificando dados
Após conexão criada anteriormente, temos:
A classe Statement depende da conexão
ativa para poder ser usada. O comando
createStatement() concretiza a criação

Statement sql = conexao.createStatement (); O comando


executeUpdate precisa
de uma SQL como
parâmetro.
//insere uma linha na tabela editoras
sql.executeUpdate (“insert into editoras values 44366,’McGraw-
Hill’)”);

//remove obras que não tenham exemplares


sql.executeUpdate (“delete from obras where exemplares = 0”);
Obtendo dados
• Para consultas é obrigatório termos a conexão ativa,
o Statement criado e um objeto ResultSet que rece-
berá os resultados.
...
Statement sql;
ResultSet consulta;
sql = conexao.createStatement ();
consulta = sql.executeQuery (“select * from obras”);

// processa todas as linhas e retorna os autores


while (consulta.next ()){
System.out.println(consulta.getString( “autor”));
}
Liberação de recursos
• O garbage collector tem comportamento
dependente de implementação
• Regra: encerrar os objetos JDBC assim que
possível, para liberar recursos
...
consulta.close ();
...
sql.close ();
...
conexao.close ();
...
Resumo comunicação Java
– JDBC
• Estabelece conexão com a Base de Dados
• Envia instruções SQL
• Processa o resultado
Connection conexao =
DriverManager.getConnection("jdbc:firebird:server",
"login","password");
Statement sql = conexao.createStatement();
ResultSet consulta = sql.executeQuery("SELECT a,b,c FROM Tabela1);
while (consulta.next())
{
int x = consulta.getInt("a");
String s = consulta.getString("b");
float f = consulta.getFloat("c");
}
Classes especiais na API
java.sql.*
• JDBC provê 3 classes para enviar instruções SQL
para a Base de Dados
• Statement - criada pelo método createStatement:
envia simples instruções SQL
• PreparedStatement - criada pelo método
prepareStatement : usada para instruções que
carregam um ou mais parâmetros como
argumentos de entrada
• CallableStatement - criada pelo método
prepareCall : usada para executar SQL stored
procedures - um grupo de instruções SQL
nomeado como uma chamada a uma função
• Os métodos de criação dos objetos acima, são
invocados através de uma conexão ativa!
Objetos de instrução SQL
• Uma vez que a conexão é estabelecida, as instruções SQL podem
ser enviadas
• Um objeto de instrução é criado com o método createStatement

Statement sqlST = conexao.createStatement();


sqlST.executeUpdate(“insert into ...”);
ou
PrepareStatement sqlPS = conexao.prepareStatement(“insert into...”);
sqlPS.executeUpdate();

Para passar parâmetro para um PreparedStatement, indicamos com ?


onde irão os valores: O método setString serve para passar
...(“insert into... values(?, ?)”); o parâmetro. Neste caso, a primeira ?
sqlPS.setString(1,VALOR); será substituída por VALOR. Existem
setInt(), setFloat, setDate, ..., ou seja,
setTipodeDado(índice do parâmetro, valor)
Organização em colunas

• O método executeQuery foi projetado para


executar instruções que produzem um conjunto
de resultados, como por exemplo um select
• Os métodos “getXXX” fornecem o valor de uma
coluna na linha corrente

String s = Resultados.getString(”username");
String s = Resultados.getString(2);
Dúvidas?

Você também pode gostar