JavaServer Faces JSF



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

Programação Orientada a Objetos JDBC Java Database Connectivity

Integrando Java com Banco de Dados

Drive MySql de conexão para Eclipse

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

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

Leonardo Gresta Paulino Murta

JDBC. Java DataBase Connectivity

JDBC Java Database Connectivity

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

JAVA COM BANCO DE DADOS PROFESSORA DANIELA PIRES

Desenvolvimento Web TCC Turma A-1

Java na WEB Banco de Dados

JDBC. Prof. Márcio Bueno

Especialização em web com interfaces ricas

Autenticação e Autorização

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

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

Acesso a Bancos de Dados em Java (JDBC)

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

Programação com 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

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

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

Java e Conexão 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

Aula 1 Acesso a Banco de Dados

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

Acessando dados em Java com JDBC

Figura 1. A Classe Java

Programação em Rede JDBC

Programação Orientada a Objetos II

JDBC Acessando Banco de Dados

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

Desenvolvimento de Sistemas de Informação

Linguagens de Programação

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

Banco de Dados. Sérgio Luiz Ruivace Cerqueira

Listando itens em ComboBox e gravando os dados no Banco de Dados MySQL.

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

Java na Web. Aplicações Web

C# - Conexão com MySQL

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

Padrões de Projeto e Persistência com DAO

Acesso a banco de dados

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

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

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

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

JAVA JDBC Java Database Connectivity

Unidade 9: Middleware JDBC para Criação de Beans

Conectividade de Banco de Dados Java JDBC

Trabalhando com conexão ao banco de dados MySQL no Lazarus. Prof. Vitor H. Migoto de Gouvêa Colégio IDESA 2011

TUTORIAL DE INTRODUÇÃO AO CEWOLF

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

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

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

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

Orientação a Objetos

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

8. Outros tipos de Transação (Modo de Transação de Autoconfirmação e Modo Implícito)

