java 18
TRANSCRIPT
-
8/14/2019 Java 18
1/24
1
Fundamentos deFundamentos de
Java 2 Standard Edition
Helder da Rochawww.argonavis.com.br
-
8/14/2019 Java 18
2/24
2
JDBC
JDBC uma interface baseada em Java para acessoa bancos de dados atravs de SQL. Pacote Java padro: java.sql Baseada em ODBC
Usando JDBC, pode-se obter acesso direto a bancos
de dados atravs de applets e outras aplicaes Java Este mdulo apresenta uma introduo superficial
do JDBC mas suficiente para integrar aplicaes Javacom bancos de dados relacionais que possuamdrivers JDBC No so abordados Connection Pools nem DataSources
-
8/14/2019 Java 18
3/24
3
JDBC
JDBC uma interface de nvel de cdigo Cdigo SQL usado explicitamente dentro do cdigo Java
O pacote java.sql consiste de um conjunto de classes einterfaces que permitem embutir cdigo SQL emmtodos.
Com JDBC possvel construir uma aplicao Javapara acesso a qualquer banco de dados SQL. O banco deve ter pelo menos um driver ODBC, se no
tiver driver JDBC Para usar JDBC preciso ter um driver JDBC
O J2SE distribui um driver ODBC que permite o acesso a
bancos que no suportam JDBC mas suportam ODBC
-
8/14/2019 Java 18
4/244
Pacote java.sql
ArrayLocator
BlobLocator
ClobLocator
Ref
StructLocator
SQLData
Struct
SQLInput
SQLOutput
SQLType DriverManager
DriverPropertyInfo
Types
java.lang.ObjectConnection
ResultSetStatement
ResultSetMetaData
DatabaseMetaData
PreparedStatement
CallableStatement
Driver
java.util.Date
Date
Time
TimeStamp
Inferfaces
Classes
-
8/14/2019 Java 18
5/245
Tipos de Drivers JDBC
Tipo 1: ponte ODBC-JDBC Usam uma ponte para ter acesso a um banco de dados. Este tipo
de soluo requer a instalao de software do lado do cliente. Tipo 2: soluo com cdigo nativo
Usam uma API nativa. Esses drivers contm mtodos Javaimplementados em C ou C++. Requer software no cliente.
Tipo 3: soluo 100% Java no cliente Oferecem uma API de rede via middleware que traduz requisies
para API do driver desejado. No requer software no cliente.
Tipo 4: soluo 100% Java Drivers que se comunicam diretamente com o banco de dados
usando soquetes de rede. uma soluo puro Java. No requer
cdigo adicional do lado do cliente.
-
8/14/2019 Java 18
6/246
Driver tipo 1
Ponte JDBC-ODBC
Driver tipo 2
API nativa
Driver ODBC
Driver tipo 3
JDBC-Rede
Driver tipo 4
Pure Java
Protocolo
proprietrio
SGBD
Protocolo
proprietrio
SGBD
Protocolo
proprietrio
SGBDProtocolo
proprietrio
SGBD
Protocolo de
rede aberto
Cdigo nativo Cdigo nativo
Middleware
Protocolo JDBCJDBC Driver Manager
Aplicao JDBC
API JDBC (pacote java.sql)
BD BD BD BD
Arquitetura JDBC
-
8/14/2019 Java 18
7/247
URL JDBC
Uma aplicao JDBC pode carregar ao mesmo tempodiversos drivers.
Para determinar qual driver ser usado usa-se uma URL:jdbc::
A aplicao usa o subprotocolopara 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. Veja alguns exemplos:jdbc:odbc:anunciosjdbc:oracle:thin:@200.206.192.216:1521:exemplo
jdbc:mysql://alnitak.orion.org/clientes
jdbc:cloudscape:rmi://host:1098/MyDB;create=true
-
8/14/2019 Java 18
8/24
-
8/14/2019 Java 18
9/249
Connection, ResultSet e Statement
Interfaces que contm mtodos implementados emtodos os drivers JDBC.
Connection Representa uma conexo ao banco de dados, que
retornada pelo DriverManager na forma de um objeto.
Statement Oferece meios de passar instrues SQL para o sistema
de bancos de dados.
ResultSet um cursor para os dados recebidos.
-
8/14/2019 Java 18
10/2410
Statement
Obtendo-se um objeto Connection, chama-se sobreele o mtodo createStatement() para obter um
objeto do tipo Statement:Statement stmt = con.createStatement()
que poder usar mtodos como execute(),
executeQuery(), executeBatch() e executeUpdate()para enviar instrues SQL ao BD.
Subinterfaces: PreparedStatement e CallableStatementPreparedStatementpstmt =
con.prepareStatement(...);CallableStatement cstmt = con.prepareCall(...);
-
8/14/2019 Java 18
11/24
11
Enviando instrues
Exemplo de uso de Statement
stmt.execute("CREATE TABLE dinossauros "
+ "(codigo INT PRIMARY KEY, "+ "genero CHAR(20), "+ "especie CHAR(20));");
int linhasModificadas =stmt.executeUpdate("INSERT INTO dinossauros "
+ "(codigo, genero, especie) VALUES "+ "(499,'Fernandosaurus','brasiliensis')");
ResultSet cursor =stmt.executeQuery("SELECT genero, especie " +
" FROM dinossauros " +" WHERE codigo = 355");
-
8/14/2019 Java 18
12/24
12
ResultSet
O mtodo executeQuery(), da interface Statement,retorna um objeto ResultSet.
Cursor para as linhas de uma tabela. Pode-se navegar pelas linhas da tabela recuperar as
informaes armazenadas nas colunas
Os mtodos de navegao so next(),previous(), absolute(), first() e last()
Mtodos para obteno de dados:
getInt() getString() getDate() getXXX(), ...
-
8/14/2019 Java 18
13/24
13
Tipos JDBC e mtodos getXXX()
Mtodo de ResultSet Tipo de dados SQL92
getInt() INTEGER
getLong() BIG INT
getFloat() REAL
getDouble() FLOAT
getBignum() DECIMAL
getBoolean() BIT
getString() CHAR, VARCHAR
getDate() DATE
getTime() TIME
getTimestamp() TIME STAMP
getObject() Qualquer tipo (Blob)
-
8/14/2019 Java 18
14/24
14
ResultSet
Exemplo de uso de ResultSet
ResultSet rs =
stmt.executeQuery("SELECT Numero, Texto, "+ " Data FROM Anuncios");
while (rs.next()) {int x = rs.getInt("Numero");
String s = rs.getString("Texto");
java.sql.Date d = rs.getDate("Data");// faa algo com os valores obtidos...
}
-
8/14/2019 Java 18
15/24
-
8/14/2019 Java 18
16/24
16
PreparedStatement
Statementpr-compilado que mais eficiente quando vriasqueries similares so enviadas com parmetros diferentes
String com instruo SQL preparado previamente, deixando-se "?" no lugar dos parmetros Parmetros so inseridos em ordem, com setXXX() onde XXX
um tipo igual aos retornados pelos mtodos de ResultSet
String sql = "INSERT INTO Livros VALUES(?, ?, ?)";PreparedStatement cstmt = con.prepareStatement(sql);cstmt.setInt(1, 18943);
cstmt.setString(2, "Lima Barreto");cstmt.setString(3, "O Homem que Sabia Javans");cstmt.executeUpdate();...
-
8/14/2019 Java 18
17/24
17
Stored Procedures
Procedimentos desenvolvidos em linguagem proprietria doSGBD (stored procedures) podem ser chamados atravs deobjetos CallableStatement
Parmetros so passados da mesma forma que em instruesPreparedStatement
Sintaxe con.prepareCall("{ call proc_update(?, ?, ...) }"); con.prepareCall("{ ? = call proc_select(?, ?, ...) }");
CallableStatement cstmt =
con.prepareCall("{? = call sp_porAssunto(?)}";cstmt.setString(2, "520.92");ResultSet rs = cstmt.executeQuery();...
-
8/14/2019 Java 18
18/24
18
Fechar conexo e Excees
Aps o uso, os objetos Connection, Statement eResultSet devem serfechados. Isto pode ser feito
com o mtodo close(): con.close();
stmt.close();
rs.close();
A exceo SQLException a principal exceo a serobservada em aplicaes JDBC
-
8/14/2019 Java 18
19/24
19
Metadados
Classe DatabaseMetaData: permite obter informaesrelacionadas ao banco de dados
Connection con; (...)DatabaseMetaData dbdata = con.getMetaData();String nomeDoSoftwareDoBanco =
dbdata.getDatabaseProductName();
Classe ResultSetMetaData: permite obter informaes sobreo ResultSet, como quantas colunas e quantas linhas existemna tabela de resultados, qual o nome das colunas, etc.
ResultSet rs; (...)ResultSetMetaData meta = rs.getMetaData();int colunas =meta.getColumnCount();String[] nomesColunas = new String[colunas];
for (int i = 0; i < colunas; i++) {nomesColunas[i] =meta.getColumnName(i);}
-
8/14/2019 Java 18
20/24
20
Resources (javax.sql)
O pacotejavax.sql, usado em aplicaes J2EE, contm outrasclasses e pacotes que permitem o uso de conexes JDBC de
forma mais eficiente e portvel javax.sql.DataSource: obtm uma conexo a partir de um
sistema de nomes JNDI (previamente registrada)Context ctx = new InitialContext();DataSource ds =
(DataSource)ctx.lookup("jdbc/EmployeeDB");Connection con = ds.getConnection();
DataSource uma alternativa mais eficiente que DriverManager:possui pool de conexes embutido javax.sql.RowSet e suas implementaes
Extenso de ResultSet Permite manipulao customizada de ResultSet
-
8/14/2019 Java 18
21/24
21
Padres de Projeto implementados em JDBC
Drivers JDBC implementam vrios padres de projeto.Os principais so
Bridge: define uma soluo para que uma implementao(o driver que permite a persistncia dos objetos) sejaindependente de sua abstrao (a hierarquia de objetos)
Abstract Factory: permite que hierarquias de classessejam plugadas e objetos diferentes, de mesma interface,sejam produzidos (uma createStatement() cria um objetoStatement com a implementao do driver instalado.)
Factory Method: a implementao dos mtodosgetConnection(), createStatement(), etc. que devolvem umobjeto sem que a sua implementao seja conhecida.
Iterator: o ResultSet e seu mtodo next()
-
8/14/2019 Java 18
22/24
22
Exerccios
1. Construa uma aplicao Java simples que permita que ousurio envie comandos SQL para um banco de dados etenha os resultados listados na tela. Veja detalhes em README.txt no diretrio cap18/
2. Crie uma aplicao com o mesmo objetivo que a aplicaodo exerccio 1, mas, desta vez, faa com que os dados sejam
exibidos dentro de vrios JTextField (um para cada campo)organizados lado a lado como uma planilha. Use JScrollPane() para que os dados caibam na tela
Use um JPanel que posicione os JTextField (de tamanho fixo) lado alado e outro, que possa crescer dinamicamente, para os registros(colees de JTextField)
3. Descubra como usar o JTable (so vrias classes) e refaa
o exerccio 2.
-
8/14/2019 Java 18
23/24
23
Exerccios 2
4. Crie uma classe RepositorioDadosBD queimplemente RepositorioDados da aplicao
biblioteca a) Crie tabelas autor, editor, livro, revista e artigo b) Crie tabelas de relacionamentos: publicacao_autor,
palavras_chave, artigo_revista b) Implemente os mtodos usando SQL e JDBC c) Teste a aplicao
-
8/14/2019 Java 18
24/24
24
Curso J100: Java 2 Standard EditionReviso 17.0
1996-2003, Helder da Rocha([email protected])
argonavis.com.br