java acesso a banco de dados prof. marcos andré pisching, m.sc
TRANSCRIPT
![Page 1: Java Acesso a Banco de Dados Prof. Marcos André Pisching, M.Sc](https://reader036.vdocuments.us/reader036/viewer/2022081520/5706385f1a28abb8238fec1c/html5/thumbnails/1.jpg)
Java Acesso aBanco de Dados
Prof. Marcos André Pisching, M.Sc.
![Page 2: Java Acesso a Banco de Dados Prof. Marcos André Pisching, M.Sc](https://reader036.vdocuments.us/reader036/viewer/2022081520/5706385f1a28abb8238fec1c/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 Prof. Marcos André Pisching, M.Sc](https://reader036.vdocuments.us/reader036/viewer/2022081520/5706385f1a28abb8238fec1c/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 Prof. Marcos André Pisching, M.Sc](https://reader036.vdocuments.us/reader036/viewer/2022081520/5706385f1a28abb8238fec1c/html5/thumbnails/4.jpg)
JDBC
![Page 5: Java Acesso a Banco de Dados Prof. Marcos André Pisching, M.Sc](https://reader036.vdocuments.us/reader036/viewer/2022081520/5706385f1a28abb8238fec1c/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 Prof. Marcos André Pisching, M.Sc](https://reader036.vdocuments.us/reader036/viewer/2022081520/5706385f1a28abb8238fec1c/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 Prof. Marcos André Pisching, M.Sc](https://reader036.vdocuments.us/reader036/viewer/2022081520/5706385f1a28abb8238fec1c/html5/thumbnails/7.jpg)
Pacote java.sql
Prof. Marcos André Pisching, M.Sc. 7
![Page 8: Java Acesso a Banco de Dados Prof. Marcos André Pisching, M.Sc](https://reader036.vdocuments.us/reader036/viewer/2022081520/5706385f1a28abb8238fec1c/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 Prof. Marcos André Pisching, M.Sc](https://reader036.vdocuments.us/reader036/viewer/2022081520/5706385f1a28abb8238fec1c/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 Prof. Marcos André Pisching, M.Sc](https://reader036.vdocuments.us/reader036/viewer/2022081520/5706385f1a28abb8238fec1c/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 Prof. Marcos André Pisching, M.Sc](https://reader036.vdocuments.us/reader036/viewer/2022081520/5706385f1a28abb8238fec1c/html5/thumbnails/11.jpg)
Arquitetura JDBC
Prof. Marcos André Pisching, M.Sc. 11
![Page 12: Java Acesso a Banco de Dados Prof. Marcos André Pisching, M.Sc](https://reader036.vdocuments.us/reader036/viewer/2022081520/5706385f1a28abb8238fec1c/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:anunciosjdbc:oracle:thin:@200.206.192.216:1521:exemplojdbc:mysql://alnitak.orion.org/clientesjdbc:cloudscape:rmi://host:1098/
MyDB;create=true
Prof. Marcos André Pisching, M.Sc. 12
![Page 13: Java Acesso a Banco de Dados Prof. Marcos André Pisching, M.Sc](https://reader036.vdocuments.us/reader036/viewer/2022081520/5706385f1a28abb8238fec1c/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 Prof. Marcos André Pisching, M.Sc](https://reader036.vdocuments.us/reader036/viewer/2022081520/5706385f1a28abb8238fec1c/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 Prof. Marcos André Pisching, M.Sc](https://reader036.vdocuments.us/reader036/viewer/2022081520/5706385f1a28abb8238fec1c/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 Prof. Marcos André Pisching, M.Sc](https://reader036.vdocuments.us/reader036/viewer/2022081520/5706385f1a28abb8238fec1c/html5/thumbnails/16.jpg)
Enviando instruções Exemplo de uso de Statementstmt.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 Prof. Marcos André Pisching, M.Sc](https://reader036.vdocuments.us/reader036/viewer/2022081520/5706385f1a28abb8238fec1c/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 Prof. Marcos André Pisching, M.Sc](https://reader036.vdocuments.us/reader036/viewer/2022081520/5706385f1a28abb8238fec1c/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 Prof. Marcos André Pisching, M.Sc](https://reader036.vdocuments.us/reader036/viewer/2022081520/5706385f1a28abb8238fec1c/html5/thumbnails/19.jpg)
Exemplo de ResultSet
Prof. Marcos André Pisching, M.Sc. 19
![Page 20: Java Acesso a Banco de Dados Prof. Marcos André Pisching, M.Sc](https://reader036.vdocuments.us/reader036/viewer/2022081520/5706385f1a28abb8238fec1c/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 Prof. Marcos André Pisching, M.Sc](https://reader036.vdocuments.us/reader036/viewer/2022081520/5706385f1a28abb8238fec1c/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 Prof. Marcos André Pisching, M.Sc](https://reader036.vdocuments.us/reader036/viewer/2022081520/5706385f1a28abb8238fec1c/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 Prof. Marcos André Pisching, M.Sc](https://reader036.vdocuments.us/reader036/viewer/2022081520/5706385f1a28abb8238fec1c/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 Prof. Marcos André Pisching, M.Sc](https://reader036.vdocuments.us/reader036/viewer/2022081520/5706385f1a28abb8238fec1c/html5/thumbnails/24.jpg)
Implementação
![Page 25: Java Acesso a Banco de Dados Prof. Marcos André Pisching, M.Sc](https://reader036.vdocuments.us/reader036/viewer/2022081520/5706385f1a28abb8238fec1c/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 driverConnection conn = DriverManager.getConnection(
url, username, password);conn.close( );
Prof. Marcos André Pisching, M.Sc. 25
![Page 26: Java Acesso a Banco de Dados Prof. Marcos André Pisching, M.Sc](https://reader036.vdocuments.us/reader036/viewer/2022081520/5706385f1a28abb8238fec1c/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 Prof. Marcos André Pisching, M.Sc](https://reader036.vdocuments.us/reader036/viewer/2022081520/5706385f1a28abb8238fec1c/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 FirebirdClass.forName(“org.firebirdsql.jdbc.FBDriver”).getInstance( );// Estabelecimento da conexãoConnection 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 Prof. Marcos André Pisching, M.Sc](https://reader036.vdocuments.us/reader036/viewer/2022081520/5706385f1a28abb8238fec1c/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 linhaString 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 livrosSystem.out.println(“Titulo: “ + tit + “ Autor: “ + aut + “ Tot. Faixas: “ + totalFaixas);}
Prof. Marcos André Pisching, M.Sc. 28
![Page 29: Java Acesso a Banco de Dados Prof. Marcos André Pisching, M.Sc](https://reader036.vdocuments.us/reader036/viewer/2022081520/5706385f1a28abb8238fec1c/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çãostm.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 Prof. Marcos André Pisching, M.Sc](https://reader036.vdocuments.us/reader036/viewer/2022081520/5706385f1a28abb8238fec1c/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 bridgeClass.forName(“sun.jdbc.odbc.JdbcOdbcDriver”).getInstance( );
// IBM DB2Class.forName(“COM.ibm.db2.jdbc.net.DB2Driver”).newInstance( ) ;
// Oracle 8iDriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver( ));
Prof. Marcos André Pisching, M.Sc. 30
![Page 31: Java Acesso a Banco de Dados Prof. Marcos André Pisching, M.Sc](https://reader036.vdocuments.us/reader036/viewer/2022081520/5706385f1a28abb8238fec1c/html5/thumbnails/31.jpg)
Demonstrações
![Page 32: Java Acesso a Banco de Dados Prof. Marcos André Pisching, M.Sc](https://reader036.vdocuments.us/reader036/viewer/2022081520/5706385f1a28abb8238fec1c/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 Prof. Marcos André Pisching, M.Sc](https://reader036.vdocuments.us/reader036/viewer/2022081520/5706385f1a28abb8238fec1c/html5/thumbnails/33.jpg)
Demonstrações Netbeans - Projetos
AcessoBD ControleAlunos ControleFuncionariosCompletoSimplificado
Prof. Marcos André Pisching, M.Sc. 33