java 18

Upload: drescher

Post on 30-May-2018

215 views

Category:

Documents


0 download

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