SlideShare uma empresa Scribd logo
1 de 42
Baixar para ler offline
Acesso a Banco de Dados
JDBC
Técnicas de Programação
FA7
Prof.º Eduardo Mendes
Trabalhando
com Banco de Dados
  Nesta aula
  Criar um banco de dados e uma tabela de alunos
  Configurar a aplicação para acessar o banco de
dados
  JNDI, server.xml, web.xml
  Criar uma classe que acesse o banco com a
configuração realizada
Conceitos
  Tabelas
  Linhas
  Campos
  Chaves primárias
Tabela típica de dados:
Agenda Telefônica
Cursos da FA7
No MySQL
CREATE DATABASE modulo3;
USE modulo3;
CREATE TABLE agendaTelefonica (
id INT PRIMARY KEY,
primeiroNome VARCHAR(15),
sobreNome VARCHAR (15),
email VARCHAR(20),
telefone VARCHAR(15)
);
DESCRIBE agendaTelefonica;
Inserindo Valores
INSERT INTO agendaTelefonica
VALUES(
0, ‘Eduardo', ‘Mendes',
‘eduardo@fa7.edu.br', '123567‘
);
Recuperando os dados
  Eu quero visualizar todos os registro
de uma tabela
SELECT * FROM nomeDaTabela;
No MySQL
SELECT * FROM agendaTelefonica;
Java Database Connectivity
  Conectividade a Bancos de Dados Java
  Biblioteca
  Acesso a bancos de dados por meio de Java
  Desenvolvedores podem acessar bancos de dados
não importando quem é o distribuidor
  Utilização de “driver”
Java Name and Directory Interface
JNDI
API Java padrão
para acessar
diretórios
Local
centralizado
Aplicação Java
pode recuperar
recursos
externos através
de um nome
Java Name and Directory Interface
  Principais estruturas:
  Principal método de Context:
lookup(“[recurso]”)
Configurando o acesso ao banco
via JNDI
  Instale o driver JDBC do MySQL na pasta lib do
Tomcat
  Configure um nome JNDI para o banco de dados
que aplicação deve acessar no arquivo server.xml
do tomcat.
  Este arquivo se encontra na pasta conf
  Configure sua aplicação para acessar o recurso
JNDI.
  Faça isto no web.xml
Instalando o driver
Configurando o server.xml
<Context docBase="16102008" path="/16102008"
reloadable="true"
source="org.eclipse.jst.j2ee.server:16102008" >
<Resource name="jdbc/fa7"
auth="Container"
type="javax.sql.DataSource“
maxActive="100" maxIdle="30" maxWait="10000“
username="root" password=""
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/fa7"
/>
</Context>
Configurando o web.xml
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/fa7</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
Preparando uma classe para
acessar o Banco de Dados
  Crie uma classe chamada AlunoDAO, no pacote
dao
  DAO – Data Access Object
  Dentro da classe crie um método chamado:
  public void getAlunos() throws Exception
getAlunos()
Context initCtx = null;
Context envCtx = null;
DataSource ds = null;
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
initCtx = new InitialContext();
envCtx = (Context) initCtx.lookup("java:comp/env");
JDBC
Principais Classes
  javax.sql.DataSource
  Abrange os detalhes de como obter uma conexão para o
banco de dados
  java.sql.Connection
  Representa uma conexão com um banco de dados
  java.sql.Statement
  Fornece métodos para o desenvolvedor executar instruções
SQL
  java.sql.ResultSet
  Representa o resultado de uma instrução SQL de Pesquisa
javax.sql.DataSource
  Uma interface definida na API
  Modo recomendado para um desenvolvedor obter
um objeto Connection
  Após obter uma instância de DataSource
  É possível recuperar o objeto Connection
  Como?
  Chamar o método getConnection() em uma instância
de DataSource
Recuperando DataSource
  O contexto JNDI abstrai os detalhes de conexão
com o recurso
  Utilize o nome com o qual DataSource foi
configurado
ds = (DataSource) envCtx.lookup("jdbc/fa7");
  Uma vez que se tenha uma instância DataSource
