Download Java Conexão com Banco de Dados

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
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.