English Português. By erickalves 25 Julho, :08. Devido à política (#) de segurança. Encontrar Blogs Crie o seu blog de graça Ganhe prêmios

DATA ACCESS OBJECT (DAO)

Persistência Java para Web com MySQL

Java Beans e Servlets

Transações Seguras em Bancos de Dados (MySQL)

Aplicativos Web com Orientação a Objetos

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

Aula 4 JDBC - Java Database Connectivity

Java - Conexão ao Banco de Dados usando JDBC

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

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

Prática Sobre Servlets e JSP

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

Acessando bancos de dados com o JDBC

Faculdades Network Bacharelado em Sistemas de Informação Tópicos Avançados. Aulas 25 e 26 Exemplo de Aplicação usando JSP e MySQL

Java com Banco de Dados Posgree

Exercícios de fixação: Listas

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

J2EE. Exemplo completo Utilização Servlet. Instrutor HEngholmJr

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.

Desenvolvimento Web com Struts

Java 2 Standard Edition Fundamentos de

Persistência de Classes em Tabelas de Banco de Dados

Faculdades Integradas Santa Cruz. Tutorial de Java MVC WEB Criando uma tela de Login com Banco de Dados

Exibir relatórios gerados pelo Jasper Report em Flex

Prof. Carlos Majer Aplicações Corporativas UNICID

Banco de Dados. Prof. Leonardo Barreto Campos 1

Programação Orientada a Objetos (DPADF 0063)

Programação para Android. Aula 08: Persistência de dados SQL

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS ARMAZENAMENTO EM BD NO DM. Prof. Angelo Augusto Frozza, M.Sc.

PHP INTEGRAÇÃO COM MYSQL PARTE 1

Transcrição:

JavaServer Faces JSF Fernando Freitas Costa Bacharel em Sistemas de Informação Especialista em Gestão e Docência Universitária blog.fimes.edu.br/fernando nando@fimes.edu.br

JavaServer Faces e Banco de Dados

Connection Para trabalhar com Banco de Dados (MySQL) em JSF, é necessário primeiramente ter um objeto connection, que pode ser obtido com a sintaxe a seguir: Connection conn = DriverManager.getConnection( jdbc:mysql://url:porta/nomebanco, usuario, senha );

Statement Depois de obter o objeto connection, é necessário criar um objeto da interface java.sql.statement, que permitirá o envio dos comandos SQL ao banco de dados. Statement stmt = conn.createstatement(); A interface java.sql.statement possui entre outros, os métodos: executeupdate envia comandos SQL que atualizam o banco de dados. Retorna um inteiro com o número de registros afetados. Ex: int x = stmt.executeupdate( insert into usuario (id, nome, senha) values(1, paulo, 123 ) ); executequery envia comandos SQL que consultam o banco de dados. Retorna um ResultSet. Ex: ResultSet rs = stmt.executequery( select * from usuario );

ResultSet Um ResultSet é como uma tabela de dados que representa um conjunto de registros obtidos de um banco de dados, geralmente pela execução de consultas em um objeto statement. A interface java.sql.resultset possui alguns métodos de navegação entre os registros obtidos: first() - posiciona o cursor no primeiro registro do objeto ResultSet. last() - posiciona o cursor no último registro do objeto ResultSet. next() -posiciona o cursor no próximo registro do objeto ResultSet. Retorna false se não houver próximo. previous() - posiciona o cursor no registro anterior do objeto ResultSet. etc...

ResultSet Para obter os dados de um registro, devemos chamar um dos seguintes métodos da interface java.sql.resultset: getstring() Obtém informações do tipo String; getint() Obtém informações do tipo Inteiro; getdouble() Obtém informações do tipo double E assim sucessivamente de acordo com o tipo de dado a ser obtido. Exemplo: while(rs.next()){ Integer id = rs.getint( id ); String nome = rs.getstring( nome ); String senha = rs.getstring( senha ); }

Fechando Conexões Após terminar o acesso ao banco de dados, é sempre bom fechar a conexão. Para garantir que ela seja fechada em qualquer situação, mesmo em caso de exceções, coloque o método close() dentro de um bloco try/catch/finally. Uma boa prática neste ponto, é criar blocos try separados para tratar a conexão e para tratar as demais exceções. Ex: try{ Connection conn = DriverManager.getConnection( jdbc:mysql://url:porta/nomebanco, usuario, senha ); try{ Statement stmt = conn.createstatement(); int x = stmt.executeupdate( insert into usuario (id, nome, senha) values(1, paulo, 123 ) ); }finally{ conn.close(); } }catch(sqlexception e){... } Outra opção melhor ainda, é definir seu método para lançar SQLException e deixar que o chamador trate estas exceções.

PreparedStatement Quando a aplicação precisa emitir várias vezes o mesmo comando SQL apenas com valores diferentes, uma opção mais rápida para trabalhar com o banco de dados é fazer uso da interface java.sql.preparedstatement. Um objeto PreparedStatement solicita ao banco que uma query seja précompilada. Feito isto, ela é mantida e reutilizada sempre que ela for submetida novamente. Outra boa razão para trabalhar com esta interface é evitar que entradas de usuário se transformem em SQL Injection (ataque a uma aplicação via código SQL). O primeiro passo é criar um objeto da interface java.sql.preparedstatement, que permitirá o envio dos comandos SQL ao banco de dados. PreparedStatement pstmt = conn.preparedstatement( instrução sql com parâmetros );

PreparedStatement Para aceitar valores diferentes o objeto PreparedStatement trabalha com o uso de parâmetros (representados pelo ponto de interrogação), que são definidos no momento da execução. Ex: PreparedStatement pstmt = conn.preparedstatement( select * from usuario where nome like? ); pstmt.setstring(1, fernando ); ResultSet rs = pstmt.executequery(); Para definir os valores de cada parâmetro a interface java.sql.preparedstatement fornece os métodos: setstring() Define parâmetros do tipo String; setint() Define parâmetros do tipo Integer/int. setdouble() Define parâmetros do tipo Double/double. E assim sucessivamente, de acordo com o tipo do parâmetro a ser definido. Estes métodos recebem dois parâmetros: O primeiro é um número referente a qual ponto de interrogação você está se referindo (1º, 2º, 3º,...). O segundo é o valor que deve ser atribuído ao parâmetro.

PreparedStatement Assim como a interface java.sql.statement, a interface java.sql.preparedstatement também possui entre outros, os métodos: executeupdate envia comandos SQL que atualizam o banco de dados. Retorna um inteiro com o número de registros afetados. Ex: PreparedStatement pstmt = conn.preparedstatement( insert into usuario (id, nome, senha) values (?,?,?) ); pstmt.setint(1, 1); pstmt.setstring(2, fernando ); pstmt.setstring(3, 123 ); Integer resultado = pstmt.executeupdate(); executequery envia comandos SQL que consultam o banco de dados. Retorna um ResultSet. Ex: PreparedStatement pstmt = conn.preparedstatement( select * from usuario where nome like? ); pstmt.setstring(1, fernando ); ResultSet rs = pstmt.executequery();

Transações Ao trabalhar com banco de dados, pode ser necessário utilizar o conceito de transações para confirmar ou reverter uma ou mais comandos SQL. O uso de transações é bom por duas razões: integridade e acesso concorrente. Por padrão, uma conexão com o banco trabalha no modo autocommit, ou seja, confirma cada comando separadamente. Portanto, ao trabalhar com transações, o primeiro passo é desativar este padrão. Ex: conn.setautocommit(false);

Transações Se durante a transação tudo correr bem, deve-se efetuar um commit ao final do processo. Ex: conn.commit(); Caso contrário, deve-se efetuar um rollback na transação. Ex: conn.rollback (); O exemplo a seguir mostra como lidar com transações: conn.setautocommit(false); boolean commited = false; try{ //operações no banco de dados conn.commit(); commited = true; }finally{ if (!commited) conn.rollback(); }

Exemplo Prático

JSF e Banco de Dados Crie um novo Dinamic Web Project com o nome ExemploBD01; Em seguida, devemos fazer estes 6 passos. Criação do banco de dados; Criação das tabelas; Criação da classe DAO; Criação da classe Bean; Mapeamento da classe Bean; Criação da página JSF.

Passos 1 e 2 Criação do Banco e da tabela create database jsf_bd; use jsf_bd; create table usuario( id integer not null auto_increment, nome varchar(50) not null, email varchar(50), fone varchar(13) not null, primary key (id) ) engine = InnoDB;

Passo 3 Criação da classe Bean Crie o pacote bean. Crie uma classe chamada UsuarioBean. Ela será o meio termo entre o dao e a página JSF. package bean; import javax.faces.bean.managedbean; import dao.usuariodao; @ManagedBean public class UsuarioBean { private Integer id; private String nome, fone, email; } public Integer getid() { return id; } public void setid(integer id) { this.id = id; } public String getnome() { return nome; } public void setnome(string nome) { this.nome = nome; } public String getfone() { return fone; } public void setfone(string fone) { this.fone = fone; } public String getemail() { return email; } public void setemail(string email) { this.email = email; } public String salvar(){ UsuarioDAO udao = new UsuarioDAO(); int resultado = udao.salvar(this); if(resultado > 0){ this.nome = ""; this.fone = ""; this.email = ""; } return null; }

Passo 4 Criação da classe DAO Crie um pacote dao Crie uma classe chamada UsuarioDAO. Ela será responsável por lidar diretamente com o BD. Vejamos um exemplo simples: package dao; import java.sql.connection; import java.sql.drivermanager; import java.sql.sqlexception; import java.sql.statement; import javax.faces.application.facesmessage; import javax.faces.context.facescontext; import bean.usuariobean; public class UsuarioDAO { public int salvar(usuariobean ub) { int resultado = 0; FacesContext ctx = FacesContext.getCurrentInstance(); try { Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jsf_bd", "root", "vertrigo"); try { Statement stmt = conn.createstatement(); resultado = stmt.executeupdate("insert into usuario (nome, email, fone) values ('"+ ub.getnome()+ "', '"+ ub.getemail()+ "', '" + ub.getfone() + "')"); ctx.addmessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Cadastro realizado com sucesso", "O cadastro foi realizado com sucesso")); } finally { conn.close(); } } catch (ClassNotFoundException cnfex) { ctx.addmessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro: Classe não encontrada", "A classe com.mysql.jdbc.driver não foi encontrada. Detalhe: "+ cnfex.getmessage())); } catch (SQLException sqlex) { ctx.addmessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Ocorreu um erro ao salvar", "Ocorreu um erro ao executar a instrução SQL. Detalhe: "+ sqlex.getmessage())); } return resultado; } }

