SlideShare una empresa de Scribd logo
1 de 8
Descargar para leer sin conexión
J550

Integração com
Bancos de Dados
Helder da Rocha (helder@acm.org)
www.argonavis.com.br

1
Objetivos
Este módulo apresenta estratégias para conectar
servlets com a camada de dados usando um DAO Data Access Object
Um DAO é a alternativa ideal porque isola o servlet
do conhecimento dos detalhes da implementação de
banco de dados usada
Pode-se trocar a implementação por outra (usando XML,
arquivos, outros bancos, etc.)

Para escrever um DAO para um banco relacional,
será necessário usar a interface JDBC, mas o servlet
não terá nenhuma linha de código JDBC
2
Acesso a bancos de dados
Servlets são aplicações Java e, como qualquer outra aplicação
Java, podem usar JDBC e integrar-se com um banco de dados
relacional
Pode-se usar java.sql.DriverManager e obter a conexão da
forma tradicional
Class.forName("nome.do.Driver");
Connection con =
DriverManager.getConnection("url", "nm", "ps");

Pode-se obter as conexões de um pool de conexões através
de javax.sql.DataSource via JNDI (J2EE)
DataSource ds = (DataSource)ctx.lookup("jbdc/Banco");
Connection con = ds.getConnection();

3
Servlet que faz um SELECT em banco
Para tornar um servlet capaz de acessar bancos de dados,
basta incluir código JDBC dentro dele
import java.sql.*; // ... outros pacotes
public class JDBCServlet extends HttpServlet {
String jdbcURL;
String driverClass;
String nome = ""; String senha = ""; Connection con;
public void init() {
// ... obter os dados via initParameter()
try {
Class.forName(driverClass);
con = DriverManager.getConnection(jdbcURL, nome, senha);
} catch (Exception e) { throw new UnavailableException(e); }
}
public void doGet(... request, ... response) ... {
try { // ... codigo de inicializacao do response
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM nomes");
out.println("<table border>");
while(rs.next()) {
out.println("<tr><td>"+rs.getString("nome")+"</tr></td>");
} // ... resto do codigo
} catch (SQLException e) {
throw new ServletException(e);
}
}
}

4
Servlet que usa DAO
Misturar código de servlet com banco de dados não é uma
boa idéia. O ideal é disponibilizar uma interface
independente de banco para o servlet
public class DataAccessServlet extends HttpServlet {
DataAccessDAO dao;
public void init() {
dao = JDBCDataAccessDAO.getInstance();
}
public void doGet(... request, ... response) ... {
try { // ... codigo de inicializacao do response
String[] nomes = dao.listarTodosOsNomes();
out.println("<table border>");
for(int i = 0; i < nomes.length; i++) {
out.println("<tr><td>"+nomes[i]+"</tr></td>");
} // ... resto do codigo
} catch (AcessoException e) {
throw new ServletException(e);
}
}
}

