D S S 0 7 / 0 8
Transcrição
TP01 Universidade do Minho Departamento de Informática DSS 07/08 Camada de Dados - JDBC Aula 1 António Nestor Ribeiro /António Ramires Fernandes {anr,arf}@di.uminho.pt TP01 2 Camada de Dados • A camada de dados, data layer, permite isolar o acesso aos dados, por forma a que o resto da aplicação não esteja dependente da origem ou estrutura sob a qual os dados estão armazenados. Presentation Layer DSS 07/08 Business Logic Data Layer • A combinação que aqui será explorada consiste na utilização de bases de dados acedidas na camada de dados através de JDBC. TP01 3 Aplicações Multi-Camada • Diversos tipos de objectos para efectuarem diferentes operações DSS 07/08 – Presentation Objects – Business Objects – Data Objects TP01 4 JDBC • JDBC = Java DataBase Connectivity • Pacotes: java.sql import java.sql.*; DSS 07/08 • Passos: 1. 2. 3. 4. inicializar o driver estabelecer uma ligação ... fechar a ligação TP01 5 JDBC - Driver • Passo I: carregar a classe do driver static Class forName(String nome); – excepção: ClassNotFoundException DSS 07/08 – Driver ODBC: sun.jdbc.odbc.JdbcOdbcDriver try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); } catch (ClassNotFoundException e) { // Driver não disponível } TP01 6 Drivers JDBC DSS 07/08 • Existem várias implementações de drivers JDBC para os diversos motores de BD. – Type 1: drivers que implementam a API JDBC como um mapeamento para uma outra API. A portabilidade está dependente da existência do driver destino. A ligação a ODBC é um exemplo destes drivers; – Type 2: drivers que são escritos parcialmente em Java e numa outra linguagem. É utilizado um cliente específico para o acesso à base de dados pretendida; – Type 3: drivers escritos em Java e que comunicam com um servidor de middleware que faz o interface com as fontes de dados; – Type 4: drivers em que o cliente liga directamente à base de dados utilizando exclusivamente Java. TP01 7 JDBC - Ligação • Passo II: Estabelecer uma ligação • Classe DriverManager disponibiliza os seguintes métodos de classe: DSS 07/08 Connection getConnection( String url); Connection getConnection( String url, String login, String pass); Connection getConnection( String url, java.util.Properties.info); – excepção: SQLException • Connection é uma Interface que define um conjunto de métodos para operar com a base de dados. TP01 8 JDBC - Ligação • Passo II: Estabelecer uma ligação (2) • Parâmetro url => protocolo:subprotocolo:identificador DSS 07/08 – protocolo: é constante e representado pela string "jdbc" – subprotocolo: é função do motor da base de dados e da forma de acesso (directa ou indirecta, por exemplo através de ODBC). No caso de acesso através de ODBC o subprotocolo é "odbc". – identificador da base de dados: Indica qual a base de dados a utilizar. No caso da ligação ODBC-JDBC é o identificador definido em Data Source Name. TP01 9 JDBC - Ligação • Passo II: Estabelecer uma ligação (3) Connection con; ... DSS 07/08 try { con = DriverManager.getConnection("jdbc:odbc:bolsa"); } catch (SQLException e) { // Erro ao estabelecer a ligação } TP01 10 JDBC - Libertar Recursos • Passo IV: terminar a ligação • Interface Connection void close(); boolean isClosed(); DSS 07/08 – excepção: SQLException try { con.close(); } catch (SQLException e) { // Erro ao terminar a ligação } TP01 11 JDBC - Comandos SQL • Tipos de comandos SQL DSS 07/08 – DDL: Data Definition Language CREATE TABLE idFunc ( cod VARCHAR(10) NOT NULL, nome VARCHAR(50), primary key(cod)) – Selecção SELECT * FROM cotações – Actualização UPDATE clientes SET numerário = 100000 WHERE nome = “João” TP01 12 JDBC - Comandos SQL • Primeiro passo: criar um statement • Interface Connection Statement createStatement(); DSS 07/08 – excepção: SQLException • Interface Statement ResultSet executeQuery(String sql); int executeUpdate(String sql); – excepção: SQLException TP01 13 JDBC - SELECT • Exemplo para comandos de selecção Connection con; ... // iniciar a ligação Statement st; ResultSet res; String sql; DSS 07/08 sql = "SELECT nome FROM clientes WHERE numerário > 100000"; try { st = con.createStatement(); res = st.executeQuery(sql); } catch (SQLException e) { // lidar com as excepções } TP01 14 JDBC - Actualização e DDL • int executeUpdate(String sql); – Se for um comando de actualização (UPDATE, INSERT ou DELETE) • devolve o número de registos afectados DSS 07/08 – Comandos DDL (ex: CREATE TABLE) • devolve 0 Statement st; try { st = con.createStatement(); int count = st.executeUpdate("UPDATE..."); } catch (SQLException e) { // lidar com as excepções } TP01 15 JDBC - Result Set • Acesso aos resultados armazenados num ResultSet • Interface ResultSet – funciona como iterador sobre os registos devolvidos – boolean next(); DSS 07/08 – dentro de um registo fornece um conjunto de métodos para aceder aos campos, por exemplo: • getString(int índiceDoCampo); • getString(String nomeDoCampo); – Um ResultSet está disponível até ser fechado ou até o statement ser reutilizado ou fechado TP01 16 JDBC - Result Set • exemplo de acesso a um ResultSet Statement st; ResultSet rs; try { DSS 07/08 rs = st.executeQuery("SELECT saldo FROM contas"); int total = 0; while (rs.next()) total += rs.getInt ("saldo"); // nunca fazer isto em casa!!! System.out.println("Soma :" + total"); } catch (SQLException e) { // lidar com as excepções } TP01 17 DSS 07/08 JDBC - Exercício • Crie uma base de dados em Access com uma tabela "clientes" com os seguintes campos: cod (chave), saldo e nome. Preencha a tabela com alguns valores; • Registe a base de dados no ODBC; • Escreva um programa em java para inserir um registo na tabela e em seguida calcular o total dos saldos (iterando o ResultSet). TP01 18 Apêndice - Dummy's Guide to JDBC-ODBC e Access • Para registar uma base de dados no ODBC realizar os seguintes passos: 1. Abrir "Data Sources (ODBC)". ControlPanel -> Administrative Tools; DSS 07/08 2. Seleccionar "Add" e escolher "Driver do Microsoft Access"; 3. Preencher "Data Source Name" (este vai ser o nome pela qual a base de dados é conhecida numa aplicação java com JDBC-ODBC; 4. Pressionar "Select..." para indicar o nome do ficheiro da base de dados; 5. "OK"!
Documentos relacionados
Curso de Java – Módulo III
Claro que para criar um programa Java que faz acesso a banco, deve-se instalar a JDK. Ao fazer isso, já existe na API o acesso ao pacote básico. Após a instalação do Java, devemos instalar um drive...
Leia maisJDBC – Trabalhando com banco de dados em Java
padrão Microsoft de acesso a banco de dados, ODBC (Open DataBase Connectivity), porém tem a vantagem de ser multi-plataforma. Além da independência da plataforma, o Java também visa obter independê...
Leia maisAcesso a Banco de Dados com JDBC
DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE", "system", "senha");
Leia maisJDBC – Conexão com Banco de Dados
◦ DriverManager: responsável por criar uma conexão com o banco de dados ◦ Connection: classe responsável por manter uma conexão aberta com o banco de dados ◦ Statement: gerencia e executa instruçõe...
Leia maisAcesso a Banco de Dados com JDBC
PASSO 1: IMPORTAÇÃO DOS PACOTES NECESSÁRIOS PASSO 2: REGISTRO DO(S) DRIVER(S) PASSO 3: ABERTURA DA CONEXÃO PASSO 4: EXECUÇÃO DE CONSULTAS E RECUPERAÇÃO DOS RESULTADOS PASSO 5: FECHAMENTO DA CONEXÃO
Leia maisJava e Bancos de Dados
//Recebendo o conjunto de dados da consulta SQL ResultSet rs = stmt.executeQuery("SELECT id, nome FROM ALUNO"); // Se houver resultados, posiciona-se o cursor na próxima linha de dados while (rs.ne...
Leia mais