Aula 4 JDBC - Java Database Connectivity



Documentos relacionados
Programação com Acesso a Banco de Dados

Aula 1 Acesso a Banco de Dados

Laboratório de Banco de Dados Aula 1 Acesso a Banco de Dados. Prof. Josenildo Silva jcsilva@ifma.edu.br

Acesso a Bancos de Dados (JDBC) Autor: Cleyton Maciel (clayton.maciel@ifrn.edu.br) Adaptação: Pedro Baesse (pedro.baesse@ifrn.edu.

Banco de Dados. Banco de Dados. Alcides Pamplona Alcides Pamplona Linguagem de Programação CESBD 2010

Java & Bancos de Dados Adaptado de Slides da Universidade Salgado de Oliveira Goiânia

Programação Orientada a Objetos JDBC Java Database Connectivity

Integrando Java com Banco de Dados

Programação Orientada a Objetos (DPADF 0063)

Java Básico JDBC. Razer Anthom Nizer Rojas Montaño Banco de Dados: JDBC

JAVA JDBC Java Database Connectivity

JAVA JDBC COMO FUNCIONA. Programação Orientada a Objetos Flávio de Oliveira Silva 315. Programação Orientada a Objetos Flávio de Oliveira Silva 316

Acesso a Bancos de Dados em Java (JDBC)

Curso de Java. Acesso a banco de dados através de JDBC. Todos os direitos reservados Klais

PadrãoIX. Módulo II JAVA. Marcio de Carvalho Victorino. JDBC - Java Database Connectivity A,L,F,M

Desenvolvimento de Sistemas de Informação

Java e Conexão com Banco de Dados

INTRODUÇÃO. No entanto, o que pode ser considerado um produto (resultado) da criação de BDs?

Conectividade de Banco de Dados Java JDBC

Linguagens de Programação

JDBC. Java DataBase Connectivity

JDBC Acessando Banco de Dados

Acesso a Bancos de Dados (JDBC) Desenvolvimento de Aplicações em Java O QUE É JDBC JAVA E JDBC CARACTERÍSTICAS DE JDBC

Java 2 Standard Edition Fundamentos de

JDBC (Java Database Connectivity) Padrão de Projeto DAO (Data Access Object) Roteiro para instalação do banco de dados e do driver JDBC

DSS 08/09. Camada de Dados - JDBC. Aula 1. António Nestor Ribeiro /António Ramires Fernandes/ José Creissac Campos {anr,arf,jfc}@di.uminho.

Programação em Rede JDBC

Programação com Acesso a BD. Programação com OO Acesso em Java

DSS 09/10. DSS 09/10 Que métodos é que fazem parte de cada camada? Aplicações Multi-camada JDBC. Aula 3 DSS 09/10

(UFF) JDBC (I) TEPIS II

Manipulação de Banco de Dados com Java 1. Objetivos

Desenvolvimento Web TCC Turma A-1

Manipulação de Banco de Dados com Java. Ms. Bruno Crestani Calegaro Maio/ 2015

JDBC. Prof. Márcio Bueno

Acessando dados em Java com JDBC

JDBC Java Database Connectivity

Java JDBC - I. Ex. 2: para o SQLServer da Microsoft, o driver JDBC pode ser obtido em

Acessando bancos de dados com o JDBC

Fernando Freitas Costa. Pós-Graduando em Gestão e Docência Universitária. blog.fimes.edu.br/fernando nando@fimes.edu.br

JDBC (Fundamentos) Sang Shin Java Technology Architect Sun Microsystems, Inc.

Persistência de Classes em Tabelas de Banco de Dados

Banco de Dados. Sérgio Luiz Ruivace Cerqueira

Banco de Dados. Prof. Leonardo Barreto Campos 1

Capítulo 1. Acesso a Banco de Dados com JDBC (Java Database Connectivity) e o Padrão de Projeto DAO (Data Access Object)

Especialização em web com interfaces ricas

JAVA 14 ODBC / JDBC Aceder a Bases de Dados através da Internet. Vitor Vaz da Silva

JavaServer Faces JSF

JDBC. Siga as instruções para instalar o banco de dados H2 e criar a tabela Alunos.

JDBC - Java Data Base Connectivity

De forma simples, para a execução de comandos SQL com JDBC, precisa-se da instancia de três classes Java. São elas: Nome da classe Função

JPA: Persistência padronizada em Java

Curso PHP Aula 08. Bruno Falcão

Java na WEB Banco de Dados

Curso de Java Módulo III JDBC Fábio Mengue Centro de Computação - Unicamp

Orientação a Objetos

Figura 1. A Classe Java

Java JDBC Aplicação Java com Acesso a um SGBD. Ricardo Terra (rterrabh [at] gmail.com) Java JDBC Maio, 2010

Programação WEB (JSP + Banco Dados) Eng. Computação Prof. Rodrigo Rocha

CONEXÃO JAVA - BANCO DE DADOS

Manipulação de Dados em PHP (Visualizar, Inserir, Atualizar e Excluir) Parte 2

Acesso a Banco. Conexão em Java. Conexão em Java. Programação Orientada a Objetos Profa. Cristiane e Prof. Daniel

Noções de. Microsoft SQL Server. Microsoft SQL Server

Front-End Uso da Linguagem Turbo Delphi para Acesso ao Banco de Dados Mysql

Persistência de Objetos no SGBD PostgreSQL, Utilizando as APIs: JDBC, JDK, Swing e Design Patteners DAO.

Android e Bancos de Dados

Curso: Desenvolvimento Java

Leonardo Gresta Paulino Murta

Java Beans e Servlets

Execução de Instruções SQL

Aula 2 Exibindo Resultados de Consultas

Prof. Marcelo Heitor Teixeira marceloheitor.com. Java API JDBC

Acesso a banco de dados

SQL BANCO DE DADOS. Linguagem de consulta SQL. Linguagem de consulta SQL. Linguagem de Consulta Estruturada

JDBC - Java Data Base Connectivity

Capítulo 35. Sistemas de Banco de Dados. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Desenvolvimento de Aplicações para Internet Aula 9

Integrando Java e Banco de Dados (Tutorial) por Jorge Henrique Cabral Fernandes

Prof.: Clayton Maciel Costa

Listando, gravando, alterando e excluindo registro do banco de dados com JSP

Programação Orientada a Objetos II

Programação Orientada a Objetos com PHP & MySQL Sistema Gerenciador de Banco de Dados: Introdução e configuração de bases de dados com Postgre e MySQL

UFSM COLÉGIO AGRÍCOLA DE FREDERICO WESTPHALEN CURSO SUPERIOR DE TECNOLOGIA EM SISTEMAS PARA INTERNET. Programação para Internet I

Módulo 5 - JDBC java.sql - Conexão com Banco de Dados

Desenvolvendo Aplicações Web com NetBeans

Agenda. Instalação e configuração. Processamento de comandos SQL com JDBC. Driver JDBC Criação da classe de conexão

Código-Fonte da Prática 02

SQL Linguagem de Definição de Dados. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

PHP INTEGRAÇÃO COM MYSQL PARTE 2

Transcrição:

Aula 4 JDBC - Java Database Connectivity Prof. Dr. João Bosco M. Sobral mail: bosco@inf.ufsc.br - página: http://www.inf.ufsc.br/~bosco Rodrigo Campiolo mail: rcampiol@inf.ufsc.br - página: http://www.inf.ufsc.br/~rcampiol

Histórico Diversos produtos de bases de dados com linguagens próprias de acesso e não compatíveis. Solução: Criar uma API de acesso genérico para bases de dados. Formação de um consórcio para definir esta API SAG - Standard Query Language Access Group Padrão unificado para acesso a base de dados SQL CLI - Standard Query Language Call Level Interface CLI é apenas uma maneira para submissão de sentenças SQL aos Sistemas Gerenciadores de Banco de Dados (SGBD);

CLI ODBC - Microsoft ODBC - Open Database Connectivity - padrão estendido da CLI Destina-se a plataforma Windows 1992: ODBC 1.0 Acesso comum a base de dados distintas usando SQL Problemas: lenta, defeituosa e documentação escassa. 1994: ODBC 2.0 Solucionava alguns problemas Adoção de drivers de 32 bits 1996: ODBC 3.0 Novas chamadas de funções, documentação Padrão totalmente controlado pela Microsoft

CLI ODBC - Microsoft Atualmente ODBC 4.0 após muitas versões 3.x O interface OBDC é baseada na X/Open SQL CLI Desvantagens Padrão controlado pela Microsoft e constantemente estendido Sobrecarga devido as camadas ODBC X/Open SAG CLI Originalmente definida pelo SAG Recebeu este nome em 1994 para diferenciar do ODBC As APIs são baseadas em SLQ dinâmico Em 1996 tornou-se um padrão internacional ISO 9075-3

Arquitetura JDBC

JDBC API Fornece um framework para manipular os dados armazenados em forma tabular, geralmente em um banco de dados relacional. JDBC Driver Manager Responsável por gerenciar os drivers específicos de acesso a base de dados. JDBC Driver Corresponde ao driver específico para tratar com as requisições e respostas ao SGBD.

Tipos de Drivers JDBC-ODBC Bridge (Tipo 1) Permitem acessar base de dados através de ODBC Faz parte do pacote padrão do java Solução dependente de plataforma Native API (Tipo 2) APIs específica e nativa de base de dados (C e C++) Traduz as chamadas JDBC em código específico do BD As APIs são dependentes de plataforma Melhor desempenho que o JDBC

Tipos de Drivers JDBC-Net pure (Tipo 3) Chamadas traduzidas para um protocolo de rede que não é específico de banco de dados. Chamadas são enviadas para um servidor que traduz para um protocolo específico de banco de dados. Native-protocol Pure Java Driver (Tipo 4) Chamadas traduzidas para um protocolo de rede específico para o banco de dados Programas podem se conectar diretamente com o banco de dados Não há camadas adicionais

Processo básico para utilizar o JDBC Carregar e registrar o driver JDBC junto ao Driver Manager Configurar e obter uma conexão com o banco de dados Preparar os dados para consulta (formatação, ordenação,...) e o próprio SQL Executar a consulta Obter e verificar os resultados Tratar possíveis erros Formatar a saída para o usuário Ao finalizar a aplicação, fechar a conexão

Carregar e registrar um driver JDBC Driver geralmente é uma classe java ex: driver Jay Bird do Firebird pacote: firebirdsql-full.jar e classe: org.firebirdsql.jdbc.fbdriver Existem três maneiras para se registrar um driver: Através de um classloader (mais comum) Class.forName( nome_classe_driver ); Através de instanciação nome_classe_driver driver = new nome_classe_driver(); Através de parâmetros pela linha de comando java -Djdbc.drivers=nome_classe_driver nome_aplicação

Carregar e registrar um driver JDBC Exemplos utilizando o Firebird por classloader Class.forName( org.firebirdsql.jdbc.fbdriver ); Class.forName( org.firebirdsql.jdbc.fbdriver ).newinstance(); por inicialização org.firebirdsql.jdbc.fbdriver driver = new org.firebirdsql.jdbc.fbdriver(); por propriedades na inicialização java -Djdbc.drivers=org.firebirdsql.jdbc.FBDriver nome_aplicação

Obter uma conexão com o banco de dados São necessários três elementos (depende da conf. do BD): URL: utilizada para identificar a base de dados e o driver jdbc:<subprotocol>:<subname> Nome de usuário: identifica o usuário Senha de acesso: senha para o acesso A conexão pode ser feita de duas maneiras e utiliza um objeto do tipo Connection para referenciá-la. Utilizando o DriverManager Connection minhacon = DriverManager.getConnection (url, usr, senha); Utilizando o próprio driver Connection minhacon = Driver.connect (url, java.util.properties prop);

Obter uma conexão com o banco de dados Exemplos utilizando o Firebird String dburl = "jdbc:firebirdsql:localhot/3050://home/databases/aula_db.fdb"; String usr = "aluno_cd"; String senha = "aluno_pw"; java.sql.connection con = java.sql.drivermanager.getconnection (dburl, usr, senha); ou... java.util.properties connectionproperties = new java.util.properties (); connectionproperties.put ("user", usr); connectionproperties.put ("password", senha); java.sql.connection con = driver.connect (dburl, connectionproperties);

Executar consultas Existem três maneiras: Statements (java.sql.statement) Executa uma instrução SQL fixa e retorna um resultado. Por padrão, somente um resultado pode permaner aberto por consulta. PreparedStatements (java.sql.preparedstatement) Executa uma instrução SQL pré-compilada. Fornece meios para passagem de parâmetros para essa instrução. CallableStatements (java.sql.callablestatement) Executa SQL stored Procedure.

Executar consultas Exemplos Statements Statement stmt = con.createstatement(); PreparedStatements PreparedStatement pstmt = con.preparestatement("insert INTO tabela_aluno (id, nome) VALUES (?,?)"); CallableStatements callablestatement cstmt = con.preparecall("{call test_sp(?,?)}");

Statement - Métodos ResultSet executequery(string sql); Executa uma operação SQL que retorna dados como resultados. Esses dados devem ser armazenados em um objeto ResultSet para serem manipulados. int executeupdate(string sql); Executa uma operação SQL que retorna o número de linhas afetadas. Utilizado para operações SQL que não devem retornar dados (inserção, deleção ou atualização) ou ainda para funções de manipulação (criação de tabelas,...). boolean execute(string sql); Executa uma operação SQL que pode retornar diversos resultados.

PreparedStatement - Métodos Os métodos de execução são os mesmos do Statement. Os métodos abaixo são alguns dos quais podem ser utilizados para substituir o caracter coringa "?" void setblob( int i, Blob x ); void setboolean( int parameterindex, boolean x ); void setbyte( int parameterindex, byte x ); void setdouble( int parameterindex, double x ); void setint( int parameterindex, int x ); void setstring( int parameterindex, String x ); void settime( int parameterindex, Time x ); void setdate( int parameterindex, Date x, Calendar cal );

Statement - Exemplos java.sql.resultset rs = stmt.executequery ("SELECT * FROM tabela_aluno"); stmt.executeupdate("create TABLE tabela_aluno (id INT, nome CHAR(25)); stmt.executeupdate("insert INTO tabela_aluno VALUES (1, Bicho Papão ); stmt.execute("insert INTO tabela_aluno VALUES (2, 'Curupira'); PreparedStatement - Exemplos PreparedStatement pstmt = con.preparestatement("insert INTO tabela_aluno (id, nome) VALUES (?,?)"); pstmt.setint (1, 1); pstmt.setstring (2, 'Bicho Papão'); pstmt.executeupdate();

CallableStatement - Métodos e exemplo Os métodos são herdados do Statement e do PreparedStatement A sintaxe geral para utilizá-lo é: {?= call <procedure-name>[<arg1>,<arg2>,...]} {call <procedure-name>[<arg1>,<arg2>,...]} Exemplo: CallableStatement cstmt = con.preparecall( "{? = call sp_b(? ) }" ); cstmt.registeroutparameter( 1, Types.INTEGER ); /* paremetro OUT */ cstmt.setstring( 2, "M-O-O-N" ); /* parametro IN */ cstmt.execute(); // ou executeupdate() int irp = cstmt.getint( 1 ); /* obtém o parâmetro de saída */

Obter e tratar os resultados ResultSet Tabela de dados que representa um conjunto resposta a uma consulta ao banco de dados. Mantém um cursor apontando para a linha atual de dados Inicialmente esse cursor não aponta para nenhuma linha Por padrão, a movimentação do cursor é somente para frente e os dados não podem ser atualizados diretamente no ResultSet. O objeto ResultSet é automaticamente fechado se o objeto Statement que o gerou é fechado. Fornece métodos para obter os dados da linha selecionada.

ResultSet - Métodos boolean absolute(int row): move o cursor para o registro especificado void close(): fecha o ResultSet e libera o BD. boolean first(): move o cursor para o primeiro registro do ResultSet boolean last(): move o cursor para o último registro do ResultSet boolean next(): move o cursor para o próximo registro boolean previous(): move o cursor para o registro anterior Funções gettype (int columnindex) ou gettype (String columnname) Obtém o valor do campo especificado pelo índice ou pelo nome da coluna do registro corrente.

ResultSet - Métodos (JDBC 2.0) void cancelrowupdates(): cancela as alterações realizadas no registro corrente. void deleterow(): deleta o registro corrente do ResultSet e do BD. void insertrow(): insere o conteúdo do registro atual no ResultSet e no BD. void refreshrow(): atualiza o valor do registro atual do ResultSet com o valor do registro mais recente do BD. void updaterow(): atualiza o BD com os valores do registro corrente. void updatetype(string columnname, TYPE value): atualiza o BD com o valor da coluna especificada do registro corrente.

ResultSet - Exemplos /* configura o ResultSet para suportar movimentação do cursor bidirecional e atualização */ Statement stmt = con.createstatement (ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet rs = stmt.executequery("select * FROM tabela_aluno"); rs.absolute(5); /* move o cursor para a linha 5 */ rs.updatestring("nome", "Drácula"); /* atualiza a coluna "nome" */ rs.updaterow(); /* atualiza o registro no base de dados */ /* forma muito usada para navegação em um ResultSet */ while (rs.next( )) { int id = rs.getint(1); String s = rs.getstring("nome"); } //while

Tratar possíveis erros java.sql.sqlexception permite detectar e tratar os erros causados pelos métodos dos objetos JDBC ao acessar a base de dados. fornece dois métodos para obter mais informações sobre o erro. SQLException - Métodos String getm essage(): retorna uma string descrevendo o erro. String getsqlstate(): retorna um identificador de estado, descrito na especificação X/Open SQL. int geterrorcode(): retorna um descritor de erro específico do fabricante do SGDB. SQLException getnextexception(): recupera a próxima exceção.

Tratar possíveis erros java.sql.sqlwarning Exceção que fornece informações sobre alertas ao acesso ao banco de dados. Podem ser recuperados através dos objetos Statement, Connection e ResultSet; Exemplo: stmt = con.createstatement(); sqlw = con.getwarnings(); while( sqlw!= null) { /* código para tratar os warnings */ sqlw = sqlw.getnextwarning(); } //while con.clearwarnings();

Metadados java.sql.databasemetadata Recupera informações sobre o banco de dados Possui cerca de 150 métodos Um SQLException será disparado se o driver não suporta algum dos métodos DatabaseMetaData dbmd = con.getmetadata(); java.sql.resultsetmetadata Recupera informações sobre um determinado ResultSet Possui cerca de 25 métodos Obtém informações sobre tipos e propriedades das colunas ResultSetMetaData rsmd = rs.getmetadata();

Exercícios Utilizando como base a GUI das aulas sobre Swing, crie um banco de dados para armazenar as informações. Inicialmente implemente utilizando os métodos da interface Statement. Crie uma janela de consulta que permita executar diversos tipos de seleção e exiba os resultados em uma JTable. Utilize os métodos da interface PreparedStatement para construir as consultas. Implemente uma Stored Procedure e teste os métodos da interface CallableStatement. Implemente um teste que obtenha metadados do ResultSet e do banco de dados e exiba na tela.

Para saber mais JDBC Technology http://www.javasoft.com/products/jdbc/index.html Java Database Programming http://java.sun.com/developer/onlinetraining/database/jdbcshortcourse/contents.html Basic Tutorial http://java.sun.com/developer/books/jdbc/fisher/fisher_ch02.pdf jguru JDBC 2.0 Fundamentals http://java.sun.com/developer/onlinetraining/database/jdbc20intro/index.html