Desenvolvimento de Aplicaçõ. ções em Java

Documentos relacionados
Java e Conexão com Banco de Dados

Padrões de Projeto e Persistência com DAO

Acesso a Bancos de Dados em Java (JDBC)

Programação Orientada a Objetos JDBC Java Database Connectivity

Integrando Java com Banco de Dados

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

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

Programação Orientada a Objetos II

JDBC Acessando Banco de Dados

Exercícios de fixação: Listas

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

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

CONEXÃO JAVA - BANCO DE DADOS

Java - Conexão ao Banco de Dados usando JDBC

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

Desenvolvimento Web TCC Turma A-1

Banco de dados POO Márcio Delamaro. Programação Orientada a Objetos Prof Marcio Delamaro ICMC/USP

JDBC JDBC. JDBC - Arquitetura. JDBC Arquitetura Pacote Java.sql. Java Database Connectivity JDBC PostgreSQL

JDBC. Java DataBase Connectivity

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.

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

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

Projeto Final Curso de Java Básico

Como criar um banco de dados usando o mysql

Programação com Acesso a Banco de Dados

Conectividade de Banco de Dados Java JDBC

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

PROGRAMAÇÃO ORIENTADA A OBJETOS. Aula 9- Introdução ao JDBC

Leonardo Gresta Paulino Murta

JDBC. Prof. Márcio Bueno

Web Services. EclipseSDK/DB2 Construindo/Consumindo Serviços

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

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

Conexão do Banco de Dados localhost

Funcionamento da Aplicação. Simulações do funcionamento. Simulação SAC

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

JAVA JDBC Java Database Connectivity

Código-Fonte da Prática 02

JDBC - Java Data Base Connectivity

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

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

DATA ACCESS OBJECT (DAO)

Acesso a banco de dados

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

Lista de exercícios I - RESPOSTAS Servlets e banco de dados

Acessando dados em Java com JDBC

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

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

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

Aula 1 Acesso a Banco de Dados

Lista de Exercícios da disciplina Aplicações de Linguagem de Programação Orientada a objetos

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

PONTIFÍCIA UNIVERSIDADE CATÓLICA DE GOIÁS Departamento de Computação Curso de Análise e Desenvolvimento de Sistemas Modelagem Conceitual de Dados

PROGRAMAÇÃO ORIENTADA A OBJETOS. Aula 09a- Acessando os dados através JDBC

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

Programação Orientada a Objetos II

Código-Fonte da Prática 04

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

Programação Orientada a Objetos (DPADF 0063)

Banco de Dados. Sérgio Luiz Ruivace Cerqueira

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

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

Java 2 Standard Edition Fundamentos de

JavaServer Faces JSF

BD II (SI 587) Programação SQL. Prof. Josenildo Silva.

TECNOLOGIAS DE ACESSO A BASES DE DADOS. Profª Ana Paula Cação Maio de 2018

Driver Mysql para Banco de Dados. Conexão com um Banco de Dados

SISTEMA EXPERIMENTALL 15/11/2009. Olá! A partir de agora vamos conhecer a IDE NetBeans efetuando um micro projeto swing.

Java na WEB Banco de Dados

Aula 4 JDBC - Java Database Connectivity

JDBC - Java Data Base Connectivity

Introdução à Tecnologia Java 02/2012. Java Aula 05 12/09/2012. Celso Olivete Júnior.

(UFF) JDBC (I) TEPIS II

Curso: Desenvolvimento Java

Unidade 12: Programação de Banco de Dados com Java Prof. Daniel Caetano

Tecnologias Java JDBC. Marcio Seiji Oyamada

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

Estrutura do Projeto - Trabalhando com Banco de Dados

Criando um aplicação simples com JAVA e MySQL usando NetBeans Parte I

Drive MySql de conexão para Eclipse

Transcrição:

