Académique Documents
Professionnel Documents
Culture Documents
Roteiro
Introduo
Drivers JDBC Conexo com o BD Envio de comandos e recebimento de resultados Informaes sobre o tipo da tabela Transaes
1. Introduo
JDBC uma API (Application Program Interface) para acesso a SGBD (Sistemas Gerenciadores de Banco de Dados) relacionais por meio de comandos SQL (Structured Query Language)
SGBD
Vantagens
a API para programao do sistema a mesma para qualquer SGBD, no h necessidade de se desenvolver aplicaes voltadas (e amarradas) para um BD especfico permite a construo de pginas WWW que acessam BD pois dispensa a configurao da mquina cliente mantm a independncia de plataforma da linguagem Java A aplicao roda em qualquer sistema operacional acessando qualquer BD !?
Viso geral
A API encapsula
Exemplo
Connection con = DriverManager.getConnection ( "jdbc:odbc:sample", "login", "password"); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery( "SELECT a, b, c FROM Table1"); while (rs.next()) { int x = getInt("a"); String s = getString("b"); float f = getFloat("c"); }
ODBC tem o mesmo propsito e existe para vrias plataformas, por que no usar ODBC?
Os drivers ODBC so escritos em C, o que limita a portabilidade e auto-instalao dos programas Java o ODBC tem que ser instalado e configurado na mquina do cliente
Entretanto, bancos de dados que utilizam ODBC podem ser utilizados em aplicaes Java via a ponte JDBC-ODBC.
Desvantagens aplicao Java api JDBC driver driver ponte oracle sybase ODBC
SQLNet TDS ODBC
servidor
o driver JDBC deve ser carregado no cliente se a aplicao for um applet, o SGBD deve estar na mesma mquina que o servidor Web
cliente
Oracle
SyBase
Access
servidor middleware
Dispensa o cliente de conhecer o protocolo do SGBD e, consequentemente, carregar seu driver Melhora o tempo de resposta em aplicaes na Internet
cliente
Oracle
SyBase
outros
a API JDBC chama procedimentos do driver nativo do SGBD instalado na mquina local a comunicao entre o cliente e a SGBD da-se no protocolo do SGBD, contudo, como o driver escrito em Java, dispensa a instalao/configurao do driver no cliente.
utilizado pelo cliente para conectar-se com o middleware os dois primeiros tipos so recomendados para Intranets, pois exigem configurao da mquina cliente os outros dois podem ser utilizados na Internet, preferencialmente o ltimo, que tem menor tempo de download.
Vrios drivers podem ser carregados com o mtodo Class.forName. Por exemplo:
para aplicaes, a varivel de ambiente CLASSPATH deve incluir os drivers para applets, o parmetro archive deve apontar para o driver.
3. Conexo com o BD
A abertura da conexo feita pelo mtodo getConnection, que recebe uma URL (Universal Resource Location) como argumento O DriverManager tenta conectar com o primeiro driver carregado, se no consegue, tenta o driver seguinte JDBC URLs so formadas por: um protocolo (normalmente jdbc), um sub-protocolo (normalmente o tipo de driver) e informaes para o SGBD. ponte ODBC
Connection conn = DriverManager.getConnection ("jdbc:odbc:Sample", "admin", "temp"); // o servio Sample tem que estar configurado no // ODBC manager da mquina
O envio de um comando SQL feito por meio de um Statement Um statement pode ser criado a partir de trs classes:
Statement utilizado para enviar comandos SQL simples PreparedStatement o comando SQL pr-compilado e utilizado posteriormente, sendo mais eficiente nos casos onde o mesmo comando utilizado vrias vezes CallableStatement utilizado para chamar procedimentos SQL armazenados no BD
A classe Statement
Um objeto desta classe criado pelo envio da mensagem createStatement conexo com o BD
Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver"); Connection conn = DriverManager.getConnection ("jdbc:odbc:Sample", "admin", "temp"); Statement stmt = conn.createStatement ();
mtodo executeQuery: usado para comandos SQL que retornam uma tabela
ResultSet rs = stmt.executeQuery("select * from EMP");
mtodo executeUpdate: usado para executar comandos SQL que alteram a tabela, retorna o nmero de colunas alteradas
5. Obteno do resultado
A classe ResultSet oferece aplicao a tabela resultante de um Select e mantm um cursor posicionado em uma linha da tabela. Inicialmente este cursor est antes da primeira linha e a mensagem next() movimenta o cursos para frente. Permite aplicao pegar os dados das colunas da linha corrente atravs de mensagem getXXX(<cloluna>). XXX o tipo da coluna <coluna> o nome da coluna ou sua posio (a partir de 1)
ResultSet rs = stmt.executeQuery( "select a, b, c from table1"); while (rs.next()) { int x = rs.getInt("a"); String s = rs.getString(2); float f = rs.getFloat("c");
Exemplo
import java.sql.*; class ExAcessoMySQLApp { public static void main (String args []) throws Exception { Class.forName ("com.mysql.jdbc.Driver").newInstance(); Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/test"); Statement stmt = conn.createStatement(); ResultSet rset = stmt.executeQuery ( "select ENAME from EMP"); while (rset.next ()) System.out.println (rset.getString(1)); } }
Permite obter informaes sobre o tipo de tabela que resultou o select. Quais os nomes e os tipos das colunas Se a coluna do tipo numrico com sinal Se a coluna pode ser alterada ....
ResultSet result = stmt.executeQuery( "SELECT * FROM TabEx ORDER BY id DESC"); ResultSetMetaData meta = result.getMetaData(); int columns = meta.getColumnCount(); for (int i=1;i<=columns;i++) { System.out.println (meta.getColumnLabel(i) + "\t" + meta.getColumnTypeName(i)); }
Statement st = con.createStatement(); st.executeUpdate( "create table Alunos ( nome varchar (32), idade integer);"); st.executeUpdate("insert into Alunos values ('Jonas',18);"); st.executeUpdate(update Alunos set idade = 18 where idade = 20"); con.close();
Transaes
Uma transao um conjunto de Statements que so validados no BD com commit ou cancelados com rollbabk
con.setAutoCommit(false); // muda o default Statement s = con.createStatement(); try { s.executeUpdate("SQL statement 1"); s.executeUpdate("SQL statement 2"); con.commit(); con.rollback(); } // valida os 2 updates // seno, desfaz os updates } catch (Exception e) {