válida, obter uma conexão é:
Connection conn = ds.getConnection();
Obtendo um DataSource
e a conexão
initCtx = new InitialContext();
envCtx = (Context) initCtx.lookup("java:comp/env");
ds = (DataSource) envCtx.lookup("jdbc/fa7");
conn = ds.getConnection();
java.sql.Connection
  Objetos da classe java.sql.Connection
  Representam conexões atuais para o banco de
dados
  A partir deste objeto é possível criar a classe
Statement
Obtendo um objeto Statement
initCtx = new InitialContext();
envCtx = (Context) initCtx.lookup("java:comp/env");
ds = (DataSource) envCtx.lookup("jdbc/fa7");
conn = ds.getConnection();
stmt = conn.createStatement();
java.sql.Statement
  Métodos
  executeQuery
  Executa comandos SELECT, retornando o resultado
de operações como um objeto ResultSet
  executeUpdate
  Executa comandos INSERT, UPDATE ou DELETE,
retornando o número de colunas afetadas como um
tipo int
Executando uma consulta
initCtx = new InitialContext();
envCtx = (Context) initCtx.lookup("java:comp/env");
ds = (DataSource) envCtx.lookup("jdbc/fa7");
conn = ds.getConnection();
stmt = conn.createStatement();
rs = stmt.executeQuery("SELECT * FROM alunos");
java.sql.ResultSet
  Resultados de uma consulta no banco de dados
  Um objeto ResultSet pode ser visualizado como
uma tabela
  A informação é recuperada uma linha por vez
  O objeto ResultSet mantém a linha corrente
  Para percorrer as linhas da tabela em ResultSet,
usamos o método next()
Percorrendo os resultados
rs = stmt.executeQuery("SELECT * FROM alunos");
while (rs.next()) {
String alunoNome = rs.getString("nome");
int alunoIdade = rs.getInt("idade");
int alunoId = rs.getInt("id");
System.out.println(alunoId);
System.out.println(alunoNome);
System.out.println(alunoIdade);
}
Liberando Recursos do Sistema
  Este é um passo muito importante que
freqüentemente é negligenciado após ter sido
completada
  Deve ser feita explicitamente e é uma
responsabilidade do programador
  Sem executar tal liberação, os recursos tomados
pela operação não podem ser usadas no futuro
  Para aplicações muito grandes, isto rapidamente
resulta na perda de conexões disponíveis
Liberando Recursos do Sistema
  Executada chamando o método close() disponíveis em
cada objeto das classes Connection, Statement, e
ResultSet
  Existem uma ordem específica envolvida
  O método close está definido para lançar uma
SQLException
  Erros comuns dos desenvolvedores: colocar
simplesmente os métodos dentro do corpo do programa
  Somente recorrer a condições de bem sucedidas
  O código deve ser colocado dentro de uma cláusula
finally
Liberando Recursos do Sistema
} finally {
try {
if (rs != null)
rs.close();
} catch (SQLException e) {}
try {
if (stmt != null)
stmt.close();
} catch (SQLException e) {}
try {
if (conn != null)
conn.close();
} catch (SQLException e) {}
}
Prepared Statement
  Classe que deriva de Statement
  Tem performance melhor
  Uma consulta pré-compilada
  O Banco de Dados executa direto, sem ter que
compilar
  É preferível usá-la quando a consulta deve ser
usada mais que uma vez
Criando um Objeto
PreparedStatement
  Cria-se através de uma conexão, assim como o
Statement
  Parâmetros são fornecidos em forma de “?”
  Posteriormente serão substituídos por valores
Criando um Objeto
PreparedStatement
PreparedStatement teste =
conn.prepareStatement(
“UPDATE alunos SET nome = ? WHERE id = ?”);
Fornecendo os valores da
consulta
  Os valores representados por “?” devem ser
informados
  Métodos setXXX
  Para int, setInt()
  Para String setString()
  Existe um método para cada tipo primitivo