Sistemas de Informação Desenvolvimento de Aplicaçõ ções em Java Prof. Giuliano Prado de Morais Giglio, M.Sc. profgiuliano@yahoo.com.br http://www.giulianoprado.xpg.com.br

Desenvolvimento de Aplicações em Java Java e Conexão com Banco de Dados Prof. Giuliano Prado de Morais Giglio, M.Sc.

Conexão com Banco de Dados JDBC: Java Database Connectivity Acesso a Bando de Dados SQL Independente da Plataforma e do Banco de Dados; Disponível no pacote J2SDK Vários Drivers disponíveis 100% Puro Java Diversos drivers disponíveis

JDBC Bancos de dados em Java JDBC Java DataBase Connectivity é a API que nos permite acessar bancos de dados através de nossa querida e amada linguagem Java. A idéia é simples, existem diferentes tipos de drivers para bancos de dados, mas para os programadores as chamadas são uniformes.

JDBC Estabelece conexão com o Banco de Dados Envia requisições SQL Processa os resultados

JDBC Modelo de desenvolvimento de aplicações com BD

Recursos on-line sobre JDBC Site da sun sobre JDBC http://java.sun.com/products/jdbc/ Tutorial sobre JDBC http://java.sun.com/docs/books/tutorial/jdbc/ JDBC Drivers disponíveis http://industry.java.sun.com/products/jdbc/drivers

JDBC Detalhes de Conexão

Tipos de Dados Suportados

Acessando um banco Primeiro deve haver um banco de dados configurado e disponível Criando um banco Access...

Uso de um Banco de Duas opções Dados Acessar o Banco via ponte JDBC-ODBC Necessidade de configurar um DSN do usuário no ODBC. Via driver JDBC direto para o Banco Necessidade de se obter o driver adequado.

Configuração ODBC

Configuração ODBC

Passos básicos para Conexão JDBC Importar java.sql.* Carregar driver JDBC Especificar BD Abrir conexão com BD Criar um objeto comando (statement) Submeter o comando SQL Receber o resultado Utilizar os resultados no programa

