Jdbc

341 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
341
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
19
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Jdbc

  1. 1. Sumário1. JDBC .........................................................................................................................2 1.1. Pré requisitos .....................................................................................................2 1.1.1. JDBC .........................................................................................................2 1.1.2. Base de Dados ...........................................................................................2 1.1.3. Driver ........................................................................................................2 1.2. Estabelecer uma ligação ....................................................................................2 1.2.1. Carregar o Driver ......................................................................................3 1.2.2. Criar uma conexão.....................................................................................3 1.3. Criar JDBC Statements......................................................................................4 1.3.1. executeUpdate ...........................................................................................5 1.3.2. executeQuery.............................................................................................5 1.4. Obter Resultados de objectos ResultSet ............................................................5 1.4.1. Método next() ............................................................................................6 1.4.2. Método getXXX ........................................................................................6 1.5. Excepções ..........................................................................................................7 1.6. Limpar recursos .................................................................................................7 1.7. Um exemplo inteiro...........................................................................................7 1.8. Exercícios ..........................................................................................................9Página 1 de 10
  2. 2. 1. JDBCJDBC – Java Database Connectivity é um API (Application Programming Interface)para o Java que permite comunicação com base de dados. A interface de JDBC foidesenhada de modo ser independente da base de dados; assim cada base de dadosprecisa de um “Driver” (provido pelo vendedor de base de dados)1.1. Pré requisitos1.1.1. JDBCO JDBC vem com o JDK então já deverá estar instalado. Para usar o JDBC 1.0 sóprecisará do JDK 1.1, para a versão JDBC 2.0 precisará do JDK 1.2.1.1.2. Base de DadosSerá necessário ter uma base de dados. Aqui usaremos MS Access que já está instaladonas máquinas. Assim será necessário criar uma base de dados em Access com o nometraining e com uma tabela chamada people com os campos id, name e age.1.1.3. DriverDado que o JDBC é independente da base de dados, por cada tipo de base de dados énecessário um “Driver” para conectar. O Driver é um ajudante e tradutor. O vendedorda base de dados providencia Driver, mas também pode-se encontrar Drivers naInternet.O Driver que precisamos para o MS Access é o JDBC-ODBC Driver. Este Driver éfornecido pelo JDK.1.2. Estabelecer uma ligaçãoPara se fazer uma conexão com a base de dados são necessários os seguintes passos:Página 2 de 10
  3. 3. 1.2.1. Carregar o DriverSó precisamos de uma linha de código como a seguinte:Class.forName("nomeDaClasse");Usaremos o JDBC-ODBC Bridge Driver. O nome da classe ésun.jdbc.odbc.JdbcOdbcDriver. Carrega-se assim:Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Esta criará uma instância do Driver e registá-la como DriverManager. Depois, quandoo JDBC pedir uma ligação para uma BD, o DriverManager irá buscar entre estesDrivers registados, e usará este Driver se for compatível.1.2.2. Criar uma conexãoO segundo passo é criar uma conexão à base de dados. Para isso precisamos: 1) O URL – Uniform Reource Locater 2) O username 3) O passwordO URL tem 3 partes. É criado porJdbc:subProtocol:nomeDeDataSource 1) O protocolo jdbc. 2) O sub protocolo depende do tipo de Driver. Em nosso caso do JDBC-ODBC Bridge Driver será “odbc” 3) O nome do data source (ou databse system) é configurado de uma maneira diferente dependendo da base de dados.Neste caso, estamos a usar uma base de dados MS Access. Temos que registar o DataSource da seguinte maneira: 1) Abrir o Control Panel (“Start” ”Settings” ”Control Panel”). 2) Selecionar “Administrative Tools” ”Data Sources (ODBC)”) 3) Selecionar o tab “System DNS”Página 3 de 10
  4. 4. 4) Clique Add 5) Selecionar “Driver do Microsoft Access (*.mdb)” e clique “Finish” 6) Inserir o Data Source Name “training”. 7) Selecionar “Select” e encontar o ficheiro c:caminhotraining.mdb 8) Clique “Advanced” 9) Inserir Login name: admin 10) Inserir Password: password 11) Selecionar OK 12) Selecionar OK duas vezes para sair.Agora, o URL para o nosso caso seria “jdbc:odbc:training”. Agora passamos estesdetalhes (URL,username,password) como parâmetros ao método getConnection daclasse DriverManager.Ex:String DB_URL ="jdbc:odbc:training";Connection conn= DriverManager.getConnection(url,username,password);A classe DriverManager controla todos detalhes para criar uma conexão à base dedados. O método getConection é o único do DriverManager que normalmente énecessário saber.A conexão devolvida pelo método DriverManager.getConnection é uma conexãoaberta que podemos usar para criar objectos de JDBC Statements, que são usados parapassar os Statements do SQL à base de dados.1.3. Criar JDBC StatementsO objecto do Statement é o que manda os Statements do SQL à base de dados. Só énecessário criar um objecto do Statement e depois executar o método apropriado. Osmétodos são os seguintes: • executeQuery – para um Statement do SELECT • executeUpdate – para um Statement para criar ou modificar uma tabelaPágina 4 de 10
  5. 5. É necessário uma instância de uma conexão aberta para criar o objecto do Statement.No exemplo seguinte, é usado o objecto da Connection conn (criada acima).Statement stmt=conn.createStatement();Assim sendo, stmt existe, mas não tem um Statement do SQL para passar à base dedados. É imperioso que forneça o método que se pretende usar.Ex:stmt.executeUpdate("UPDATE …”);stmt.executeQuery("SELECT …”);1.3.1. executeUpdateO método executeUpdate é usado para criar ou modificar uma tabela. Quando usadocom SQL Statements como INSERT, UPDATE ou DELETE, devolve um int de rowcount (nº de linhas criadas/alteradas). Quando usado com SQL Statements de DDL(Data Definiton Language), ex CREATE, MODIFY, devolve só 0.Ex:stmt.executeUpdate(“UPDATE people SET age=21 WHERE name LIKE‘zacaza’”)1.3.2. executeQueryO método executeQuery é usado para seleccionar dados de uma tabela. Devolve umobjecto ResultSet. Este é um objecto que representa os dados encontrados peloSELECT.1.4. Obter Resultados de objectos ResultSetO ResultSet tem os dados organizados em filas, como quando se executa um selectno cliente da base de dados. O objecto ResultSet tem um cursor que aponta à linhaactual de dados.Página 5 de 10
  6. 6. Ex:ResultSet rs=stmt.executeQuery("SELECT id, name, age FROM people");1.4.1. Método next()Inicialmente o cursor é colocado antes da primeira fila. O método next move o cursoraté a próxima linha. A linha actual do cursor é a linha em que pode actuar.NB: Quando o ResultSet só tem uma linha, tem que se chamar next primeiro paraacessá-lo. E porque o método next devolve false quando não há mais filas no objectoResultSet, poderá ser usado num ciclo while para iterar através do ResultSet.Ex:while (rs.next()){ //actuar em linha acutal}1.4.2. Método getXXXPara ler dados da linha actual, o ResultSet tem vários métodos em forma de getXXX.Usa-se o método apropriado para o tipo de valor que queremos obter.Alguns exemplos:Tipo de Valor em BD Nome do Método Tipo de valo em JAVAVarchar getString() java.lang.StringNumeric getInt() IntDate getDate() java.sql.DateEstes métodos aceitam como parâmetros o nome da coluna (String) ou índice dacoluna(int).Ex:String name=rs.getString(“name”);int age=rs.getInt(2);Página 6 de 10
  7. 7. 1.5. ExcepçõesO método Class.forName lança um ClassNotFoundExceptionOs métodos de JDBC lançam SQLExceptions.O tratamento de exepções é feito pelos blocos try e catch e tratá-los apropradamente.E útil imprimir os erros, assim saber-se-á porque o código não terá eventualmentefuncionado.1.6. Limpar recursosQuando se abre uma conexão à base de dados, cria-se uma conexão aberta na base dedados. É da responsabilidade do programador fechar esta conexão quando se chega aotérmino. Também é necessário fechar o ResultSet e Statement.rs.close();stmt.close();conn.close();É aconselhável fechar os recursos dentro do bloco finally porque também quando ocódigo inteiro lançar excepções, é necessário limpar recursos. Note que estes métodospara fechar também podem lançar excepções.1.7. Um exemplo inteiro/* * Created on 5/Abr/2007 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */package jdbc;/** * @author mazibe *Página 7 de 10
  8. 8. * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */import java.sql.*;public class JDBCExample { public static final String USERNAME ="admin"; public static final String PASSWORD ="password"; public static final String DB_URL ="jdbc:odbc:training"; public static void main(String args[]) throwsClassNotFoundException { //Carregar o JDBC-ODBC Driver Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection conn=null; Statement stmt=null; ResultSet rs=null; try{ //Obter uma connexão do Driver Manager conn=DriverManager.getConnection(DB_URL,USERNAME,PASSWORD); //Criar um Statement object para que possamossubmeter SQL Statements ao Driver stmt=conn.createStatement(); //Submeter a query, criando um objecto ResultSet rs=stmt.executeQuery("SELECT name, age FROM people"); //Mostrar o conteúdo do ResultSet while (rs.next()){ int id = rs.getInt("id"); String name=rs.getString("name"); int age = rs.getInt("age"); System.out.println("id: "+id+", name: "+name+",age: "+age); } } catch (SQLException e){ System.out.println("SQLException in connectiong to adatabase or making query:n"+e); } finally { try { //Fechar o ResultSetPágina 8 de 10
  9. 9. if (rs !=null) rs.close(); //Fechar o Statement if (stmt !=null) stmt.close(); //Fechar a conexão if (conn !=null) conn.close(); }catch(SQLException e) { System.out.println("could not closeresources"); } } }}1.8. Exercícios 1) Copie o exemplo acima e verifique se corre. 2) Escreva o pseudocódigo usando as frases seguintes, para conectar e correr uma query à base de dados o Obter conexão à base de dados o Carregar o Driver o Fechar recursos o Executar statement o Instanciar o Driver o Criar statement o Ler ResultSet 3) a) Crie uma nova classe com o método main. b) Crie uma conexão à base de dados training e obtenha o objecto Statement. c) Qual o método que será usado para fazer um insert? d) Crie uma nova entrada na tabela people com o seu nome, cidade e idade.Página 9 de 10
  10. 10. e) Abra a base de dados em MS Access e veja se funcionou. 4) f) Edite a classe criada no exercício nº 3) para ler os parâmetros do método main. g) Corra o main algumas vezes, variando os parâmetros, e verifique na base de dados. 5) Agora queremos fazer uma query à base de dados para ler a idade, por exemplo, e por cada linha faça um update, por exemplo para aumentar a idade em uma unidade. Edite o pseudocódigo escrito na pergunta 2). 6) a) Crie uma nova classe com o método main e crie uma conexão à base de dados training b) Desta vez crie 2 objectos do Statement. c) Com o primeiro seleccione a chave e a idade da tabela people. d) Usando o segundo objecto do Statement, para cada linha do resultado, faça um update para aumentar a idade em uma unidade. e) Verifique se os dados da base de dados alteraram.Página 10 de 10

×