Passo 5 Criação das páginas JSF Crie uma nova página chamada index.xhtml <?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1- transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html"> <head> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" /> <title>insert title here</title> </head> <body> <h:form> <h:messages errorstyle="color:red" infostyle="color:green" showdetail="true"/> <h:panelgrid columns="3"> <h:outputlabel value="nome:" for="nome"/> <h:inputtext id="nome" value="#{usuariobean.nome}" required="true" requiredmessage="informe o nome"/> <h:message for="nome"/> <h:outputlabel value="e-mail:" for="email"/> <h:inputtext id="email" value="#{usuariobean.email}"/> <h:message for="email"/> <h:outputlabel value="fone:" for="fone"/> <h:inputtext id="fone" value="#{usuariobean.fone}" required="true" requiredmessage="informe o telefone"/> <h:message for="fone"/> <h:commandbutton action="#{usuariobean.salvar()}" value="salvar" /> </h:panelgrid> </h:form> </body> </html>

Tente executar... Funcionou?

Por quê não funcionou? Não funcionou porque o Tomcat precisa que a classe com.mysql.jdbc.driver seja informada. Para isto, você vai precisar do Conector MySQL que pode ser obtido no endereço: http://dev.mysql.com/downloads/connector/j/ Após baixá-lo, descompacte-o e copie o arquivo mysqlconnector-java-5.x.xx-bin.jar (onde o x refere-se as subversões do conector MySQL), para dentro da pasta WebContent/WEB-INF/lib Pronto, agora sim, execute o arquivo.

Exercícios 1. Com base no conteúdo passado, faça uma cópia deste projeto e salve com o nome ExemploBD02. No projeto ExemploBD02, faça as alterações para que ele fique mais seguro, ou seja, utilize PreparedStatement no lugar das Statement utilizada. 2. Em seguida, crie uma página sucesso.xhtml que: Deverá ser exibida em caso de sucesso ao cadastrar. Deve exibir os dados recém cadastrados. (Atenção, estes dados devem ser consultados no banco) Coloque nela um botão Voltar.