Passos básicos para Conexão JDBC 1. Importar java.sql.* import java.sql*; 2. Carregar driver JDBC try { Class.forName(" sun.jdbc.odbc.jdbcodbcdriver"); catch (ClassNotFoundException cnfe) { System.out.println( Erro no carregamento do driver: + cnfe); Obs: toda tentativa de conexão com driver de BD tem que tratar possíveis exceções. a JVM deve poder encontrar estas classes: para aplicações, a variável de ambiente CLASSPATH deve incluir os drivers

A abertura da conexão é feita pelo método getconnection, que recebe uma URL (Universal Resource Location) como argumento JDBC URLs são formadas por: um protocolo (normalmente jdbc), um subprotocolo (normalmente é o tipo de driver) e informações para o SGBD. Connection conn = DriverManager.getConnection ("jdbc:odbc:empresa", "login", "senha"); 3. Especificar BD String host = jdbc:odbc:empresa"; 4. Abrir conexão com BD String nomeusuario = giuliano"; String senha = "secreta"; Connection connection = DriverManager.getConnection(host, nomeusuario, senha);

Passos básicos para Conexão JDBC Opcionalmente, podemos obter algumas informações sobre o Banco. DatabaseMetaData dbmetadata = connection.getmetadata(); String nomebanco = dbmetadata.getdatabaseproductname(); System.out.println("Database: " + nomebanco); String versaobanco =dbmetadata.getdatabaseproductversion(); System.out.println("Version: " + versaobanco);

import java.sql.*; class BDConexao { public static void main (String args[]) { try { String url = "jdbc:odbc:empresa"; String usuario = ""; String senha = ""; Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection con; con = DriverManager.getConnection(url,usuario,senha); System.out.println("Conexão realizada com sucesso."); con.close(); Conectando... catch(exception e) { System.out.println("Problemas na conexão.");

Statements Uma vez conectado queremos executar statements Assim podemos utilizar executeupdate(string str) para executar create table, insert, update executequery(string str) para executar consultas (retorna ResultSet).

5. Criar um objeto comando (statement) Statement statement =connection.createstatement(); 6. Submeter o comando SQL String consulta ="SELECT col1, col2, col3 FROM algumatabela"; ResultSet resultado =statement.executequery(consulta); Para modificar o banco, usar executeupdate ou invés de executequery,tendo como parâmetro um string contendo comandos UPDATE, INSERT,ou DELETE Usar setquerytimeout para especificar o tempo máximo de espera pelo resultado da consulta.

Criando uma tabela stmt = cnt.createstatement(); try { stmt.executeupdate("create TABLE LIVRO " + "(TITULO VARCHAR(50), ISBN VARCHAR(30), + AUTOR VARCHAR(50), PAGINAS INTEGER)"); catch (SQLException e) { System.out.println(e);

Inserindo Dados import java.sql.*; class BDConsulta{ public static void main (String args[]) { try { String url = "jdbc:odbc:empresa"; Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection con = DriverManager.getConnection(url, " ", " "); Statement st = con.createstatement();, st.executeupdate("insert INTO Pedidos (CodPedido, CodCli, Descricao, Valor, DataPedido) VALUES (1001,1230,'Dicionário Aurélio Século XXI.',36.50,#16-03-2002#)"); System.out.println("Operação realizada com sucesso."); st.close(); con.close(); catch(exception e) { System.out.println("Problemas na conexão.");

Consultando dados // conexão estabelecida Statement st = con.createstatement(); ResultSet rs = st.executequery("select * FROM Pedidos"); while (rs.next()){ System.out.print(rs.getString("CodPedido") + " "); System.out.print(rs.getString("CodCli") + " "); System.out.print(rs.getString("Descricao") + " "); System.out.print(rs.getString("Valor") + " "); System.out.println(rs.getString("DataPedido")); System.out.println("Operação realizada com sucesso."); st.close(); con.close(); catch(exception e) { System.out.println("Problemas na conexão. ");

Uso de driver JDBC direto Colocar o arquivo com os drivers do Banco de Dados no diretório WEB-INF/lib *criar o diretório lib em Geralmente é um arquivo.jar.

Passos básicos para Conexão JDBC Direto 1. Importar java.sql.* import java.sql*; 2. Carregar driver JDBC try { Class.forName("com.mysql.jdbc.Driver").newInstance(); //ou //Class.forName("oracle.jdbc.driver.OracleDriver"); catch { ClassNotFoundException cnfe) { System.out.println( Erro no carregamento do driver: " cnfe);

Passos básicos para Conexão JDBC Direto 3. Especificar BD String host = //localhost"; String dbname = livraria"; String mysqlurl = "jdbc:mysql: +host + /" +dbname; 4. Abrir conexão com BD String nomeusuario = root"; String senha = admin"; Connection connection = DriverManager.getConnection(mysqlURL, nomeusuario, senha);

PreparedStatements Também podemos usar PreparedStatements para ter um resultado mais rápido...

PreparedStatements... PreparedStatement prep = cnt.preparestatement( "SELECT * FROM LIVRO WHERE ISBN =?"); prep.setstring(1,"123456789"); ResultSet rs = prep.executequery(); while (rs.next()) { String s = rs.getstring("titulo"); String i = rs.getstring("isbn"); String a = rs.getstring("autor"); int pa = rs.getint("paginas"); System.out.println(s + " " + i + " " + a + " " + pa);

Prepared Statements Cada vez que se executa um comando SQL passado por meio de uma String, este String deve ser analisado pelo processador de SQL do SGBD que irá, no caso da String estar sintaticamente correta, gerar um código binário que será executado para atender à solicitação. Todo esse processo é caro e sua execução repetidas vezes terá um impacto significativo sobre o desempenho da aplicação e do SGBD como um todo. Prepared Statement é indicado nos casos onde um comando será executado várias vezes em uma aplicação. Neste caso é melhor compilar o comando uma única vez e toda vez que for necessário executá-lo basta enviar o comando compilado. Além disso, o comando pré-compilado pode ser parametrizado, tornando-o mais genérico e, portanto, apto a expressar um maior número de consultas. Para criar um Prepared Statement é necessário: PreparedStatement pstmt = con.preparestatement( INSERT INTO usuarios(login,senha) VALUES(?,? ) );

O comando anterior insere uma nova linha na tabela usuarios com os valores das colunas login e senha passados por parâmetro. O caractere? representa o parâmetro. Este tipo de comando só possui valor tendo parâmetros, caso contrário teria pouca chance de ser reutilizado. Para executar o comando devemos especificar o valor dos parâmetros e executar o comando, como mostrado no exemplo abaixo: pstmt.clearparameters(); pstmt.setint(1,8); pstmt.setstring(2, Clara Maria ); pstmt.executeupdate(); Setando os Parâmetros

Receber o resultado while(resultadot.next()){ System.out.println(resultado.getString(1)+""+resultado.getString(2 ) +""+ resultado.getstring(3)); A primeira coluna tem índice 1, não 0 A classe ResultSet oferece à aplicação a tabela resultante de um Select e mantém 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 à aplicação pegar os dados das colunas da linha corrente através de mensagem getxxx(<cloluna>). XXX é o tipo da coluna <coluna> é o nome da coluna ou sua posição (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");

Permite obter informações sobre o tipo de tabela que resultou o select. Quais os nomes e os tipos das colunas Se a coluna do tipo é numérico com sinal 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)); Outros métodos da interface ResultSet isfirst(): retorna verdadeiro se o curso está posicionado sobre o primeiro registro da tabela resultante islast(): retorna verdadeiro se o curso está posicionado sobre o ultimo registro da tabela resultante next(): posiciona o cursor da tabela sobre o próximo registro.

Transações Uma transação é um conjunto de Statements que são validados no BD com commit ou cancelados com rollbabk Por default, todos os comandos no JDBC são auto-commit. connection.setautocommit(false); // muda o default Statement s = con.createstatement(); try { s.executeupdate("sql statement 1"); s.executeupdate("sql statement 2"); connection.commit(); // valida os 2 updates catch (Exception e) { connection.rollback(); // senão, desfaz os updates

Desenvolvimento de Aplicações em Java Padrões de Projeto e Persistência com DAO Prof. Giuliano Prado de Morais Giglio, M.Sc.

Introdução a Padrões de Projeto Padrões de Projeto foram inicialmente percebidos na área de construção quando foram catalogados permitindo agilizar o processo de construção de prédios e casas. Posteriormente padrões de desenvolvimento de software começaram a ser identificados e catalogados. Hoje contamos com diversos livros para várias situações.

Importância de Padrões A importância desse tipo de técnica é o ganho que temos em desempenho no desenvolvimento de sistemas. Soluções que já foram testadas e comprovadas, isso aumenta a qualidade do software final e permite que analistas troquem informações com um vocabulário similar. Quando alguém diz que usou um certo padrão isso já transmite um conjunto de informações.

Principais Padrões Contamos com diversos padrões: DAO Data Access Object VO Value Object é um objeto do domínio da aplicação MVC Model View Controller permite construir a aplicação de forma modular sem amarrar a camada de apresentação com a parte de negócio

Padrão de Projeto DAO DAO Data Acess Object é uma classe especial que contém todas as informações necessárias para acessar uma ou mais tabelas e criar os objetos relacionados às linhas das tabelas.

Exemplo - DAO Pacote modelo Criação da classe Cliente.java Controla a criação e controle de objetos Cliente. Pacote persistencia Criação da classe Conexao.java Controla a abertura e fechamento da conexão com o banco de dados; Criação da classe ClienteDAO.java Controla a manipulação dos dados de clientes no banco Vários métodos para: Consultar todos clientes; Consultar um cliente específico; Inserir, excluir e atualizar um cliente específico

Criando classe de Conexão public class Conexao { public static Connection getconexao( ){ Connection con = null; try{ Class.forName("com.mysql.jdbc.Driver"); con = DriverManager.getConnection("jdbc:mysql://localhost/livraria", "root", ""); catch (Exception e) { System.out.println("falha na conexão"); return con; public static void fecharconexao(connection conn, Statement stmt, ResultSet rs){ try { if (rs!= null) rs.close( ); if (stmt!= null) stmt.close( ); if (conn!= null) conn.close( ); catch (Exception e) {

Criando classe de Conexão public static void fecharconexao(connection conn){ try { if (conn!= null) conn.close( ); catch (Exception e) { public static void fecharconexao(connection conn, PreparedStatement ps) { try { if (ps!= null) ps.close( ); if (conn!= null) conn.close( ); catch (Exception e) {

Criando classe de Persistência public class ClienteDAO { private Connection conn; public ClienteDAO( ) throws Exception{ try { this.conn = Conexao.getConexao( ); catch( Exception e ) { throw new Exception( "Erro: " + ":\n" + e.getmessage( ) );

Criando classe de Persistência - Método Salvar() - public void salvar(objeto objeto) throws Exception{ PreparedStatement ps = null; Connection conn = null; if (objeto == null) throw new Exception("O valor passado não pode ser nulo"); try { String SQL = "INSERT INTO TABELA (<CAMPO1>, <CAMPO2>,...) values (?,?,?,?)"; conn = Conexao.getConexao(); ps = conn.preparestatement(sql); ps.settipo(1, objeto.getatributo( )); ps.settipo(2, objeto.getatributo( ));... ps.setint(n, objeto.getatributo( )); ps.executeupdate( ); catch (SQLException sqle) { throw new Exception("Erro ao inserir dados "+ sqle); finally { Conexao.fecharConexao(conn,ps);

Criando classe de Persistência - Exemplo Método Salvar() - public void salvar(cliente cliente) throws Exception{ PreparedStatement ps = null; Connection conn = null; if (cliente == null) throw new Exception("O valor passado não pode ser nulo"); try { String SQL = "INSERT INTO clientes (nome, endereco, telefone, estado) values (?,?,?,?)"; conn = Conexao.getConexao(); ps = conn.preparestatement(sql); ps.setstring(1, cliente.getnome( )); ps.setstring(2, cliente.getendereco( )); ps.setstring(3, cliente.gettelefone( )); ps.setint(4, cliente.getestado( )); ps.executeupdate( ); JOptionPane.showMessageDialog(null,"Cliente cadastrado!","concluído",joptionpane.information_message); catch (SQLException sqle) { throw new Exception("Erro ao inserir dados "+ sqle); finally { Conexao.fecharConexao(conn,ps);

Criando classe de Persistência - Método atualizar() - public void atualizar(objeto objeto) throws Exception { PreparedStatement ps = null; Connection conn = null; if (objeto == null) throw new Exception("O valor passado não pode ser nulo"); try { String SQL = "UPDATE TABELA SET CAMPO1=?, " + " CAMPO2=?,..., CAMPON=? " + "where CAMPO_IDENTIFICADOR=?"; conn = this.conn; ps = conn.preparestatement(sql); ps.settipo(1, objeto.getatributo( )); ps.settipo(2, objeto.getatributo( ));... ps.setint(n, objeto.getatributo( )); ps.executeupdate( ); catch (SQLException sqle) { throw new Exception("Erro ao atualizar dados: "+ sqle); finally { Conexao.fecharConexao(conn, ps);

Criando classe de Persistência - Exemplo Método atualizar() - public void atualizar(cliente cliente) throws Exception { PreparedStatement ps = null; Connection conn = null; if (cliente == null) throw new Exception("O valor passado não pode ser nulo"); try { String SQL = "UPDATE clientes SET nome=?, " + " endereco=?, telefone=?, estado=? " + "where cliente_id=?"; conn = this.conn; ps = conn.preparestatement(sql); ps.setstring(1, cliente.getnome( )); ps.setstring(2, cliente.getendereco( )); ps.setstring(3, cliente.gettelefone( )); ps.setint(4, cliente.getestado( )); ps.executeupdate( ); catch (SQLException sqle) { throw new Exception("Erro ao atualizar dados: "+ sqle); finally { Conexao.fecharConexao(conn, ps);

Criando classe de Persistência - Método todosobjetos() - public List todosobjetos( ) throws Exception{ PreparedStatement ps = null; Connection conn = null; ResultSet rs = null; try { conn = this.conn; ps = conn.preparestatement("select * from TABELA"); rs = ps.executequery( ); List<Objetos> list = new ArrayList<Objeto>( ); while( rs.next( ) ) { variavel1 = rs.gettipo( 2 ); variavel2 = rs.gettipo( 3 );... variaveln = rs.gettipo( N-1 ); list.add( new Objeto(variavel1,..., variaveln) ); return list; catch (SQLException sqle) { throw new Exception(sqle); finally { Conexao.fechar(conn, ps, rs);

Criando classe de Persistência - Exemplo Método todosclientes() - public List todosclientes( ) throws Exception{ PreparedStatement ps = null; Connection conn = null; ResultSet rs = null; try { conn = this.conn; ps = conn.preparestatement("select * from clientes"); rs = ps.executequery( ); List<Cliente> list = new ArrayList<Cliente>( ); while( rs.next( ) ) { String nome = rs.getstring( 2 ); String endereco = rs.getstring( 3 ); String telefone = rs.getstring( 4 ); Integer estado = rs.getint( 5 ); list.add( new Cliente(nome,endereco,telefone,estado) ); return list; catch (SQLException sqle) { throw new Exception(sqle); finally { Conexao.fecharConexao(conn, ps, rs);

Criando classe de Persistência - Método procurarobjeto() - public Objeto procurarobjeto(tipo identificador) throws Exception { PreparedStatement ps = null; Connection conn = null; ResultSet rs = null; try { conn = this.conn; ps = conn.preparestatement("select * from TABELA where CAMPO_IDENTIFICADOR=?"); ps.settipo(1, identificador); rs = ps.executequery( ); if(!rs.next( ) ) { throw new Exception( "Não foi encontrado nenhum registro com o ID: " + identificador); variavel1 = rs.gettipo( 2 ); variavel2 = rs.gettipo( 3 );... variaveln = rs.gettipo( N-1 ); return new Objeto(variavel1,..., variaveln); catch (SQLException sqle) { throw new Exception(sqle); finally { Conexao.fechar(conn, ps, rs);

Criando classe de Persistência - Exemplo Método procurarcliente() - public Cliente procurarcliente(integer id) throws Exception { PreparedStatement ps = null; Connection conn = null; ResultSet rs = null; try { conn = this.conn; ps = conn.preparestatement("select * from clientes where cliente_id=?"); ps.setint(1, id); rs = ps.executequery( ); if(!rs.next( ) ) { throw new Exception( "Não foi encontrado nenhum registro com o ID: " + id ); String nome = rs.getstring( 2 ); String endereco = rs.getstring( 3 ); String telefone = rs.getstring( 4 ); Integer estado = rs.getint( 5 ); return new Cliente(nome, endereco, telefone, estado) ; catch (SQLException sqle) { throw new Exception(sqle); finally { Conexao.fechar(conn, ps, rs);

Criando classe de Persistência - Método excluir() - public void excluir(objeto objeto) throws Exception { PreparedStatement ps = null; Connection conn = null; if (objeto == null) throw new Exception("O valor passado não pode ser nulo"); try { conn = this.conn; ps = conn.preparestatement("delete from TABELA where CAMPO_IDENTIFICADOR=?"); ps.settipo(1, objeto.getidobjeto( )); ps.executeupdate( ); catch (SQLException sqle) { throw new Exception("Erro ao excluir dados:" + sqle); finally { Conexao.fecharConexao(conn, ps);

Criando classe de Persistência - Exemplo Método excluir() - public void excluir(cliente cliente) throws Exception { PreparedStatement ps = null; Connection conn = null; if (cliente == null) throw new Exception("O valor passado não pode ser nulo"); try { conn = this.conn; ps = conn.preparestatement("delete from clientes where cliente_id=?"); ps.setint(1, cliente.getidcliente( )); ps.executeupdate( ); catch (SQLException sqle) { throw new Exception("Erro ao excluir dados:" + sqle); finally { Conexao.fecharConexao(conn, ps);

Exemplo do tratamento de Evento de Cadastro de Cliente... String n = tfnome.gettext(); String e = tfend.gettext(); String t = tftel.gettext(); int es = cbox.getselectedindex(); ClienteDAO cli = new ClienteDAO(); cli.salvar(new Cliente(n,e,t,es));...

Exemplo do tratamento de Evento de Consulta a Cliente... int id = Integer.parseInt(JOptionPane.showInputDialog("Digite o código do cliente:")); ClienteDAO cd = new ClienteDAO(); Cliente cli = cd.procurarcliente(id); tfnome.settext(cli.getnome()); tfend.settext(cli.getendereco()); tftel.settext(cli.gettelefone()); cbox.getitemat(cli.getestado());...

Desenvolvimento de Aplicações em Java Implementando o acesso a camada DAO via Swing Prof. Giuliano Prado de Morais Giglio, M.Sc.

Tela Inicial Habilitado Desabilitados

Botão Cadastrar String nome = tfnome.gettext(); String end = tfendereco.gettext(); String tel = tftel.gettext(); String cpf = tfcpf.gettext();... Cliente cliente = new Cliente(nome, end, tel, cpf,... ); try { dao = new ClienteDAO( ); dao.salvar(cliente); Criar variável global catch (Exception ex) { atualizartabela();

public void atualizartabela() { limpartabela(); List<Cliente> list = new ArrayList<Cliente>(); try { dao = new ClienteDAO(); list = dao.todosautores(); DefaultTableModel modelo = (DefaultTableModel) jtable1.getmodel(); for(int i=0; i<list.size(); i++) { Cliente c = list.get(i); modelo.addrow(new Object[ ] {c.getidcliente(), c.getnome(), c.getendereco(),... ); catch (Exception ex) {

public void limpartabela() { DefaultTableModel modelo = (DefaultTableModel) jtable1.getmodel(); for (int i = jtable1.getrowcount() - 1; i >= 0; --i) { modelo.removerow(i);

Quando abrir a tela private void formwindowopened (java.awt.event.windowevent evt) { atualizartabela();

Tela Inicial em Execução Valores nos campos Desabilitado Linha Selecionada Habilitados

Clicando na Tabela private void jtable1mousepressed(java.awt.event.mouseevent evt) { int linha = jtable1.getselectedrow(); // pega o indice da linha selecionada tfcodigo.settext( Integer.toString( (Integer) jtable1.getmodel().getvalueat(linha, 0)) ); tfnome.settext( (String)jTable1.getModel().getValueAt(linha, 1) ); btatualizar.setenabled(true); btremover.setenabled(true); btcadastrar.setenabled(false); btnovo.setenabled(true);

Botão Novo private void btnovoactionperformed (java.awt.event.actionevent evt) { btatualizar.setenabled(false); btremover.setenabled(false); btcadastrar.setenabled(true); tfcodigo.settext( ); tfnome.settext( );... tfnome.requestfocus(); Limpando os Campos