5
Exemplo de DAO
O DAO é um objeto que isola o servlet da camada de dados,
deixando-o à vontade para mudar a implementação
Faça-o sempre implementar uma interface Java
import java.sql.*; // ... outros pacotes
public class JDBCDataAccessDAO implements DataAccessDAO {
// ...
public void JDBCDataAccessDAO() {
try {
Class.forName(driverClass);
con = DriverManager.getConnection(jdbcURL, nome, senha);
} catch (Exception e) { ... }
}
public String[] listarTodosOsNomes() throws AcessoException {
try {
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM nomes");
List nomesList = new ArrayList();
while(rs.next()) {
nomesList.add(rs.getString("nome"));
}
return (String[]) nomesList.toArray(new String[nomesList.size()];
} catch (SQLException e) {
throw new AcessoException(e);
}
}
}

6
Exercicio
1. Crie um DAO para isolar a gravação de produtos
(atualmente gravados em arquivo) do resto da aplicação
Todo o conhecimento sobre gravação deve ficar no DAO
Use uma interface ou classe abstrata ProdutosDAO e implemente o
DAO em uma classe ArquivoProdutosDAO

2. Crie uma tabela Produto no seu banco de dados e
implemente as funções do DAO usando JDBC
Crie uma classe JDBCProdutosDAO
Passe os dados de configuração do banco como parâmetros de
contexto e recupere-os no seu init()

3. Implemente, na sua aplicação, uma opção administrativa
para remover produtos e outra para editar produtos
Crie as novas funções no DAO e implemente-as com JDBC

4. Implemente a função adicionar autor e adicionar editor do
DAO da aplicação Biblioteca disponível no diretório cap08
7
helder@ibpinet.net

argonavis.com.br
8

Más contenido relacionado

La actualidad más candente

Introdução ao JPA com Hibernate
Introdução ao JPA com HibernateIntrodução ao JPA com Hibernate
Introdução ao JPA com HibernateDanilo Braga
 
Jdbc, JAVA DATABASE CONNECTIVITY
Jdbc, JAVA DATABASE CONNECTIVITYJdbc, JAVA DATABASE CONNECTIVITY
Jdbc, JAVA DATABASE CONNECTIVITYraquelcarsi
 
Minicurso de Segurança em Java EE 7
Minicurso de Segurança em Java EE 7Minicurso de Segurança em Java EE 7
Minicurso de Segurança em Java EE 7Helder da Rocha
 
Introdução a JPA e Hibernate - TDC 2012
Introdução a JPA e Hibernate - TDC 2012Introdução a JPA e Hibernate - TDC 2012
Introdução a JPA e Hibernate - TDC 2012Frederico Maia Arantes
 
Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Helder da Rocha
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Rafael Benevides
 
Introdução a JPA (2010)
Introdução a JPA (2010)Introdução a JPA (2010)
Introdução a JPA (2010)Helder da Rocha
 
Como construir aplicações gráficas e applets
Como construir aplicações gráficas e appletsComo construir aplicações gráficas e applets
Como construir aplicações gráficas e appletsDenis L Presciliano
 
Trabalho teorico de Linguagem de Programação
Trabalho teorico de Linguagem de ProgramaçãoTrabalho teorico de Linguagem de Programação
Trabalho teorico de Linguagem de Programaçãocarlosveiga
 
API de segurança do Java EE 8
API de segurança do Java EE 8API de segurança do Java EE 8
API de segurança do Java EE 8Helder da Rocha
 
Java EE 6 JPA 2.0, EJB 3.1 e CDI 1.0
Java EE 6 JPA 2.0, EJB 3.1 e CDI 1.0Java EE 6 JPA 2.0, EJB 3.1 e CDI 1.0
Java EE 6 JPA 2.0, EJB 3.1 e CDI 1.0Elvis Rocha
 
Java Web 5 - JSP, Expression Language e Taglibs
Java Web 5 - JSP, Expression Language e TaglibsJava Web 5 - JSP, Expression Language e Taglibs
Java Web 5 - JSP, Expression Language e TaglibsEduardo Mendes
 
Processos iniciais do mapeamento OR
Processos iniciais do mapeamento ORProcessos iniciais do mapeamento OR
Processos iniciais do mapeamento ORNécio de Lima Veras
 
Java Web 4 - Servlets e JSP 2
Java Web 4 - Servlets e JSP 2Java Web 4 - Servlets e JSP 2
Java Web 4 - Servlets e JSP 2Eduardo Mendes
 

La actualidad más candente (19)

Introdução ao JPA com Hibernate
Introdução ao JPA com HibernateIntrodução ao JPA com Hibernate
Introdução ao JPA com Hibernate
 
Jdbc, JAVA DATABASE CONNECTIVITY
Jdbc, JAVA DATABASE CONNECTIVITYJdbc, JAVA DATABASE CONNECTIVITY
Jdbc, JAVA DATABASE CONNECTIVITY
 
Minicurso de Segurança em Java EE 7
Minicurso de Segurança em Java EE 7Minicurso de Segurança em Java EE 7
Minicurso de Segurança em Java EE 7
 
Introdução a JPA e Hibernate - TDC 2012
Introdução a JPA e Hibernate - TDC 2012Introdução a JPA e Hibernate - TDC 2012
Introdução a JPA e Hibernate - TDC 2012
 
Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007
 
Jdbc
JdbcJdbc
Jdbc
 
Spring Data Jpa
Spring Data JpaSpring Data Jpa
Spring Data Jpa
 
Fundamentos de Objetos Remotos
Fundamentos de Objetos RemotosFundamentos de Objetos Remotos
Fundamentos de Objetos Remotos
 
Introdução a JPA (2010)
Introdução a JPA (2010)Introdução a JPA (2010)
Introdução a JPA (2010)
 
Como construir aplicações gráficas e applets
Como construir aplicações gráficas e appletsComo construir aplicações gráficas e applets
Como construir aplicações gráficas e applets
 
Trabalho teorico de Linguagem de Programação
Trabalho teorico de Linguagem de ProgramaçãoTrabalho teorico de Linguagem de Programação
Trabalho teorico de Linguagem de Programação
 
Banco de Dados - Android
Banco de Dados - AndroidBanco de Dados - Android
Banco de Dados - Android
 
J530 14 xdoclet
J530 14 xdocletJ530 14 xdoclet
J530 14 xdoclet
 
API de segurança do Java EE 8
API de segurança do Java EE 8API de segurança do Java EE 8
API de segurança do Java EE 8
 
Java EE 6 JPA 2.0, EJB 3.1 e CDI 1.0
Java EE 6 JPA 2.0, EJB 3.1 e CDI 1.0Java EE 6 JPA 2.0, EJB 3.1 e CDI 1.0
Java EE 6 JPA 2.0, EJB 3.1 e CDI 1.0
 
Java Web 5 - JSP, Expression Language e Taglibs
Java Web 5 - JSP, Expression Language e TaglibsJava Web 5 - JSP, Expression Language e Taglibs
Java Web 5 - JSP, Expression Language e Taglibs
 
Processos iniciais do mapeamento OR
Processos iniciais do mapeamento ORProcessos iniciais do mapeamento OR
Processos iniciais do mapeamento OR
 
Java Web 4 - Servlets e JSP 2
Java Web 4 - Servlets e JSP 2Java Web 4 - Servlets e JSP 2
Java Web 4 - Servlets e JSP 2
 

Destacado (7)

Aula 02 Primeiro Cod Java
Aula 02   Primeiro Cod JavaAula 02   Primeiro Cod Java
Aula 02 Primeiro Cod Java
 
J2EE e Datasources
J2EE e DatasourcesJ2EE e Datasources
J2EE e Datasources
 
Segurança e Controle de errros
Segurança e Controle de errrosSegurança e Controle de errros
Segurança e Controle de errros
 
Contextos
ContextosContextos
Contextos
 
Como construir aplicações gráficas e applets
Como construir aplicações gráficas e appletsComo construir aplicações gráficas e applets
Como construir aplicações gráficas e applets
 
Fundamentos de JDBC
Fundamentos de JDBCFundamentos de JDBC
Fundamentos de JDBC
 
Funmentos de Objetos Remotos
Funmentos de Objetos RemotosFunmentos de Objetos Remotos
Funmentos de Objetos Remotos
 

Similar a Integração com Banco de Dados

Similar a Integração com Banco de Dados (20)

Fundamentos de JDBC
Fundamentos de JDBCFundamentos de JDBC
Fundamentos de JDBC
 
Ado
AdoAdo
Ado
 
Java 16 Jdbc
Java 16 JdbcJava 16 Jdbc
Java 16 Jdbc
 
Conectando seu banco de dados usando jdbc
Conectando seu banco de dados usando jdbcConectando seu banco de dados usando jdbc
Conectando seu banco de dados usando jdbc
 
Dao
DaoDao
Dao
 
Silo.tips utilizando os-componentes-da-paleta-dbexpress-para-acesso-ao-banco-...
Silo.tips utilizando os-componentes-da-paleta-dbexpress-para-acesso-ao-banco-...Silo.tips utilizando os-componentes-da-paleta-dbexpress-para-acesso-ao-banco-...
Silo.tips utilizando os-componentes-da-paleta-dbexpress-para-acesso-ao-banco-...
 
05 - Acesso e Manipulação de Dados através de Classes do ADO.NET
05 - Acesso e Manipulação de Dados através de Classes do ADO.NET05 - Acesso e Manipulação de Dados através de Classes do ADO.NET
05 - Acesso e Manipulação de Dados através de Classes do ADO.NET
 
Conceitos de Java Web
Conceitos de Java WebConceitos de Java Web
Conceitos de Java Web
 
Apostila: Curso de java III
Apostila: Curso de java IIIApostila: Curso de java III
Apostila: Curso de java III
 
Curso de Java (Parte 5)
Curso de Java (Parte 5)Curso de Java (Parte 5)
Curso de Java (Parte 5)
 
Odi tutorial glossário e termos técnicos
Odi tutorial   glossário e termos técnicosOdi tutorial   glossário e termos técnicos
Odi tutorial glossário e termos técnicos
 
JDBC
JDBCJDBC
JDBC
 
Orm android
Orm androidOrm android
Orm android
 
Ado.net
Ado.netAdo.net
Ado.net
 
2006 - ADONET.ppt
2006 - ADONET.ppt2006 - ADONET.ppt
2006 - ADONET.ppt
 
Aula1
Aula1Aula1
Aula1
 
Data accesss conect
Data accesss conectData accesss conect
Data accesss conect
 
Dao
DaoDao
Dao
 
Java13
Java13Java13
Java13
 
Curso De Hibernate 3
Curso De Hibernate 3Curso De Hibernate 3
Curso De Hibernate 3
 

Más de Denis L Presciliano

Coleções Propriedade, Resources e Strings
Coleções Propriedade, Resources e StringsColeções Propriedade, Resources e Strings
Coleções Propriedade, Resources e StringsDenis L Presciliano
 
Funcamentos de Programação Concorrente
Funcamentos de Programação ConcorrenteFuncamentos de Programação Concorrente
Funcamentos de Programação ConcorrenteDenis L Presciliano
 
Reuso com Herança e Composição
Reuso com Herança e ComposiçãoReuso com Herança e Composição
Reuso com Herança e ComposiçãoDenis L Presciliano
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntDenis L Presciliano
 
Tipos, literais, operadoes e controle de fluxo
Tipos, literais, operadoes e controle de fluxoTipos, literais, operadoes e controle de fluxo
Tipos, literais, operadoes e controle de fluxoDenis L Presciliano
 
Como usar a documentação da API Java 2
Como usar a documentação da API Java 2Como usar a documentação da API Java 2
Como usar a documentação da API Java 2Denis L Presciliano
 
Configuração do ambiente JEdit + Ant
Configuração do ambiente JEdit + AntConfiguração do ambiente JEdit + Ant
Configuração do ambiente JEdit + AntDenis L Presciliano
 
Programação Orientada a objetos em Java
Programação Orientada a objetos em JavaProgramação Orientada a objetos em Java
Programação Orientada a objetos em JavaDenis L Presciliano
 
Autenticação e Controle de Acesso
Autenticação e Controle de AcessoAutenticação e Controle de Acesso
Autenticação e Controle de AcessoDenis L Presciliano
 

Más de Denis L Presciliano (20)

Classes internas
Classes internasClasses internas
Classes internas
 
Entrada e Saída
Entrada e SaídaEntrada e Saída
Entrada e Saída
 
Coleções Propriedade, Resources e Strings
Coleções Propriedade, Resources e StringsColeções Propriedade, Resources e Strings
Coleções Propriedade, Resources e Strings
 
Funcamentos de Programação Concorrente
Funcamentos de Programação ConcorrenteFuncamentos de Programação Concorrente
Funcamentos de Programação Concorrente
 
Testes de Unidade com JUnit
Testes de Unidade com JUnitTestes de Unidade com JUnit
Testes de Unidade com JUnit
 
Erros, exceções e asserções
Erros, exceções e asserçõesErros, exceções e asserções
Erros, exceções e asserções
 
Interfaces e Porlimosfismo
Interfaces e PorlimosfismoInterfaces e Porlimosfismo
Interfaces e Porlimosfismo
 
Reuso com Herança e Composição
Reuso com Herança e ComposiçãoReuso com Herança e Composição
Reuso com Herança e Composição
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache Ant
 
Pacotes e Encapsulamento
Pacotes e EncapsulamentoPacotes e Encapsulamento
Pacotes e Encapsulamento
 
Como criar classes e objetos
Como criar classes e objetosComo criar classes e objetos
Como criar classes e objetos
 
Tipos, literais, operadoes e controle de fluxo
Tipos, literais, operadoes e controle de fluxoTipos, literais, operadoes e controle de fluxo
Tipos, literais, operadoes e controle de fluxo
 
Como usar a documentação da API Java 2
Como usar a documentação da API Java 2Como usar a documentação da API Java 2
Como usar a documentação da API Java 2
 
Configuração do ambiente JEdit + Ant
Configuração do ambiente JEdit + AntConfiguração do ambiente JEdit + Ant
Configuração do ambiente JEdit + Ant
 
Programação Orientada a objetos em Java
Programação Orientada a objetos em JavaProgramação Orientada a objetos em Java
Programação Orientada a objetos em Java
 
Introdução a tecnologia Java
Introdução a tecnologia JavaIntrodução a tecnologia Java
Introdução a tecnologia Java
 
Fundamentos de Sockets
Fundamentos de SocketsFundamentos de Sockets
Fundamentos de Sockets
 
J530 15 workshop
J530 15 workshopJ530 15 workshop
J530 15 workshop
 
Autenticação e Controle de Acesso
Autenticação e Controle de AcessoAutenticação e Controle de Acesso
Autenticação e Controle de Acesso
 
J530 12 transactions
J530 12 transactionsJ530 12 transactions
J530 12 transactions
 

Integração com Banco de Dados

