Java Acesso a Banco de Dados
description
Transcript of Java Acesso a Banco de Dados
![Page 1: Java Acesso a Banco de Dados](https://reader033.fdocumentos.tips/reader033/viewer/2022051114/568135fc550346895d9d6ffc/html5/thumbnails/1.jpg)
Java Acesso aBanco de Dados
Prof. Marcos André Pisching, M.Sc.
![Page 2: Java Acesso a Banco de Dados](https://reader033.fdocumentos.tips/reader033/viewer/2022051114/568135fc550346895d9d6ffc/html5/thumbnails/2.jpg)
Banco de Dados Siglas:
JDBC – Java Database ConnectivityODBC – Open Database ConnectivitySQL – Structured Query Language
DDL – data definition language DML – data manipulation language
Prof. Marcos André Pisching, M.Sc. 2
![Page 3: Java Acesso a Banco de Dados](https://reader033.fdocumentos.tips/reader033/viewer/2022051114/568135fc550346895d9d6ffc/html5/thumbnails/3.jpg)
Banco de Dados
ProgramaJava
DriverJDBC
Servidor deBanco de
dados
Tabelas deBanco de
dados
Prof. Marcos André Pisching, M.Sc. 3
![Page 4: Java Acesso a Banco de Dados](https://reader033.fdocumentos.tips/reader033/viewer/2022051114/568135fc550346895d9d6ffc/html5/thumbnails/4.jpg)
JDBC
![Page 5: Java Acesso a Banco de Dados](https://reader033.fdocumentos.tips/reader033/viewer/2022051114/568135fc550346895d9d6ffc/html5/thumbnails/5.jpg)
JDBC JDBC é uma interface baseada em Java para acesso
a bancos de dados através de SQL. Pacote Java padrão: java.sql Baseada em ODBC
Usando JDBC, pode-se obter acesso direto a bancos de dados através de applets e outras aplicações Java
Nesta parte é apresentada uma introdução superficial do JDBC mas suficiente para integrar aplicações Java
com bancos de dados relacionais que possuam drivers JDBC
Prof. Marcos André Pisching, M.Sc. 5
![Page 6: Java Acesso a Banco de Dados](https://reader033.fdocumentos.tips/reader033/viewer/2022051114/568135fc550346895d9d6ffc/html5/thumbnails/6.jpg)
JDBC JDBC é uma interface de nível de código
Código SQL é usado explicitamente dentro do código Java O pacote java.sql consiste de um conjunto de classes e
interfaces que permitem embutir código SQL em métodos.
Com JDBC é possível construir uma aplicação Java para acesso a qualquer banco de dados SQL. O banco deve ter pelo menos um driver ODBC, se não tiver
driver JDBC
Para usar JDBC é preciso ter um driver JDBC O JSE distribui um driver ODBC que permite o acesso a
bancos que não suportam JDBC mas suportam ODBC
Prof. Marcos André Pisching, M.Sc. 6
![Page 7: Java Acesso a Banco de Dados](https://reader033.fdocumentos.tips/reader033/viewer/2022051114/568135fc550346895d9d6ffc/html5/thumbnails/7.jpg)
Pacote java.sql
Prof. Marcos André Pisching, M.Sc. 7
![Page 8: Java Acesso a Banco de Dados](https://reader033.fdocumentos.tips/reader033/viewer/2022051114/568135fc550346895d9d6ffc/html5/thumbnails/8.jpg)
Tipos de Drivers JDBC Tipo 1: ponte ODBC-JDBC
Usam uma ponte para ter acesso a um banco de dados. Este tipo de solução requer a instalação de software do lado do cliente.
Tipo 2: solução com código nativo Usam uma API nativa. Esses drivers contém métodos Java
implementados em C ou C++. Requer software no cliente. Tipo 3: solução 100% Java no cliente
Oferecem uma API de rede via middleware que traduz requisições para API do driver desejado. Não requer software no cliente.
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.
Prof. Marcos André Pisching, M.Sc. 8
![Page 9: Java Acesso a Banco de Dados](https://reader033.fdocumentos.tips/reader033/viewer/2022051114/568135fc550346895d9d6ffc/html5/thumbnails/9.jpg)
JDBC
Prof. Marcos André Pisching, M.Sc. 9
JDBC-ODBC Bridge
Solução com código nativo
![Page 10: Java Acesso a Banco de Dados](https://reader033.fdocumentos.tips/reader033/viewer/2022051114/568135fc550346895d9d6ffc/html5/thumbnails/10.jpg)
JDBC
Prof. Marcos André Pisching, M.Sc. 10
Solução 100%Java
Solução 100% Javano clienteDatabase Middleware
![Page 11: Java Acesso a Banco de Dados](https://reader033.fdocumentos.tips/reader033/viewer/2022051114/568135fc550346895d9d6ffc/html5/thumbnails/11.jpg)
Arquitetura JDBC
Prof. Marcos André Pisching, M.Sc. 11
![Page 12: Java Acesso a Banco de Dados](https://reader033.fdocumentos.tips/reader033/viewer/2022051114/568135fc550346895d9d6ffc/html5/thumbnails/12.jpg)
URL JDBC Uma aplicação JDBC pode carregar ao mesmo tempo diversos
drivers. Para determinar qual driver será usado usa-se uma URL:
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:exemplo
jdbc:mysql://alnitak.orion.org/clientes
jdbc:cloudscape:rmi://host:1098/MyDB;create=true
Prof. Marcos André Pisching, M.Sc. 12
![Page 13: Java Acesso a Banco de Dados](https://reader033.fdocumentos.tips/reader033/viewer/2022051114/568135fc550346895d9d6ffc/html5/thumbnails/13.jpg)
DriverManager e Driver A interface Driver é utilizada apenas pelas implementações de
drivers JDBC É preciso carregar a classe do driver na aplicação que irá utilizálo.
Isto pode ser feito com Class.forName():
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
A classe DriverManager manipula objetos do tipo Driver. Possui métodos para registrar drivers, removê-los ou listá-los. É usado para retornar Connection, que representa uma conexão a
um banco de dados, a partir de uma URL JDBC recebida como parâmetro
Connection con =
DriverManager.getConnection
("jdbc:odbc:dados","nome","senha");
Prof. Marcos André Pisching, M.Sc. 13
![Page 14: Java Acesso a Banco de Dados](https://reader033.fdocumentos.tips/reader033/viewer/2022051114/568135fc550346895d9d6ffc/html5/thumbnails/14.jpg)
Connection, ResultSet e Statement Interfaces que contém métodos
implementados em todos os drivers JDBC. Connection
Representa uma conexão ao banco de dados, que é retornada pelo DriverManager na forma de um objeto.
Statement Oferece meios de passar instruções SQL para o sistema
de bancos de dados.
ResultSet É um cursor para os dados recebidos.
Prof. Marcos André Pisching, M.Sc. 14
![Page 15: Java Acesso a Banco de Dados](https://reader033.fdocumentos.tips/reader033/viewer/2022051114/568135fc550346895d9d6ffc/html5/thumbnails/15.jpg)
Statement Obtendo-se um objeto Connection, chama-se sobre
ele o método createStatement() para obter um objeto do tipo Statement:
Statement stmt = con.createStatement()
que poderá usar métodos como execute(), executeQuery(), executeBatch() e executeUpdate() para enviar instruções SQL ao BD.
Subinterfaces: PreparedStatement e CallableStatementPreparedStatement pstmt = con.prepareStatement(...);
CallableStatement cstmt = con.prepareCall(...);
Prof. Marcos André Pisching, M.Sc. 15
![Page 16: Java Acesso a Banco de Dados](https://reader033.fdocumentos.tips/reader033/viewer/2022051114/568135fc550346895d9d6ffc/html5/thumbnails/16.jpg)
Enviando instruções Exemplo de uso de Statement
stmt.execute("CREATE TABLE filme "
+ "(codigo INT PRIMARY KEY, "
+ "genero CHAR(20), "
+ “titulo CHAR(20));");
int linhasModificadas =
stmt.executeUpdate("INSERT INTO filme "
+ "(codigo, genero, titulo) VALUES "
+ "(499,‘Aventura',‘Frio de Lages')");
ResultSet cursor =
stmt.executeQuery("SELECT genero, titulo " +
" FROM filme " +
" WHERE codigo = 499");
Prof. Marcos André Pisching, M.Sc. 16
![Page 17: Java Acesso a Banco de Dados](https://reader033.fdocumentos.tips/reader033/viewer/2022051114/568135fc550346895d9d6ffc/html5/thumbnails/17.jpg)
ResultSet O método executeQuery(), da interface Statement,
retorna um objeto ResultSet. Cursor para as linhas de uma tabela. Pode-se navegar pelas linhas da tabela para recuperar as
informações armazenadas nas colunas
Os métodos de navegação são next(), previous(), absolute(), first() e last()
Métodos para obtenção de dados: getInt() getString() getDate() getApropriateDataType(), ...
Prof. Marcos André Pisching, M.Sc. 17
![Page 18: Java Acesso a Banco de Dados](https://reader033.fdocumentos.tips/reader033/viewer/2022051114/568135fc550346895d9d6ffc/html5/thumbnails/18.jpg)
Tipos JDBC e métodos getADT( )
Prof. Marcos André Pisching, M.Sc. 18
![Page 19: Java Acesso a Banco de Dados](https://reader033.fdocumentos.tips/reader033/viewer/2022051114/568135fc550346895d9d6ffc/html5/thumbnails/19.jpg)
Exemplo de ResultSet
Prof. Marcos André Pisching, M.Sc. 19
![Page 20: Java Acesso a Banco de Dados](https://reader033.fdocumentos.tips/reader033/viewer/2022051114/568135fc550346895d9d6ffc/html5/thumbnails/20.jpg)
Transações Permite a execução atômica de comandos enviados ao banco.
Implementada através dos métodos de Connection commit() rollback() setAutoCommit(boolean autoCommit): default é true.
Por default, as informações são processadas a medida em que são recebidas. Para mudar:
con.setAutoCommit(false); Agora várias instruções podem ser acumuladas. Para
processar:
con.commit(); Se houver algum erro e todo o processo necessitar ser desfeito,
pode-se emitir um ROLLBACK usando:
con.rollback();
Prof. Marcos André Pisching, M.Sc. 20
![Page 21: Java Acesso a Banco de Dados](https://reader033.fdocumentos.tips/reader033/viewer/2022051114/568135fc550346895d9d6ffc/html5/thumbnails/21.jpg)
PreparedStatement Statement pré-compilado que é mais eficiente quando várias
queries similares são enviadas com parâmetros diferentes String com instrução SQL é preparado previamente, deixando-
se "?" no lugar dos parâmetros Parâmetros são inseridos em ordem, com setXXX() onde XXX é
um tipo igual aos retornados pelos métodos de ResultSet
Prof. Marcos André Pisching, M.Sc. 21
![Page 22: Java Acesso a Banco de Dados](https://reader033.fdocumentos.tips/reader033/viewer/2022051114/568135fc550346895d9d6ffc/html5/thumbnails/22.jpg)
StoredProcedures Procedimentos desenvolvidos em linguagem proprietária do
SGBD (stored procedures) podem ser chamados através de objetos CallableStatement
Parâmetros são passados da mesma forma que em instruções PreparedStatement
Sintaxe con.prepareCall("{ call proc_update(?, ?, ...) }"); con.prepareCall("{ ? = call proc_select(?, ?, ...) }");
Prof. Marcos André Pisching, M.Sc. 22
![Page 23: Java Acesso a Banco de Dados](https://reader033.fdocumentos.tips/reader033/viewer/2022051114/568135fc550346895d9d6ffc/html5/thumbnails/23.jpg)
Fechar Conexão e Exceções Após o uso, os objetos Connection,
Statement e ResultSet devem ser fechados. Isto pode ser feito com o método close(): con.close(); stmt.close(); rs.close();
A exceção SQLException é a principal exceção a ser observada em aplicações JDBC
Prof. Marcos André Pisching, M.Sc. 23
![Page 24: Java Acesso a Banco de Dados](https://reader033.fdocumentos.tips/reader033/viewer/2022051114/568135fc550346895d9d6ffc/html5/thumbnails/24.jpg)
Implementação
![Page 25: Java Acesso a Banco de Dados](https://reader033.fdocumentos.tips/reader033/viewer/2022051114/568135fc550346895d9d6ffc/html5/thumbnails/25.jpg)
Banco de Dados Conectando-se ao banco de dados
Importar o pacote java.sql Criar objeto da classe Connection. Carregar o driver do banco de dados. DriverManager dará a conexão. Inicializar os strings: driver, url, username e
password.String driver = . . .;
String url = . . .;
String username = . . .;
String password = . . .;
Class.forName(driver); //carrega o driver
Connection conn =
DriverManager.getConnection(
url, username, password);
conn.close( );
Prof. Marcos André Pisching, M.Sc. 25
![Page 26: Java Acesso a Banco de Dados](https://reader033.fdocumentos.tips/reader033/viewer/2022051114/568135fc550346895d9d6ffc/html5/thumbnails/26.jpg)
BD – passos de uma implementação e conexão1) Escolher um banco de dados (MySQL,
SqlServer, Interbase, Firebird, Oracle, PostgreSQL, Access . . .)
2) Criar as tabelas do banco de dados relacional.
3) Instalar um driver do banco de dados para JDBC ou, um driver para ODBC-JDBC
4) Importar o pacote de classes e interfaces para o acesso ao banco de dados:
import java.sql.*;
Prof. Marcos André Pisching, M.Sc. 26
![Page 27: Java Acesso a Banco de Dados](https://reader033.fdocumentos.tips/reader033/viewer/2022051114/568135fc550346895d9d6ffc/html5/thumbnails/27.jpg)
BD – passos de uma implementação e conexão5) Estabelecer uma conexão
//captura de exceções SQLException em Java é obrigatória para usar JDBC
try {
// Registrando o driver JDBC para Firebird
Class.forName(“org.firebirdsql.jdbc.FBDriver”).getInstance( );
// Estabelecimento da conexão
Connection con = DriverManager.getConnection(
“jdbc:firebirdsql://[host]:[port]/meuBD”,”conta”,”senha”);
}
catch (SQLException e) {
e.printStackTrace();
}
Prof. Marcos André Pisching, M.Sc. 27
![Page 28: Java Acesso a Banco de Dados](https://reader033.fdocumentos.tips/reader033/viewer/2022051114/568135fc550346895d9d6ffc/html5/thumbnails/28.jpg)
BD – passos de uma implementação e conexão6) Executar comandos SQL
Statement stm = con.createStatement( );String SQL = “Select titulo, autor, total_faixas from MeusCDs”;
7) Interface ResultSet permite colher os resultados da execução de uma Query:ResultSet rs = stm.executeQuery(SQL); //Executa a query
while (rs.next( )) { // next informa se há resultado e posiciona na proxima linha
String tit = rs.getString(“titulo”); // getString – recupera uma string (campo titulo)
String aut = rs.getString(“autor”); int totalFaixas = rs.getInt(“total_faixas”);// rs.getString(“titulo”); // titulo é o campo da tabela de autores do banco de
dados //de livros
System.out.println(“Titulo: “ + tit + “ Autor: “ + aut + “ Tot. Faixas: “ + totalFaixas);
}
Prof. Marcos André Pisching, M.Sc. 28
![Page 29: Java Acesso a Banco de Dados](https://reader033.fdocumentos.tips/reader033/viewer/2022051114/568135fc550346895d9d6ffc/html5/thumbnails/29.jpg)
BD – passos de uma implementação e conexão8) Encerrando o statement:
// libera os recursos associados à execução desta consulta, mas deixa a// conexão aberta para a execução de uma próxima instrução
stm.close( );
9) Encerrando a conexão - connection:// implementar o finally do tratamento de exceção para abertura da conexãofinally {
try {con.close( );
}catch(SQLException se) {
System.out.println(“houve erro ao fechar a conexao”);se.printStackTrace( );
}}
Prof. Marcos André Pisching, M.Sc. 29
![Page 30: Java Acesso a Banco de Dados](https://reader033.fdocumentos.tips/reader033/viewer/2022051114/568135fc550346895d9d6ffc/html5/thumbnails/30.jpg)
BD – passos de uma implementação e conexão Modo geral de acesso aos drivers de banco
de dados:Connection conn = new Connection( );
// O Sun JDBC-ODBC bridge
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”).getInstance( );
// IBM DB2
Class.forName(“COM.ibm.db2.jdbc.net.DB2Driver”).newInstance( ) ;
// Oracle 8i
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver( ));
Prof. Marcos André Pisching, M.Sc. 30
![Page 31: Java Acesso a Banco de Dados](https://reader033.fdocumentos.tips/reader033/viewer/2022051114/568135fc550346895d9d6ffc/html5/thumbnails/31.jpg)
Demonstrações
![Page 32: Java Acesso a Banco de Dados](https://reader033.fdocumentos.tips/reader033/viewer/2022051114/568135fc550346895d9d6ffc/html5/thumbnails/32.jpg)
Demonstrações
Netbeans Configurando drivers Estabelecendo uma conexão Criando banco de dados Acessando banco de dados Implementando uma classe de
Conexão
Prof. Marcos André Pisching, M.Sc. 32
![Page 33: Java Acesso a Banco de Dados](https://reader033.fdocumentos.tips/reader033/viewer/2022051114/568135fc550346895d9d6ffc/html5/thumbnails/33.jpg)
Demonstrações
Netbeans - Projetos AcessoBD ControleAlunos ControleFuncionariosCompletoSimplificado
Prof. Marcos André Pisching, M.Sc. 33