Java
Conexão com Banco de Dados
Introdução
• funcionalidade primordial em qualquer sistema;
• “é a habilidade para comunicar-se com um
repositório de dados”.
• A Linguagem Java possui uma Application
Programming Interface (API) que possibilita o
acesso a BDs;
• um modelo de conexão uniforme;
• API é a Java DataBase Connectivity (JDBC)
API básica
•
•
•
•
•
Entrada/saída (java.io)
Interface gráfica com o usuário (java.awt)
Comunicação em rede (java.net)
Coleções (java.util)
Applets (java.applet)
API básica
•
•
•
•
•
Componentes (java.beans)
Objetos distribuídos Java-Java (java.rmi)
Segurança (java.security)
Conectividade com BDs (java.sql)
Internacionalização e formatação
(java.text)
Extensões-padrão à API Java
•
•
•
•
Interface gráfica c/ o usuário (javax.swing)
Extensão de servidores (javax.servlet)
Conectividade com BDs (javax.sql)
Objetos distribuídos Java-*
(org.omg.CORBA)
Extensões-padrão à API Java
•
•
•
•
•
•
Componentes de negócios (javax.ejb)
Diretórios (javax.naming)
Transações (javax.transaction)
Correio eletrônico (javax.mail)
Telefonia (javax.phone)
...
Integração com outras
linguagens
• Algumas vezes é necessária a integração
com módulos em outras linguagens
(eficiência, funcionalidade específica da
plataforma, reutilização de código legado)
• Java Native Interface realiza integração
com código nativo
• Código externo é encapsulado em classes
com métodos nativos
• Conseqüência: perda de portabilidade
JDBC
• O que é a JDBC?
– consiste em uma biblioteca;
– implementada em Java;
– disponibiliza classes e interfaces para o acesso ao
banco de dados;
• Para cada banco de dados existe uma
implementação: Drives, no caso interfaces que
devem ser implementadas;
• São interfaces porque levam em considerações
particularidades;
API JDBC
• Promove independência do servidor de
dados para a aplicação (usa drivers
substituíveis)
• Pode ser usada com quaisquer dados
tabulares (como tabelas relacionais,
planilhas, diretórios)
• Usa strings SQL como argumentos para
as requisições ao servidor (dinâmica)
Drivers JDBC Disponíveis
•
•
•
•
•
•
•
•
•
MS SQL Server
IBM DB2
Oracle
Interbase
MySQL
Informix
Sybase
...
ODBC/OLE DB
Tipos de JDBC
• JDBC-ODBC:
– Também conhecido como Ponto JDBCODBC;
– restrito à plataforma Windows;
– utiliza ODBC para conectar-se com o banco
de dados;
– converte métodos JDBC em chamadas às
funções do ODBC;
– geralmente é usado quando não há um driver
“puro-java”;
Tipos de JDBC
• Driver API-Nativo:
– traduzir as chamadas realizadas com o JDBC
para realizadas com a API cliente do banco
de dados utilizado;
– Funciona +- como a JDBC-ODBC;
– pode ser que sejam necessários outras
soluções;
Tipos JDBC
• Driver de Protocolo de Rede:
– Converte a chamada por meio do JDBC para
um protocolo de rede;
– Independe do banco de dados que está
sendo utilizado;
– devido ao fato de se utilizar de protocolos que
não se prendem a um determinado banco de
dados;
– modelo de conexão mais flexível e
abrangente;
Tipos JDBC
• Driver nativo:
– converte as chamadas JDBC diretamente no
protocolo do banco de dados;
– é implementado na linguagem Java;
– normalmente independe de plataforma;
– escrito pelos próprios desenvolvedores;
– muito flexível;
– tipo mais recomendado para ser usado e
mais utilizado no mercado;
Pacote java.sql
• fornece a API para acesso e processamento de dados;
• geralmente acessa uma base de dados relacional;
• principais classes e interfaces:
– 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;
– Statement, gerencia e executa instruções SQL;
– PreparedStatement, gerencia e executa instruções SQL,
permitindo também a passagem de parâmetros em uma
instrução;
– ResultSet, responsável por receber os dados obtidos em uma
pesquisa ao banco.
DriverManager
• responsável pelo gerenciamento de drivers JDBC;
• estabelece conexões a bancos de dados;
// Carregando um driver em tempo de execução
Class.forName("org.gjt.mm.mysql.Driver");
// Tentando estabelecer conexão com o Banco de Dados
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/aula?
autoReconnect=true", "conta","senha");
• retorna uma implementação para a interface
Connection;
Connection
• representa a conexão com o banco de dados;
• proporcionar informações sobre as tabelas do banco
através de transações;
• métodos desta interface freqüentemente utilizados
(SUN, 2007):
– commit(), executa todas as alterações feitas com o banco de
dados pela atual transação.
– rollback(), desfaz qualquer alteração feita com o banco de dados
pela atual transação.
– close(), libera o recurso que estava sendo utilizado pelo objeto.
• Se preocupa em como o banco irá se comportar;
Statement
• Implementação de uma Interface que fornece métodos para executar
uma instrução SQL;
• Não aceita a passagem de parâmetros;
• principais métodos da Interface Statement são (SUN, 2007):
– executeUpdate(), executa instruções SQL do tipo: INSERT, UPDATE e
DELETE;
– execute(), executa instruções SQL de busca de dados do tipo SELECT;
– close(), libera o recurso que estava sendo utilizado pelo objeto.
// Instanciando o objeto statement (stmt)
Statement stmt = conn.createStatement();
// Executando uma instrução SQL.
stmt.executeUpdate(“INSERT INTO ALUNO VALUES (1, ‘Pedro da Silva’)”);
PreparedStatement
• A interface PreparedStatement possui todos os recursos
da interface Statement;
• acrescentando a utilização de parâmetros em uma
instrução SQL;
• métodos da interface PreparedStatement são (SUN,
2007):
–
–
–
–
execute(), consolida a instrução SQL informada;
setDate(), método utilizado para atribuir um valor do tipo Data;
setInt(), utilizado para atribuir valores do tipo inteiro;
setString(), método utilizado para atribuir valores do tipo Alfa
Numéricos.
PreparedStatement
// Instanciando o objeto preparedStatement (pstmt)
PreparedStatement pstmt =
conn.prepareStatement("UPDATE ALUNO SET NOME = ?");
// Setando o valor ao parâmetro
pstmt.setString(1, “MARIA RITA”);
ResultSet
• Esta interface permite o recebimento e gerenciamento
do conjunto de dados resultante de uma consulta SQL;
• métodos capazes de acessar os dados;
• métodos desta interface freqüentemente utilizados
(SUN, 2007):
– next(), move o cursor para a próxima linha de dados, já que o
conjunto de dados retornados pela consulta SQL é armazenado
como em uma lista.
– close(), libera o recurso que estava sendo utilizado pelo objeto.
– getString(String columnName), recupera o valor da coluna
informada como parâmetro, da linha atual do conjunto de dados
recebidos pelo objeto ResultSet.
ResultSet
//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.next()) {
// Recuperando os dados retornados pela consulta SQL
int id = rs.getInt("id");
String nome = rs.getString("nome");
}
• métodos como o getInt(), getString() para recuperar os
valores;
Tipos de Drivers JDBC
• Tipo 1: driver Java invoca driver ODBC
nativo
• Tipo 2: driver Java invoca API cliente
proprietária nativa
• Tipo 3: driver acessa servidor através de
middleware de banco de dados
• Tipo 4: driver acessa servidor através de
protocolo de rede nativo do servidor
• Tipos 1 e 2: soluções provisórias; Tipos 3 e
4: 100% Java, podem ser carregados via
rede
Driver
Tipo 1
Driver
Tipo 2
Driver
Tipo 4
Driver
Tipo 3
Exemplo
import java.awt.Frame;
import java.awt.List;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Aula {
private Connection conn;
private PreparedStatement pstmt;
private Statement stmt;
private ResultSet rs;
Exemplo
public void open() {
try {
Class.forName("org.gjt.mm.mysql.Driver");
conn = DriverManager.getConnection(
"jdbc:mysql://localhost/aula04?autoReconnect=true",
"root", "");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
Exemplo
public void close() {
try {
if (stmt != null)
stmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
Exemplo
public void inserir(){
try {
// Abrindo a conexão com o banco
open();
// Instanciando o objeto statement (stmt)
stmt = conn.createStatement();
// Executando uma instrução SQL.
stmt.executeUpdate(
"INSERT INTO ALUNO VALUES (1, 'Pedro da Silva')");
// Fechando a conexão com o banco
close();
} catch (SQLException e) {
// Fechando a conexão com o banco
close();
e.printStackTrace();
}
}
Exemplo
public void alterar(){
try {
// Abrindo a conexão com o banco
open();
// Instanciando o objeto preparedStatement (pstmt)
pstmt = conn.prepareStatement("UPDATE ALUNO SET NOME = ?
Where id = 1");
// Setando o valor ao parâmetro
pstmt.setString(1, "MARIA RITA");
// Fechando a conexão com o banco
pstmt.execute();
close();
} catch (SQLException e) {
// Fechando a conexão com o banco
close();
e.printStackTrace();
}
}
Exemplo
public ResultSet buscarAlunos(){
try {
open();
stmt = conn.createStatement();
rs = stmt.executeQuery("SELECT id, nome FROM ALUNO");
return rs;
} catch (SQLException e) {
close();
e.printStackTrace();
}
return null;
}
Exemplo
public void imprimirAlunos() throws SQLException{
JTextArea output = new JTextArea(20,30);
Banco aula = new Banco();
aula.rs = aula.buscarAlunos();
while (aula.rs.next()){
output.setText("Id: " + aula.rs.getInt("id") + " - " + "Nome: " +
aula.rs.getString("nome")+"\n");
}
JFrame janela = new JFrame("Janela");
janela.setLocation(300, 300);
janela.setSize(300, 300);
janela.add(new JScrollPane(output));
janela.setVisible(true);
}
Exemplo
public static void main(String[] args ){
Aula aula = new Aula();
aula.inserir();
aula.alterar();
aula.rs = aula.buscarAlunos();
try {
aula.imprimirAlunos();
} catch (SQLException e) {
e.printStackTrace();
}
}
Java e a Web
• Java fornece três alternativas distintas
para aplicações Web:
– Applets (cliente)
– Servlets (servidor)
– JavaServer Pages (servidor)
Applets
• Applets são módulos de programa Java
que executam no contexto de uma página
Web
• Carga de applets é feita através da tag
<applet>
• Applets podem comunicar-se com o
servidor de origem (Ex.: JDBC, sockets,
etc)
• Applets são inerentemente gráficas
Applets - Recursos
• Applets podem comunicar-se com o
servidor de origem para E/S remota,
conexão com BD, invocações remotas, etc
• Applets podem orientar a navegação do
browser
• Applets numa mesma página podem
comunicar-se
Applets - Restrições de
Segurança
• Applets executam em um ambiente
restrito (sandbox) como medida de
segurança
• Proibições comuns:
– E/S em arquivos locais
– comunicação com outros servidores que não
o de origem
– execução de programas locais
– carregar bibliotecas e acessar código nativo
Servlets
• São módulos de programa Java que
executam no contexto de um servidor
• Paradigma requisição-serviço-resposta
• Usadas principalmente em servidores Web
– paradigma coerente com protocolo HTTP
– 1º) browser envia requisição (GET/POST)
– 2º) servlet realiza serviço
– 3º) página HTML é gerada dinamicamente
como resposta
JavaServer Pages
• Páginas HTML que possuem scripts
(roteiros) para o servidor e embutem tags
especiais
• Similares às Active Server Pages
• Linguagem script padrão: Java (outras
podem ser usadas)
• São traduzidas em tempo de execução
para servlets Java
• Novas tags podem ser adicionadas
JavaServer Pages - Recursos
• Possuem acesso às mesmas
funcionalidades que as Servlets, com
maior simplicidade
• Templates JSPs são de fácil manutenção
(similaridade c/ HTML)
• JSPs acessam JavaBeans, facilitando a
separação das lógicas da aplicação e da
interface c/ o usuário
<html>
<body>
<%
String sexo,nome1,nome2,email;
nome1 = request.getParameter(“firstname”);
nome2 = request.getParameter(“lastname”);
email = request.getParameter(“email”);
sexo = request.getParameter(“sex”);
%>
Hello, <%= nome1 %>
</body>
</html>
Servlet Engines
• Softwares que habilitam um servidor Web
a suportar servlets Java e JavaServer
Pages
• Facilitam a aceitação da tecnologia
Servlet
• Contornam a guerra tecnológica MS x Sun
• Alguns produtos:
– Allaire JRun (IIS, NES, Apache)
– New Atlanta ServletExec (IIS, NES, Mac OS
(vários))
Servidores c/ Suporte Embutido
a Servlets/JSP
•
•
•
•
•
•
Apache Web Server
IBM Websphere
Sun/Netscape iPlanet
Oracle Application Server
SilverStream Application Server
outros...
Conclusões
Java - Tabus e Verdades
• Java é lento?
– os principais gargalos são a rede e o banco
de dados
– mecanismos de otimização: JIT e HotSpot™
– a complexidade da execução de código Java
é constante - o desempenho do hardware tem
evolução geométrica
– os benefícios da tecnologia tornam o
desempenho absoluto menos relevante
Java - Tabus e Verdades
• Java é útil apenas para animações na
Web?
– Java se mostra muito adequada para
aplicações cliente-servidor (principalmente
lado servidor)
– Java possui um modelo de componentes e
APIs excelentes para o desenvolvimento de
aplicações corporativas multi-camadas
(GUI+BO/BP+BD)
– Poucas aplicações não são adequadas para
Java (por requisitos de desempenho)
Conclusões
• A tecnologia Java está madura e abrange
as mais diversas aplicações
• A tecnologia Java concede ao
desenvolvedor total independência de
fornecedores, ao ser aberta,
multiplataforma e baseada em padrões
• A tecnologia Java fornece aos usuários
um excelente suporte a ambientes
heterogêneos e preserva o investimento
em hardware e software
http://www.javasoft.com
• Java 2 Software Development Kit
• JavaServer Web Development Kit
• Documentação:
• Tutorial Java
• Documentação do Java 2 SDK (APIs,
guias, etc)
• Documentação de outras APIs
• Especificação da linguagem
• Especificação da máquina virtual
• Artigos, fóruns, notícias, bugs, etc
Referências
DEITEL, Harvey M. Java: como programar.
6 ed. São Paulo: Pearson Prentice Hall,
2005.
THOMPSON, Marco Aurélio. Java 2 &
banco de dados. São Paulo: Érica, 2002.
SUN, MicroSystem. Java Technology.
Disponivel em http://java.sun.com.
Acessado em 12/10/2007.
Download

Java Conexão com Banco de Dados