  • 1. J550 Integração com Bancos de Dados Helder da Rocha (helder@acm.org) www.argonavis.com.br 1
  • 2. Objetivos Este módulo apresenta estratégias para conectar servlets com a camada de dados usando um DAO Data Access Object Um DAO é a alternativa ideal porque isola o servlet do conhecimento dos detalhes da implementação de banco de dados usada Pode-se trocar a implementação por outra (usando XML, arquivos, outros bancos, etc.) Para escrever um DAO para um banco relacional, será necessário usar a interface JDBC, mas o servlet não terá nenhuma linha de código JDBC 2
  • 3. Acesso a bancos de dados Servlets são aplicações Java e, como qualquer outra aplicação Java, podem usar JDBC e integrar-se com um banco de dados relacional Pode-se usar java.sql.DriverManager e obter a conexão da forma tradicional Class.forName("nome.do.Driver"); Connection con = DriverManager.getConnection("url", "nm", "ps"); Pode-se obter as conexões de um pool de conexões através de javax.sql.DataSource via JNDI (J2EE) DataSource ds = (DataSource)ctx.lookup("jbdc/Banco"); Connection con = ds.getConnection(); 3
  • 4. Servlet que faz um SELECT em banco Para tornar um servlet capaz de acessar bancos de dados, basta incluir código JDBC dentro dele import java.sql.*; // ... outros pacotes public class JDBCServlet extends HttpServlet { String jdbcURL; String driverClass; String nome = ""; String senha = ""; Connection con; public void init() { // ... obter os dados via initParameter() try { Class.forName(driverClass); con = DriverManager.getConnection(jdbcURL, nome, senha); } catch (Exception e) { throw new UnavailableException(e); } } public void doGet(... request, ... response) ... { try { // ... codigo de inicializacao do response Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM nomes"); out.println("<table border>"); while(rs.next()) { out.println("<tr><td>"+rs.getString("nome")+"</tr></td>"); } // ... resto do codigo } catch (SQLException e) { throw new ServletException(e); } } } 4
  • 5. Servlet que usa DAO Misturar código de servlet com banco de dados não é uma boa idéia. O ideal é disponibilizar uma interface independente de banco para o servlet public class DataAccessServlet extends HttpServlet { DataAccessDAO dao; public void init() { dao = JDBCDataAccessDAO.getInstance(); } public void doGet(... request, ... response) ... { try { // ... codigo de inicializacao do response String[] nomes = dao.listarTodosOsNomes(); out.println("<table border>"); for(int i = 0; i < nomes.length; i++) { out.println("<tr><td>"+nomes[i]+"</tr></td>"); } // ... resto do codigo } catch (AcessoException e) { throw new ServletException(e); } } } 5
  • 6. Exemplo de DAO O DAO é um objeto que isola o servlet da camada de dados, deixando-o à vontade para mudar a implementação Faça-o sempre implementar uma interface Java import java.sql.*; // ... outros pacotes public class JDBCDataAccessDAO implements DataAccessDAO { // ... public void JDBCDataAccessDAO() { try { Class.forName(driverClass); con = DriverManager.getConnection(jdbcURL, nome, senha); } catch (Exception e) { ... } } public String[] listarTodosOsNomes() throws AcessoException { try { Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM nomes"); List nomesList = new ArrayList(); while(rs.next()) { nomesList.add(rs.getString("nome")); } return (String[]) nomesList.toArray(new String[nomesList.size()]; } catch (SQLException e) { throw new AcessoException(e); } } } 6
  • 7. Exercicio 1. Crie um DAO para isolar a gravação de produtos (atualmente gravados em arquivo) do resto da aplicação Todo o conhecimento sobre gravação deve ficar no DAO Use uma interface ou classe abstrata ProdutosDAO e implemente o DAO em uma classe ArquivoProdutosDAO 2. Crie uma tabela Produto no seu banco de dados e implemente as funções do DAO usando JDBC Crie uma classe JDBCProdutosDAO Passe os dados de configuração do banco como parâmetros de contexto e recupere-os no seu init() 3. Implemente, na sua aplicação, uma opção administrativa para remover produtos e outra para editar produtos Crie as novas funções no DAO e implemente-as com JDBC 4. Implemente a função adicionar autor e adicionar editor do DAO da aplicação Biblioteca disponível no diretório cap08 7