declarado na linguagem JAVA
Fornecendo os valores da
consulta
PreparedStatement teste =
conn.prepareStatement(
“UPDATE alunos SET nome = ? WHERE id
= ?”);
teste.setString(1, “Dudu”);
teste.setInt(2, 1);
Como executar a consulta?
PreparedStatement teste =
conn.prepareStatement(
“UPDATE alunos SET nome = ? WHERE id
= ?”);
teste.setString(1, “Dudu”);
teste.setInt(2, 1);
teste.executeUpdate();
Usando um laço para alterar
PreparedStatement alterarAlunos;
String alterarString =
“UPDATE alunos SET nome = ? WHERE id = ?";
alterarAlunos = conn.prepareStatement(alterarString);
int [] alunosIds= {175, 150, 60, 155, 90};
String [] nomes = {“Eduardo", “Gustavo", “Odmir",
“Fernando", “Raphabs"};
int len = nomes.length;
for(int i = 0; i < len; i++) {
alterarAlunos.setInt(1, alunosIds[i]);
alterarAlunos.setString(2, nomes[i]);
alterarAlunos.executeUpdate();
}
Transações
  Algumas vezes é necessário que certas consultas
só executem caso outras tenham sucesso
  Uma transação pode ser vista como um conjunto
de consultas dependentes
Transações
con.setAutoCommit(false);
PreparedStatement alterarAluno =
con.prepareStatement( "UPDATE alunos SET nome = ?
WHERE id = ?");
alterarAluno.setInt(1,”Dudu”);
alterarAluno.setString(2, 1);
alterarAluno.executeUpdate();
PreparedStatement alterarIdade =
con.prepareStatement( "UPDATE alunos SET idade = idade
+ ? WHERE id LIKE ?");
alterarIdade.setInt(1, 1);
alterarIdade.setString(2, 1);
alterarIdade.executeUpdate();
con.commit();
con.setAutoCommit(true);

Mais conteúdo relacionado

Mais procurados

Mais procurados (19)

Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDB
 
jQuery na Prática - Cauê Fajoli
jQuery na Prática - Cauê FajolijQuery na Prática - Cauê Fajoli
jQuery na Prática - Cauê Fajoli
 
CONEXÃO BANCO DE DADOS MYSQL COM JAVA
CONEXÃO BANCO DE DADOS MYSQL  COM JAVACONEXÃO BANCO DE DADOS MYSQL  COM JAVA
CONEXÃO BANCO DE DADOS MYSQL COM JAVA
 
Vb
VbVb
Vb
 
Bd sql (1)
Bd sql (1)Bd sql (1)
Bd sql (1)
 
Programando com estilo e Performance
Programando com estilo e Performance Programando com estilo e Performance
Programando com estilo e Performance
 
PHP e Mysql - DELETE
PHP e Mysql - DELETEPHP e Mysql - DELETE
PHP e Mysql - DELETE
 
MongoDB
MongoDBMongoDB
MongoDB
 
Criando controle de acesso com php e my sql
Criando controle de acesso com php e my sqlCriando controle de acesso com php e my sql
Criando controle de acesso com php e my sql
 
Aula 8 php
Aula 8 phpAula 8 php
Aula 8 php
 
Java 14
Java 14Java 14
Java 14
 
Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que parece
 
LabMM4 (T16 - 12/13) - PHP + MySQL
LabMM4 (T16 - 12/13) - PHP + MySQLLabMM4 (T16 - 12/13) - PHP + MySQL
LabMM4 (T16 - 12/13) - PHP + MySQL
 
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...
Elasticidade e engenharia de banco de dados para alta performance  - Rubens G...Elasticidade e engenharia de banco de dados para alta performance  - Rubens G...
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...
 
Sql proficiente
Sql proficienteSql proficiente
Sql proficiente
 
Pdo do PHP Palestra
Pdo do PHP PalestraPdo do PHP Palestra
Pdo do PHP Palestra
 
Introdução à JQuery
Introdução à JQueryIntrodução à JQuery
Introdução à JQuery
 
Fundamentos de PHP, phpMyAdmin e MySQL (parte 2)
Fundamentos de  PHP, phpMyAdmin e MySQL (parte 2)Fundamentos de  PHP, phpMyAdmin e MySQL (parte 2)
Fundamentos de PHP, phpMyAdmin e MySQL (parte 2)
 
Treinamento de SQL Básico
Treinamento de SQL BásicoTreinamento de SQL Básico
Treinamento de SQL Básico
 

Destaque

Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2Eduardo Mendes
 
Desenvolvimento Web com PHP parte 7
Desenvolvimento Web com PHP parte 7Desenvolvimento Web com PHP parte 7
Desenvolvimento Web com PHP parte 7Eduardo Mendes
 
Teste de Software - parte 1
Teste de Software - parte 1Teste de Software - parte 1
Teste de Software - parte 1Eduardo Mendes
 
The Power of Collaboration to Build Your Own Startup
The Power of Collaboration to Build Your Own StartupThe Power of Collaboration to Build Your Own Startup
The Power of Collaboration to Build Your Own StartupTaufan Erfiyanto
 
Turbinando o desenvolvimento com Eclipse
Turbinando o desenvolvimento com EclipseTurbinando o desenvolvimento com Eclipse
Turbinando o desenvolvimento com EclipseMarcos Sousa
 
Academia do Arquiteto Globalcode
Academia do Arquiteto GlobalcodeAcademia do Arquiteto Globalcode
Academia do Arquiteto GlobalcodeGlobalcode
 
Evolucao de software - parte 2
Evolucao de software - parte 2Evolucao de software - parte 2
Evolucao de software - parte 2Eduardo Mendes
 
Evolucao de software - parte 1
Evolucao de software - parte 1Evolucao de software - parte 1
Evolucao de software - parte 1Eduardo Mendes
 
Desenvolvimento web com PHP parte 3
Desenvolvimento web com PHP parte 3Desenvolvimento web com PHP parte 3
Desenvolvimento web com PHP parte 3Eduardo Mendes
 
Introdução à Linguagem Ruby - Fundamentos - Parte 2
 Introdução à Linguagem Ruby - Fundamentos - Parte 2 Introdução à Linguagem Ruby - Fundamentos - Parte 2
Introdução à Linguagem Ruby - Fundamentos - Parte 2Eduardo Mendes
 
Engenharia de Requisitos
Engenharia de RequisitosEngenharia de Requisitos
Engenharia de RequisitosEduardo Mendes
 
Testes de Software parte 2
Testes de Software parte 2Testes de Software parte 2
Testes de Software parte 2Eduardo Mendes
 
Desenvolvimento web com PHP parte 4
Desenvolvimento web com PHP parte 4Desenvolvimento web com PHP parte 4
Desenvolvimento web com PHP parte 4Eduardo Mendes
 
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
 

Destaque (20)

Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2
 
AngularJS - Rotas
AngularJS - RotasAngularJS - Rotas
AngularJS - Rotas
 
Desenvolvimento Web com PHP parte 7
Desenvolvimento Web com PHP parte 7Desenvolvimento Web com PHP parte 7
Desenvolvimento Web com PHP parte 7
 
Teste de Software - parte 1
Teste de Software - parte 1Teste de Software - parte 1
Teste de Software - parte 1
 
Jquery
JqueryJquery
Jquery
 
The Power of Collaboration to Build Your Own Startup
The Power of Collaboration to Build Your Own StartupThe Power of Collaboration to Build Your Own Startup
The Power of Collaboration to Build Your Own Startup
 
Turbinando o desenvolvimento com Eclipse
Turbinando o desenvolvimento com EclipseTurbinando o desenvolvimento com Eclipse
Turbinando o desenvolvimento com Eclipse
 
Academia do Arquiteto Globalcode
Academia do Arquiteto GlobalcodeAcademia do Arquiteto Globalcode
Academia do Arquiteto Globalcode
 
Evolucao de software - parte 2
Evolucao de software - parte 2Evolucao de software - parte 2
Evolucao de software - parte 2
 
Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
 
Evolucao de software - parte 1
Evolucao de software - parte 1Evolucao de software - parte 1
Evolucao de software - parte 1
 
Desenvolvimento web com PHP parte 3
Desenvolvimento web com PHP parte 3Desenvolvimento web com PHP parte 3
Desenvolvimento web com PHP parte 3
 
Academia java intensivo
Academia java intensivoAcademia java intensivo
Academia java intensivo
 
RSpec com doubles
RSpec com doublesRSpec com doubles
RSpec com doubles
 
Introdução à Linguagem Ruby - Fundamentos - Parte 2
 Introdução à Linguagem Ruby - Fundamentos - Parte 2 Introdução à Linguagem Ruby - Fundamentos - Parte 2
Introdução à Linguagem Ruby - Fundamentos - Parte 2
 
Engenharia de Requisitos
Engenharia de RequisitosEngenharia de Requisitos
Engenharia de Requisitos
 
Testes de Software parte 2
Testes de Software parte 2Testes de Software parte 2
Testes de Software parte 2
 
Html Aula 1 - parte 2
Html Aula 1 - parte 2Html Aula 1 - parte 2
Html Aula 1 - parte 2
 
Desenvolvimento web com PHP parte 4
Desenvolvimento web com PHP parte 4Desenvolvimento web com PHP parte 4
Desenvolvimento web com PHP parte 4
 
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
 

Semelhante a Acesso BD JDBC

Semelhante a Acesso BD JDBC (20)

Fundamentos de JDBC
Fundamentos de JDBCFundamentos de JDBC
Fundamentos de JDBC
 
Fundamentos de JDBC
Fundamentos de JDBCFundamentos de JDBC
Fundamentos de JDBC
 
Java13
Java13Java13
Java13
 
Javaone Brazil 2012: Integrando Ext JS 4 com Java EE
Javaone Brazil 2012: Integrando Ext JS 4 com Java EEJavaone Brazil 2012: Integrando Ext JS 4 com Java EE
Javaone Brazil 2012: Integrando Ext JS 4 com Java EE
 
Jdbc
JdbcJdbc
Jdbc
 
Testes em Aplicações Web com Cactus
Testes em Aplicações Web com CactusTestes em Aplicações Web com Cactus
Testes em Aplicações Web com Cactus
 
Ado
AdoAdo
Ado
 
Introdução ao JDBC - BarreirasJUG
Introdução ao JDBC - BarreirasJUGIntrodução ao JDBC - BarreirasJUG
Introdução ao JDBC - BarreirasJUG
 
Coleções Propriedade, Resources e Strings
Coleções Propriedade, Resources e StringsColeções Propriedade, Resources e Strings
Coleções Propriedade, Resources e Strings
 
Java JDBC: Aplicação Java que acessa um SGDB
Java JDBC: Aplicação Java que acessa um SGDBJava JDBC: Aplicação Java que acessa um SGDB
Java JDBC: Aplicação Java que acessa um SGDB
 
Java com banco my sql
Java com banco my sqlJava com banco my sql
Java com banco my sql
 
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
 
Aula1
Aula1Aula1
Aula1
 
Acessando o MySql com o Python
Acessando o MySql com o PythonAcessando o MySql com o Python
Acessando o MySql com o Python
 
Livropythonmysql 091022073751-phpapp01
Livropythonmysql 091022073751-phpapp01Livropythonmysql 091022073751-phpapp01
Livropythonmysql 091022073751-phpapp01
 
Java 16 Jdbc
Java 16 JdbcJava 16 Jdbc
Java 16 Jdbc
 
Jdbc e hibernate
Jdbc e hibernateJdbc e hibernate
Jdbc e hibernate
 
Python 04
Python 04Python 04
Python 04
 
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
 
Como conectar programas em linguagem java a bases de dados
Como conectar programas em linguagem java  a bases de dadosComo conectar programas em linguagem java  a bases de dados
Como conectar programas em linguagem java a bases de dados
 

Mais de Eduardo Mendes

JavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a ObjetosJavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a ObjetosEduardo Mendes
 
Angular JS - Fundamentos
Angular JS - FundamentosAngular JS - Fundamentos
Angular JS - FundamentosEduardo Mendes
 
Singleton - Padrão de Projeto
Singleton - Padrão de ProjetoSingleton - Padrão de Projeto
Singleton - Padrão de ProjetoEduardo Mendes
 
Introdução à Internet, Http e HTML
Introdução à Internet, Http e HTMLIntrodução à Internet, Http e HTML
Introdução à Internet, Http e HTMLEduardo Mendes
 
Estimativas de Esforço - Engenharia de Software
Estimativas de Esforço - Engenharia de SoftwareEstimativas de Esforço - Engenharia de Software
Estimativas de Esforço - Engenharia de SoftwareEduardo Mendes
 
Validações no Ruby on Rails
Validações no Ruby on Rails Validações no Ruby on Rails
Validações no Ruby on Rails Eduardo Mendes
 
Padroes Template-Method (Método Gabarito)
Padroes Template-Method (Método Gabarito)Padroes Template-Method (Método Gabarito)
Padroes Template-Method (Método Gabarito)Eduardo Mendes
 
PHP básico para iniciantes
PHP básico para iniciantesPHP básico para iniciantes
PHP básico para iniciantesEduardo Mendes
 
PHP e MySQL para iniciantes
PHP e MySQL para iniciantesPHP e MySQL para iniciantes
PHP e MySQL para iniciantesEduardo Mendes
 

Mais de Eduardo Mendes (20)

JavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a ObjetosJavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a Objetos
 
Angular JS - Fundamentos
Angular JS - FundamentosAngular JS - Fundamentos
Angular JS - Fundamentos
 
Singleton - Padrão de Projeto
Singleton - Padrão de ProjetoSingleton - Padrão de Projeto
Singleton - Padrão de Projeto
 
Layout Fluido
Layout FluidoLayout Fluido
Layout Fluido
 
Web Design Responsivo
Web Design ResponsivoWeb Design Responsivo
Web Design Responsivo
 
Html - Aula 4
Html - Aula 4Html - Aula 4
Html - Aula 4
 
Html - Aula 3
Html - Aula 3Html - Aula 3
Html - Aula 3
 
Introdução à Internet, Http e HTML
Introdução à Internet, Http e HTMLIntrodução à Internet, Http e HTML
Introdução à Internet, Http e HTML
 
ExtJS-4
ExtJS-4ExtJS-4
ExtJS-4
 
Jquery 2
Jquery 2Jquery 2
Jquery 2
 
Estimativas de Esforço - Engenharia de Software
Estimativas de Esforço - Engenharia de SoftwareEstimativas de Esforço - Engenharia de Software
Estimativas de Esforço - Engenharia de Software
 
Validações no Ruby on Rails
Validações no Ruby on Rails Validações no Ruby on Rails
Validações no Ruby on Rails
 
Padrão Iterator
Padrão IteratorPadrão Iterator
Padrão Iterator
 
Padroes Template-Method (Método Gabarito)
Padroes Template-Method (Método Gabarito)Padroes Template-Method (Método Gabarito)
Padroes Template-Method (Método Gabarito)
 
Padrão Command
Padrão CommandPadrão Command
Padrão Command
 
Padrão Fachada
Padrão FachadaPadrão Fachada
Padrão Fachada
 
Padrão Adapter
Padrão AdapterPadrão Adapter
Padrão Adapter
 
Web Design Responsivo
Web Design ResponsivoWeb Design Responsivo
Web Design Responsivo
 
PHP básico para iniciantes
PHP básico para iniciantesPHP básico para iniciantes
PHP básico para iniciantes
 
PHP e MySQL para iniciantes
PHP e MySQL para iniciantesPHP e MySQL para iniciantes
PHP e MySQL para iniciantes
 

Acesso BD JDBC

  • 1. Acesso a Banco de Dados JDBC Técnicas de Programação FA7 Prof.º Eduardo Mendes
  • 2. Trabalhando com Banco de Dados   Nesta aula   Criar um banco de dados e uma tabela de alunos   Configurar a aplicação para acessar o banco de dados   JNDI, server.xml, web.xml   Criar uma classe que acesse o banco com a configuração realizada
  • 3. Conceitos   Tabelas   Linhas   Campos   Chaves primárias
  • 4. Tabela típica de dados: Agenda Telefônica
  • 6.
  • 7. No MySQL CREATE DATABASE modulo3; USE modulo3; CREATE TABLE agendaTelefonica ( id INT PRIMARY KEY, primeiroNome VARCHAR(15), sobreNome VARCHAR (15), email VARCHAR(20), telefone VARCHAR(15) ); DESCRIBE agendaTelefonica;
  • 8. Inserindo Valores INSERT INTO agendaTelefonica VALUES( 0, ‘Eduardo', ‘Mendes', ‘eduardo@fa7.edu.br', '123567‘ );
  • 9. Recuperando os dados   Eu quero visualizar todos os registro de uma tabela SELECT * FROM nomeDaTabela;
  • 10. No MySQL SELECT * FROM agendaTelefonica;
  • 11.
  • 12. Java Database Connectivity   Conectividade a Bancos de Dados Java   Biblioteca   Acesso a bancos de dados por meio de Java   Desenvolvedores podem acessar bancos de dados não importando quem é o distribuidor   Utilização de “driver”
  • 13. Java Name and Directory Interface JNDI API Java padrão para acessar diretórios Local centralizado Aplicação Java pode recuperar recursos externos através de um nome
  • 14. Java Name and Directory Interface   Principais estruturas:   Principal método de Context: lookup(“[recurso]”)
  • 15. Configurando o acesso ao banco via JNDI   Instale o driver JDBC do MySQL na pasta lib do Tomcat   Configure um nome JNDI para o banco de dados que aplicação deve acessar no arquivo server.xml do tomcat.   Este arquivo se encontra na pasta conf   Configure sua aplicação para acessar o recurso JNDI.   Faça isto no web.xml
  • 17. Configurando o server.xml <Context docBase="16102008" path="/16102008" reloadable="true" source="org.eclipse.jst.j2ee.server:16102008" > <Resource name="jdbc/fa7" auth="Container" type="javax.sql.DataSource“ maxActive="100" maxIdle="30" maxWait="10000“ username="root" password="" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/fa7" /> </Context>
  • 18. Configurando o web.xml <resource-ref> <description>DB Connection</description> <res-ref-name>jdbc/fa7</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>
  • 19. Preparando uma classe para acessar o Banco de Dados   Crie uma classe chamada AlunoDAO, no pacote dao   DAO – Data Access Object   Dentro da classe crie um método chamado:   public void getAlunos() throws Exception
  • 20. getAlunos() Context initCtx = null; Context envCtx = null; DataSource ds = null; Connection conn = null; Statement stmt = null; ResultSet rs = null; initCtx = new InitialContext(); envCtx = (Context) initCtx.lookup("java:comp/env");
  • 21. JDBC Principais Classes   javax.sql.DataSource   Abrange os detalhes de como obter uma conexão para o banco de dados   java.sql.Connection   Representa uma conexão com um banco de dados   java.sql.Statement   Fornece métodos para o desenvolvedor executar instruções SQL   java.sql.ResultSet   Representa o resultado de uma instrução SQL de Pesquisa
  • 22. javax.sql.DataSource   Uma interface definida na API   Modo recomendado para um desenvolvedor obter um objeto Connection   Após obter uma instância de DataSource   É possível recuperar o objeto Connection   Como?   Chamar o método getConnection() em uma instância de DataSource
  • 23. Recuperando DataSource   O contexto JNDI abstrai os detalhes de conexão com o recurso   Utilize o nome com o qual DataSource foi configurado ds = (DataSource) envCtx.lookup("jdbc/fa7");   Uma vez que se tenha uma instância DataSource válida, obter uma conexão é: Connection conn = ds.getConnection();
  • 24. Obtendo um DataSource e a conexão initCtx = new InitialContext(); envCtx = (Context) initCtx.lookup("java:comp/env"); ds = (DataSource) envCtx.lookup("jdbc/fa7"); conn = ds.getConnection();
  • 25. java.sql.Connection   Objetos da classe java.sql.Connection   Representam conexões atuais para o banco de dados   A partir deste objeto é possível criar a classe Statement
  • 26. Obtendo um objeto Statement initCtx = new InitialContext(); envCtx = (Context) initCtx.lookup("java:comp/env"); ds = (DataSource) envCtx.lookup("jdbc/fa7"); conn = ds.getConnection(); stmt = conn.createStatement();
  • 27. java.sql.Statement   Métodos   executeQuery   Executa comandos SELECT, retornando o resultado de operações como um objeto ResultSet   executeUpdate   Executa comandos INSERT, UPDATE ou DELETE, retornando o número de colunas afetadas como um tipo int
  • 28. Executando uma consulta initCtx = new InitialContext(); envCtx = (Context) initCtx.lookup("java:comp/env"); ds = (DataSource) envCtx.lookup("jdbc/fa7"); conn = ds.getConnection(); stmt = conn.createStatement(); rs = stmt.executeQuery("SELECT * FROM alunos");
  • 29. java.sql.ResultSet   Resultados de uma consulta no banco de dados   Um objeto ResultSet pode ser visualizado como uma tabela   A informação é recuperada uma linha por vez   O objeto ResultSet mantém a linha corrente   Para percorrer as linhas da tabela em ResultSet, usamos o método next()
  • 30. Percorrendo os resultados rs = stmt.executeQuery("SELECT * FROM alunos"); while (rs.next()) { String alunoNome = rs.getString("nome"); int alunoIdade = rs.getInt("idade"); int alunoId = rs.getInt("id"); System.out.println(alunoId); System.out.println(alunoNome); System.out.println(alunoIdade); }
  • 31. Liberando Recursos do Sistema   Este é um passo muito importante que freqüentemente é negligenciado após ter sido completada   Deve ser feita explicitamente e é uma responsabilidade do programador   Sem executar tal liberação, os recursos tomados pela operação não podem ser usadas no futuro   Para aplicações muito grandes, isto rapidamente resulta na perda de conexões disponíveis
  • 32. Liberando Recursos do Sistema   Executada chamando o método close() disponíveis em cada objeto das classes Connection, Statement, e ResultSet   Existem uma ordem específica envolvida   O método close está definido para lançar uma SQLException   Erros comuns dos desenvolvedores: colocar simplesmente os métodos dentro do corpo do programa   Somente recorrer a condições de bem sucedidas   O código deve ser colocado dentro de uma cláusula finally
  • 33. Liberando Recursos do Sistema } finally { try { if (rs != null) rs.close(); } catch (SQLException e) {} try { if (stmt != null) stmt.close(); } catch (SQLException e) {} try { if (conn != null) conn.close(); } catch (SQLException e) {} }
  • 34. Prepared Statement   Classe que deriva de Statement   Tem performance melhor   Uma consulta pré-compilada   O Banco de Dados executa direto, sem ter que compilar   É preferível usá-la quando a consulta deve ser usada mais que uma vez
  • 35. Criando um Objeto PreparedStatement   Cria-se através de uma conexão, assim como o Statement   Parâmetros são fornecidos em forma de “?”   Posteriormente serão substituídos por valores
  • 36. Criando um Objeto PreparedStatement PreparedStatement teste = conn.prepareStatement( “UPDATE alunos SET nome = ? WHERE id = ?”);
  • 37. Fornecendo os valores da consulta   Os valores representados por “?” devem ser informados   Métodos setXXX   Para int, setInt()   Para String setString()   Existe um método para cada tipo primitivo declarado na linguagem JAVA
  • 38. Fornecendo os valores da consulta PreparedStatement teste = conn.prepareStatement( “UPDATE alunos SET nome = ? WHERE id = ?”); teste.setString(1, “Dudu”); teste.setInt(2, 1);
  • 39. Como executar a consulta? PreparedStatement teste = conn.prepareStatement( “UPDATE alunos SET nome = ? WHERE id = ?”); teste.setString(1, “Dudu”); teste.setInt(2, 1); teste.executeUpdate();
  • 40. Usando um laço para alterar PreparedStatement alterarAlunos; String alterarString = “UPDATE alunos SET nome = ? WHERE id = ?"; alterarAlunos = conn.prepareStatement(alterarString); int [] alunosIds= {175, 150, 60, 155, 90}; String [] nomes = {“Eduardo", “Gustavo", “Odmir", “Fernando", “Raphabs"}; int len = nomes.length; for(int i = 0; i < len; i++) { alterarAlunos.setInt(1, alunosIds[i]); alterarAlunos.setString(2, nomes[i]); alterarAlunos.executeUpdate(); }
  • 41. Transações   Algumas vezes é necessário que certas consultas só executem caso outras tenham sucesso   Uma transação pode ser vista como um conjunto de consultas dependentes
  • 42. Transações con.setAutoCommit(false); PreparedStatement alterarAluno = con.prepareStatement( "UPDATE alunos SET nome = ? WHERE id = ?"); alterarAluno.setInt(1,”Dudu”); alterarAluno.setString(2, 1); alterarAluno.executeUpdate(); PreparedStatement alterarIdade = con.prepareStatement( "UPDATE alunos SET idade = idade + ? WHERE id LIKE ?"); alterarIdade.setInt(1, 1); alterarIdade.setString(2, 1); alterarIdade.executeUpdate(); con.commit(); con.setAutoCommit(true);