SlideShare uma empresa Scribd logo
Java - Introdução a
banco de dados
Prof: Sérgio Souza Costa
Sobre mim
Sérgio Souza Costa
Professor - UFMA
Doutor em Computação Aplicada (INPE)
prof.sergio.costa@gmail.com
https://sites.google.com/site/profsergiocosta/home
https://twitter.com/profsergiocosta
http://gplus.to/sergiosouzacosta
http://www.slideshare.net/skosta/presentations?order=popular
Introdução
• Sistemas computacionais compartilham algumas
necessidades comuns
– Armazenar e recuperar informação (persistência)
– Interagir com o usuário
Introdução
• Sistemas computacionais compartilham algumas
necessidades comuns
– Armazenar e recuperar informação (persistência)
– Interagir com o usuário
Persistência
Armazenar e recuperar informações eficientemente é em si
um grande desafio.
Persistência
• Armazenar e recuperar informações eficientemente é em si
um grande desafio.
• Nossas aplicações precisam resolver outros desafios
específicos do problema.
• Persistência é um serviço oferecido por diversas empresas
e instituições, como Oracle, Microsoft, GNU ( MySQL,
Postgres) ..
JDBC
O Java disponibiliza o JDBC, um framework para acesso a diferentes servidores de
Banco De Dados:
Tutorial
Primeiro desafio. Fazer
uma agenda de contatos.
Onde você irá salvar os
dados ?
Usarei um servidor de banco de
dados, que é uma aplicação
especializada para armazenar e
recuperar dados
CREATE TABLE contato
(
email text,
nome text,
telefone text
);
Primeiro, criar um banco e uma tabela em
um dado SGBD. Por exemplo:
Como minha aplicação irá
acessar o servidor ?
Em outras linguagens faço assim:
1. Abro uma conexão com o meu servidor
de banco de dados
2. Depois uso o SQL para recuperar e
armazenar dados.
Porém, como fazer isso no Java
?
Preciso pesquisar.
Pesquisando ...
Alguns minutos
depois ...
Connection conn;
String url = "jdbc:postgresql://localhost/contatos?user=postgres&password=postgres";
try {
conn = DriverManager.getConnection(url);
System.out.println("conectado");
}
catch(SQLException excecao) {
throw new RuntimeException(excecao);
}
Já sei como abrir uma
conexão, mas não está
funcionando :(
https://jdbc.postgresql.org/download/postgresql-42.1.1.jre6.jar
Faltou adicionar o drive do
postgresql. Baixe no link
abaixo:
Vá em propriedades do projeto,
e depois aba “libraries”
Depois, click em “Add
External JARs”
Biblioteca já adicionada.
Agora preciso saber como
executar um SQL através do
Java
Pesquisando ...
Alguns minutos depois ...
Já sei executar um SQL no
servidor
String sql = "INSERT INTO contato(nome,email, telefone) VALUES(?,?, ?)";
try {
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setString(1, "sergio");
stmt.setString(2, "skosta@gmail.com");
stmt.setString(3, "123");
stmt.execute();
stmt.close();
System.out.print("inserido");
} catch (SQLException u) {
throw new RuntimeException(u);
}
Recuperar é o mesmo procedimento
1. Abro uma conexão com o meu servidor
de banco de dados
2. Depois uso o SQL para recuperar os
dados .
3. Depois manipula o resultado,
normalmente armazenado em um
resultset
Pesquisando ...
Alguns
minutos
depois ...
String sql = "select * from contato";
try {
PreparedStatement stmt =
conn.prepareStatement(sql);
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
System.out.println("Nome:"+rs.getString("nome"));
System.out.println("Email:"+rs.getString("email"));
}
stmt.close();
} catch (SQLException u) {
throw new RuntimeException(u);
}
O que acharam das minhas
aplicações Java ?
Podem testar funciona ☺
Funciona … porém não está
utilizando os recursos da
programação orientada a
objetos
Em Java, nós usamos
orientação objeto, você
precisa pesquisar mais sobre
este paradigma.
Como vocês
resolveriam
este
problema ?
OK. Vou pesquisar mais um
pouco ....
Pesquisando ...
Alguns
minutos
depois ...
Entendi, eu crio classes que
definem responsabilidades.
Então já sei como melhorar
minha aplicação
public class Contato {
private String nome;
private String email;
private String phone;
public Contato(String n, String e, String p) {
this.nome = n;
this.email = e;
this.phone = p;
}
public void salvaNoBanco () {….}
}
Faço uma classe contato que
é responsável por salvá-la no
banco ☺
public class CadastraContato {
public static void main(String[] args) {
Contato contato = new Contato (”sergio",
skosta@gmail.com, “123”);
contato .salvaNoBanco();
}
}
Depois basta instanciar um
objeto e executar o método
salvaNoBanco
Agora a solução ficou boa né ?
O que vocês acham ?
Está melhor, mas você não
devia misturar codigo
específico de banco de dados
dentro da sua classe contato.
Ja OUVIU falar em POJO (Plain
Old Java Objects) ?
Mantenha sua classe contato
simples, e delegue operações de
banco de dados para outra classe
Esses desenvolvedores, nunca
estão satisfeitos. Vou
pesquisar mais um pouco
Pesquisando ...
Alguns
minutos
depois ...
Acho que já sei como resolver
1. Crio uma classe POJO
2. Depois outra classe para
salvar no banco
public class Contato {
private String nome;
private String email;
private String telefone;
String getNome() {
return nome;
}
void setNome(String nome) {
this.nome = nome;
}
….
}
Minha classe POJO
public class ContatoDAO {
private Connection connection;
private String url =
"jdbc:postgresql://localhost/contatos?user=postgres&password=postgres";
public ContatoDAO() {
try {
conn = DriverManager.getConnection(url);
System.out.println("conectado");
} catch (SQLException excecao) {
throw new RuntimeException(excecao);
}
}
public void adiciona(Contato Contato) {….}
}
Minha classe DAO que salva no
banco … abrindo conexão
public void adiciona(Contato Contato) {
String sql = "INSERT INTO Contato(
nome,email,telefone) VALUES(?,?,?)”
try {
PreparedStatement stmt =
connection.prepareStatement(sql);
stmt.setString(1, Contato.getNome());
stmt.setString(2, Contato.getEmail());
stmt.setString(3, Contato.getTelefone());
stmt.execute();
stmt.close();
} catch (SQLException u) {
throw new RuntimeException(u);
}
}
O Método que salva um contato no
banco.
public class CadastraContato {
public static void main(String[] args) {
Contato contato = new Contato();
contato.setNome("sergio");
contato.setEmail("skosta@gmail.com");
contato.setTelefone("123");
ContatoDAO dao = new ContatoDAO();
dao.adiciona(contato);
}
}
Então minha aplicação cliente
precisa apenas ….
Parabéns ! Ficou muito
melhor.
ATIVIDADE: Modifiquem a
classe ContatoDAO, para
permitir a recuperação dos
dados.
O método irá retornar uma coleção de
Contatos:
public List<Contato> recuperarContatos() {
// codigo aqui
}
Laboratório
Um aplicativo de
“Cadastro de Contatos”
em Swing
Cadastro de contatos
• Montem a seguinte interface.
• Alterem o nome das variáveis
referentes as caixas de textos
e botões.
• Usem nomes sugestivos e
sigam um “padrão”. Exemplo,
btnCadastrar, btnLimpar,
txtNome, txtEmail
Codifiquem a ação “Sair”,
similar ao que fizemos na
aulas sobre interface gráfica
Evitando fechamento acidental. Peça uma
confirmação do usuário.
O Java oferece uma classe que cria este tipo de
“caixas”, de mensagem, confirmação e entrada de
usuário.
private void
btnSairActionPerformed(java.awt.event.ActionEvent evt)
{
int confirm = JOptionPane.showConfirmDialog (this,
"Deseja Realmente fechar a aplicação?",
"Sair - Confirmação",
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE);
if (confirm == JOptionPane.YES_OPTION) {
System.exit(1);
}
}
JOptionPane.showMessageDialog (
null,
"Montando uma caixa de Dialogo sem ícone",
"Mensagem",
JOptionPane.PLAIN_MESSAGE
);
int opcao = JOptionPane.showConfirmDialog (
null,
"Deseja terminar ?",
"Mensagem Final",
JOptionPane.YES_NO_OPTION ,
JOptionPane.QUESTION_MESSAGE
)
String numero=JOptionPane.showInputDialog (
null
,"Digite uma informação qualquer”
,"Entrada de dados",
JOptionPane.QUESTION_MESSAGE
);
Defina o “mnemonic” para cada
botão. Facilita o uso direto pelo
teclado.
Codifique a ação limpar, como
fizemos em aula passada.
Codifique a ação cadastrar. No fim
da ação, mostre uma mensagem
para o usuário que foi salva com
sucesso.
Vamos usar o banco de dados
“contato”, o mesmo utilizado na
aula sobre banco de dados.
Além disso, usaremos a mesma
estrutura. As classes Contato e
ContatoDao.
Contudo, faremos uma classe
para abrir a conexão. A
ConnectionFactory
public class ConnectionFactory {
public Connection getConnection() {
String url = "jdbc:postgresql://localhost/contatos?
user=postgres&password=postgres";
try {
return DriverManager.getConnection(url);
}
catch(SQLException excecao) {
throw new RuntimeException(excecao);
}
}
A ConnectionFactory será usada
no construtor da ContatoDAO.
public ContatoDAO() {
connection = new
ConnectionFactory().getConnection();
}
Depois de testado o aplicativo,
substitua o textfield do telefone
por um formattedtextfield.
Inclua os imports ao código fonte
e o código para configurar a
máscara em personalizar codigo.
MaskFormatter mascara;
try {
mascara = new MaskFormatter(
"(##)#####-####");
mascara.setPlaceholderCharacter('_');
fmttxtFone.setFormatterFactory (
new DefaultFormatterFactory(mascara));
} catch (ParseException ex) {
}
import javax.swing.text.DefaultFormatterFactory;
import javax.swing.text.MaskFormatter;

Mais conteúdo relacionado

Mais procurados

Java introdução ao eclipse
Java   introdução ao eclipseJava   introdução ao eclipse
Java introdução ao eclipse
Armando Daniel
 
Java interface gráfica swing
Java   interface gráfica swingJava   interface gráfica swing
Java interface gráfica swing
Armando Daniel
 
Introdução ao JavaFX
Introdução ao JavaFXIntrodução ao JavaFX
Introdução ao JavaFX
Nécio de Lima Veras
 
Java11
Java11Java11
Java14
Java14Java14
Java orientação a objetos (variaveis de instancia e metodos)
Java   orientação a objetos (variaveis de instancia e metodos)Java   orientação a objetos (variaveis de instancia e metodos)
Java orientação a objetos (variaveis de instancia e metodos)
Armando Daniel
 
Java12
Java12Java12
Apresentação-Resumo sobre o Java Swing.
Apresentação-Resumo sobre o Java Swing.Apresentação-Resumo sobre o Java Swing.
Apresentação-Resumo sobre o Java Swing.
Gabriel Jesus
 
Java AWT
Java AWTJava AWT
Java 17 Swing
Java 17 SwingJava 17 Swing
Java 17 Swing
Regis Magalhães
 
Java8
Java8Java8
Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao java
Armando Daniel
 
Java13
Java13Java13
Java6
Java6Java6
Java swingcomponentes
Java swingcomponentesJava swingcomponentes
Java swingcomponentes
Delliany Miranda
 
Java orientação a objetos (interfaces)
Java   orientação a objetos (interfaces)Java   orientação a objetos (interfaces)
Java orientação a objetos (interfaces)
Armando Daniel
 
Java com banco my sql
Java com banco my sqlJava com banco my sql
Java com banco my sql
Andre Oliveira
 
Java interface gráfica layouts
Java   interface gráfica layoutsJava   interface gráfica layouts
Java interface gráfica layouts
Armando Daniel
 
Confirurando Dababase Development no Eclipse Luna
Confirurando Dababase Development no Eclipse LunaConfirurando Dababase Development no Eclipse Luna
Confirurando Dababase Development no Eclipse Luna
George Mendonça
 
Java 06
Java 06Java 06
Java 06
samuelthiago
 

Mais procurados (20)

Java introdução ao eclipse
Java   introdução ao eclipseJava   introdução ao eclipse
Java introdução ao eclipse
 
Java interface gráfica swing
Java   interface gráfica swingJava   interface gráfica swing
Java interface gráfica swing
 
Introdução ao JavaFX
Introdução ao JavaFXIntrodução ao JavaFX
Introdução ao JavaFX
 
Java11
Java11Java11
Java11
 
Java14
Java14Java14
Java14
 
Java orientação a objetos (variaveis de instancia e metodos)
Java   orientação a objetos (variaveis de instancia e metodos)Java   orientação a objetos (variaveis de instancia e metodos)
Java orientação a objetos (variaveis de instancia e metodos)
 
Java12
Java12Java12
Java12
 
Apresentação-Resumo sobre o Java Swing.
Apresentação-Resumo sobre o Java Swing.Apresentação-Resumo sobre o Java Swing.
Apresentação-Resumo sobre o Java Swing.
 
Java AWT
Java AWTJava AWT
Java AWT
 
Java 17 Swing
Java 17 SwingJava 17 Swing
Java 17 Swing
 
Java8
Java8Java8
Java8
 
Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao java
 
Java13
Java13Java13
Java13
 
Java6
Java6Java6
Java6
 
Java swingcomponentes
Java swingcomponentesJava swingcomponentes
Java swingcomponentes
 
Java orientação a objetos (interfaces)
Java   orientação a objetos (interfaces)Java   orientação a objetos (interfaces)
Java orientação a objetos (interfaces)
 
Java com banco my sql
Java com banco my sqlJava com banco my sql
Java com banco my sql
 
Java interface gráfica layouts
Java   interface gráfica layoutsJava   interface gráfica layouts
Java interface gráfica layouts
 
Confirurando Dababase Development no Eclipse Luna
Confirurando Dababase Development no Eclipse LunaConfirurando Dababase Development no Eclipse Luna
Confirurando Dababase Development no Eclipse Luna
 
Java 06
Java 06Java 06
Java 06
 

Destaque

Replicacao Object Sistemas
Replicacao Object SistemasReplicacao Object Sistemas
Replicacao Object Sistemas
taniamaciel
 
Manual de Usuário - TCC André Luiz Jamarino Abekawa
Manual de Usuário - TCC André Luiz Jamarino AbekawaManual de Usuário - TCC André Luiz Jamarino Abekawa
Manual de Usuário - TCC André Luiz Jamarino Abekawa
André Luiz Jamarino Abekawa
 
Minicurso de Cakephp
Minicurso de CakephpMinicurso de Cakephp
Minicurso de Cakephp
Cauan Cabral
 
Junções e subconsultas
Junções e subconsultasJunções e subconsultas
Junções e subconsultas
julianaveregue
 
Apostila PhP com Wamp, 2a. parte
Apostila PhP com Wamp, 2a. parteApostila PhP com Wamp, 2a. parte
Apostila PhP com Wamp, 2a. parte
Ilton Barbosa
 
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
Manuel Menezes de Sequeira
 
Agile Management
Agile ManagementAgile Management
Agile Management
Fábio Aguiar
 
area econòmica i patrimonial
area econòmica i patrimonialarea econòmica i patrimonial
area econòmica i patrimonial
Sandro
 
Canvi climàtic: Efectes i percepció social
Canvi climàtic: Efectes i percepció socialCanvi climàtic: Efectes i percepció social
Canvi climàtic: Efectes i percepció social
Josep Lluís Ruiz
 
Arquitectura de Computadores (II Bimestre)
Arquitectura de Computadores (II Bimestre)Arquitectura de Computadores (II Bimestre)
Arquitectura de Computadores (II Bimestre)
Videoconferencias UTPL
 
Tema 3 Dissolucions 1er batxillerat
Tema 3 Dissolucions 1er batxilleratTema 3 Dissolucions 1er batxillerat
Tema 3 Dissolucions 1er batxillerat
mmarti61
 
Les propietats dels materials i els assaigs d'estudi
Les propietats dels materials i els assaigs d'estudiLes propietats dels materials i els assaigs d'estudi
Les propietats dels materials i els assaigs d'estudi
Glòria García García
 
1c-EL SEXENNI DEMOCRÀTIC
1c-EL SEXENNI DEMOCRÀTIC1c-EL SEXENNI DEMOCRÀTIC
1c-EL SEXENNI DEMOCRÀTIC
jcorbala
 
La Variació Lingüística
La Variació LingüísticaLa Variació Lingüística
La Variació Lingüística
Epsa Llengues
 
La població espanyola. (2) Els contrasts territorials
La població espanyola. (2) Els contrasts territorialsLa població espanyola. (2) Els contrasts territorials
La població espanyola. (2) Els contrasts territorials
Empar Gallego
 
Unitat 2 la revolució industrial 2017-18
Unitat 2   la revolució industrial 2017-18Unitat 2   la revolució industrial 2017-18
Unitat 2 la revolució industrial 2017-18
jordimanero
 
Increment strategy ppt 2013 14
Increment strategy ppt 2013 14Increment strategy ppt 2013 14
Increment strategy ppt 2013 14
Vipul Saxena
 
C Prog. - Operators and Expressions
C Prog. - Operators and ExpressionsC Prog. - Operators and Expressions
C Prog. - Operators and Expressions
vinay arora
 

Destaque (20)

Replicacao Object Sistemas
Replicacao Object SistemasReplicacao Object Sistemas
Replicacao Object Sistemas
 
Manual de Usuário - TCC André Luiz Jamarino Abekawa
Manual de Usuário - TCC André Luiz Jamarino AbekawaManual de Usuário - TCC André Luiz Jamarino Abekawa
Manual de Usuário - TCC André Luiz Jamarino Abekawa
 
Minicurso de Cakephp
Minicurso de CakephpMinicurso de Cakephp
Minicurso de Cakephp
 
Junções e subconsultas
Junções e subconsultasJunções e subconsultas
Junções e subconsultas
 
Apostila PhP com Wamp, 2a. parte
Apostila PhP com Wamp, 2a. parteApostila PhP com Wamp, 2a. parte
Apostila PhP com Wamp, 2a. parte
 
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
 
Agile Management
Agile ManagementAgile Management
Agile Management
 
Lliço5 Cinèticaquímica
Lliço5 CinèticaquímicaLliço5 Cinèticaquímica
Lliço5 Cinèticaquímica
 
area econòmica i patrimonial
area econòmica i patrimonialarea econòmica i patrimonial
area econòmica i patrimonial
 
Canvi climàtic: Efectes i percepció social
Canvi climàtic: Efectes i percepció socialCanvi climàtic: Efectes i percepció social
Canvi climàtic: Efectes i percepció social
 
Arquitectura de Computadores (II Bimestre)
Arquitectura de Computadores (II Bimestre)Arquitectura de Computadores (II Bimestre)
Arquitectura de Computadores (II Bimestre)
 
Tema 3 Dissolucions 1er batxillerat
Tema 3 Dissolucions 1er batxilleratTema 3 Dissolucions 1er batxillerat
Tema 3 Dissolucions 1er batxillerat
 
Les propietats dels materials i els assaigs d'estudi
Les propietats dels materials i els assaigs d'estudiLes propietats dels materials i els assaigs d'estudi
Les propietats dels materials i els assaigs d'estudi
 
Tema15
Tema15Tema15
Tema15
 
1c-EL SEXENNI DEMOCRÀTIC
1c-EL SEXENNI DEMOCRÀTIC1c-EL SEXENNI DEMOCRÀTIC
1c-EL SEXENNI DEMOCRÀTIC
 
La Variació Lingüística
La Variació LingüísticaLa Variació Lingüística
La Variació Lingüística
 
La població espanyola. (2) Els contrasts territorials
La població espanyola. (2) Els contrasts territorialsLa població espanyola. (2) Els contrasts territorials
La població espanyola. (2) Els contrasts territorials
 
Unitat 2 la revolució industrial 2017-18
Unitat 2   la revolució industrial 2017-18Unitat 2   la revolució industrial 2017-18
Unitat 2 la revolució industrial 2017-18
 
Increment strategy ppt 2013 14
Increment strategy ppt 2013 14Increment strategy ppt 2013 14
Increment strategy ppt 2013 14
 
C Prog. - Operators and Expressions
C Prog. - Operators and ExpressionsC Prog. - Operators and Expressions
C Prog. - Operators and Expressions
 

Semelhante a Java - Introdução a banco de dados

Aula5
Aula5Aula5
Aula5
fkimura
 
Java e orientação a objetos
Java e orientação a objetosJava e orientação a objetos
Java e orientação a objetos
Frederico Maia Arantes
 
Linguagem de Programação Java
Linguagem de Programação JavaLinguagem de Programação Java
Linguagem de Programação Java
thomasdacosta
 
TDC 2015 São Paulo - Clean Code para Testers
TDC 2015 São Paulo - Clean Code para TestersTDC 2015 São Paulo - Clean Code para Testers
TDC 2015 São Paulo - Clean Code para Testers
Stefan Teixeira
 
Apostila ph pwamp_parte5
Apostila ph pwamp_parte5Apostila ph pwamp_parte5
Apostila ph pwamp_parte5
Ilton Barbosa
 
Desenvolvendo para WEB com JAVA
Desenvolvendo para WEB com JAVADesenvolvendo para WEB com JAVA
Desenvolvendo para WEB com JAVA
Willian Magalhães
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BH
Giovanni Bassi
 
Apostila PhP com Wamp, 4a Parte
Apostila PhP com Wamp, 4a ParteApostila PhP com Wamp, 4a Parte
Apostila PhP com Wamp, 4a Parte
Ilton Barbosa
 
Aula JPA
Aula JPAAula JPA
Aula JPA
Marco Reis
 
Java - Visão geral e Exercícios
Java - Visão geral e ExercíciosJava - Visão geral e Exercícios
Java - Visão geral e Exercícios
Arthur Emanuel
 
Compweek
CompweekCompweek
Compweek
Thiago Gonzaga
 
Teste de Integração - Unidade III
Teste de Integração - Unidade IIITeste de Integração - Unidade III
Teste de Integração - Unidade III
João Lourenço
 
Teste de Integracao com DbUnit e JStryker
Teste de Integracao com DbUnit e JStrykerTeste de Integracao com DbUnit e JStryker
Teste de Integracao com DbUnit e JStryker
Washington Botelho
 
Testes de software de A a Z
Testes de software de A a ZTestes de software de A a Z
Testes de software de A a Z
Camilo Porto ► Software Engineer
 
Jj08 otimizacao
Jj08 otimizacaoJj08 otimizacao
Jj08 otimizacao
Helder da Rocha
 
Spring framework 2.5
Spring framework 2.5Spring framework 2.5
Spring framework 2.5
Diego Pacheco
 
Java basico modulo_03
Java basico modulo_03Java basico modulo_03
Java basico modulo_03
wammendes
 
POO - Aula 003
POO - Aula 003POO - Aula 003
Dinamizando Sites Estáticos
Dinamizando Sites EstáticosDinamizando Sites Estáticos
Dinamizando Sites Estáticos
Tiago Albineli Motta
 
Estrutura de Dados em Java (Introdução)
Estrutura de Dados em Java (Introdução)Estrutura de Dados em Java (Introdução)
Estrutura de Dados em Java (Introdução)
Adriano Teixeira de Souza
 

Semelhante a Java - Introdução a banco de dados (20)

Aula5
Aula5Aula5
Aula5
 
Java e orientação a objetos
Java e orientação a objetosJava e orientação a objetos
Java e orientação a objetos
 
Linguagem de Programação Java
Linguagem de Programação JavaLinguagem de Programação Java
Linguagem de Programação Java
 
TDC 2015 São Paulo - Clean Code para Testers
TDC 2015 São Paulo - Clean Code para TestersTDC 2015 São Paulo - Clean Code para Testers
TDC 2015 São Paulo - Clean Code para Testers
 
Apostila ph pwamp_parte5
Apostila ph pwamp_parte5Apostila ph pwamp_parte5
Apostila ph pwamp_parte5
 
Desenvolvendo para WEB com JAVA
Desenvolvendo para WEB com JAVADesenvolvendo para WEB com JAVA
Desenvolvendo para WEB com JAVA
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BH
 
Apostila PhP com Wamp, 4a Parte
Apostila PhP com Wamp, 4a ParteApostila PhP com Wamp, 4a Parte
Apostila PhP com Wamp, 4a Parte
 
Aula JPA
Aula JPAAula JPA
Aula JPA
 
Java - Visão geral e Exercícios
Java - Visão geral e ExercíciosJava - Visão geral e Exercícios
Java - Visão geral e Exercícios
 
Compweek
CompweekCompweek
Compweek
 
Teste de Integração - Unidade III
Teste de Integração - Unidade IIITeste de Integração - Unidade III
Teste de Integração - Unidade III
 
Teste de Integracao com DbUnit e JStryker
Teste de Integracao com DbUnit e JStrykerTeste de Integracao com DbUnit e JStryker
Teste de Integracao com DbUnit e JStryker
 
Testes de software de A a Z
Testes de software de A a ZTestes de software de A a Z
Testes de software de A a Z
 
Jj08 otimizacao
Jj08 otimizacaoJj08 otimizacao
Jj08 otimizacao
 
Spring framework 2.5
Spring framework 2.5Spring framework 2.5
Spring framework 2.5
 
Java basico modulo_03
Java basico modulo_03Java basico modulo_03
Java basico modulo_03
 
POO - Aula 003
POO - Aula 003POO - Aula 003
POO - Aula 003
 
Dinamizando Sites Estáticos
Dinamizando Sites EstáticosDinamizando Sites Estáticos
Dinamizando Sites Estáticos
 
Estrutura de Dados em Java (Introdução)
Estrutura de Dados em Java (Introdução)Estrutura de Dados em Java (Introdução)
Estrutura de Dados em Java (Introdução)
 

Mais de Sérgio Souza Costa

Expressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicasExpressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicas
Sérgio Souza Costa
 
De algoritmos à programas de computador
De algoritmos à programas de computadorDe algoritmos à programas de computador
De algoritmos à programas de computador
Sérgio Souza Costa
 
Introdução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmosIntrodução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmos
Sérgio Souza Costa
 
Minicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficosMinicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficos
Sérgio Souza Costa
 
Modelagem de dados geográficos
Modelagem de dados geográficosModelagem de dados geográficos
Modelagem de dados geográficos
Sérgio Souza Costa
 
Banco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de EncerramentoBanco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de Encerramento
Sérgio Souza Costa
 
Banco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagemBanco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagem
Sérgio Souza Costa
 
Banco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de aberturaBanco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de abertura
Sérgio Souza Costa
 
Linguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - IntroduçãoLinguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - Introdução
Sérgio Souza Costa
 
Gödel’s incompleteness theorems
Gödel’s incompleteness theoremsGödel’s incompleteness theorems
Gödel’s incompleteness theorems
Sérgio Souza Costa
 
Turing e o problema da decisão
Turing e o problema da decisãoTuring e o problema da decisão
Turing e o problema da decisão
Sérgio Souza Costa
 
DBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cellsDBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cells
Sérgio Souza Costa
 
Conceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetosConceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetos
Sérgio Souza Costa
 
Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)
Sérgio Souza Costa
 
Herança e Encapsulamento
Herança e EncapsulamentoHerança e Encapsulamento
Herança e Encapsulamento
Sérgio Souza Costa
 
Relações (composição e agregação)
Relações (composição e agregação)Relações (composição e agregação)
Relações (composição e agregação)
Sérgio Souza Costa
 
Abstract classes and interfaces
Abstract classes and interfacesAbstract classes and interfaces
Abstract classes and interfaces
Sérgio Souza Costa
 
Introdução ao Prolog
Introdução ao PrologIntrodução ao Prolog
Introdução ao Prolog
Sérgio Souza Costa
 
Heap - Python
Heap - PythonHeap - Python
Heap - Python
Sérgio Souza Costa
 
Paradigma lógico
Paradigma lógicoParadigma lógico
Paradigma lógico
Sérgio Souza Costa
 

Mais de Sérgio Souza Costa (20)

Expressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicasExpressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicas
 
De algoritmos à programas de computador
De algoritmos à programas de computadorDe algoritmos à programas de computador
De algoritmos à programas de computador
 
Introdução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmosIntrodução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmos
 
Minicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficosMinicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficos
 
Modelagem de dados geográficos
Modelagem de dados geográficosModelagem de dados geográficos
Modelagem de dados geográficos
 
Banco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de EncerramentoBanco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de Encerramento
 
Banco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagemBanco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagem
 
Banco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de aberturaBanco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de abertura
 
Linguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - IntroduçãoLinguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - Introdução
 
Gödel’s incompleteness theorems
Gödel’s incompleteness theoremsGödel’s incompleteness theorems
Gödel’s incompleteness theorems
 
Turing e o problema da decisão
Turing e o problema da decisãoTuring e o problema da decisão
Turing e o problema da decisão
 
DBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cellsDBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cells
 
Conceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetosConceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetos
 
Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)
 
Herança e Encapsulamento
Herança e EncapsulamentoHerança e Encapsulamento
Herança e Encapsulamento
 
Relações (composição e agregação)
Relações (composição e agregação)Relações (composição e agregação)
Relações (composição e agregação)
 
Abstract classes and interfaces
Abstract classes and interfacesAbstract classes and interfaces
Abstract classes and interfaces
 
Introdução ao Prolog
Introdução ao PrologIntrodução ao Prolog
Introdução ao Prolog
 
Heap - Python
Heap - PythonHeap - Python
Heap - Python
 
Paradigma lógico
Paradigma lógicoParadigma lógico
Paradigma lógico
 

Java - Introdução a banco de dados

  • 1. Java - Introdução a banco de dados Prof: Sérgio Souza Costa
  • 2. Sobre mim Sérgio Souza Costa Professor - UFMA Doutor em Computação Aplicada (INPE) prof.sergio.costa@gmail.com https://sites.google.com/site/profsergiocosta/home https://twitter.com/profsergiocosta http://gplus.to/sergiosouzacosta http://www.slideshare.net/skosta/presentations?order=popular
  • 3. Introdução • Sistemas computacionais compartilham algumas necessidades comuns – Armazenar e recuperar informação (persistência) – Interagir com o usuário
  • 4. Introdução • Sistemas computacionais compartilham algumas necessidades comuns – Armazenar e recuperar informação (persistência) – Interagir com o usuário
  • 5. Persistência Armazenar e recuperar informações eficientemente é em si um grande desafio.
  • 6. Persistência • Armazenar e recuperar informações eficientemente é em si um grande desafio. • Nossas aplicações precisam resolver outros desafios específicos do problema. • Persistência é um serviço oferecido por diversas empresas e instituições, como Oracle, Microsoft, GNU ( MySQL, Postgres) ..
  • 7. JDBC O Java disponibiliza o JDBC, um framework para acesso a diferentes servidores de Banco De Dados:
  • 9. Primeiro desafio. Fazer uma agenda de contatos.
  • 10. Onde você irá salvar os dados ?
  • 11. Usarei um servidor de banco de dados, que é uma aplicação especializada para armazenar e recuperar dados
  • 12. CREATE TABLE contato ( email text, nome text, telefone text ); Primeiro, criar um banco e uma tabela em um dado SGBD. Por exemplo:
  • 13. Como minha aplicação irá acessar o servidor ?
  • 14. Em outras linguagens faço assim: 1. Abro uma conexão com o meu servidor de banco de dados 2. Depois uso o SQL para recuperar e armazenar dados.
  • 15. Porém, como fazer isso no Java ? Preciso pesquisar.
  • 18. Connection conn; String url = "jdbc:postgresql://localhost/contatos?user=postgres&password=postgres"; try { conn = DriverManager.getConnection(url); System.out.println("conectado"); } catch(SQLException excecao) { throw new RuntimeException(excecao); } Já sei como abrir uma conexão, mas não está funcionando :(
  • 20. Vá em propriedades do projeto, e depois aba “libraries”
  • 21. Depois, click em “Add External JARs”
  • 23. Agora preciso saber como executar um SQL através do Java
  • 26. Já sei executar um SQL no servidor String sql = "INSERT INTO contato(nome,email, telefone) VALUES(?,?, ?)"; try { PreparedStatement stmt = conn.prepareStatement(sql); stmt.setString(1, "sergio"); stmt.setString(2, "skosta@gmail.com"); stmt.setString(3, "123"); stmt.execute(); stmt.close(); System.out.print("inserido"); } catch (SQLException u) { throw new RuntimeException(u); }
  • 27. Recuperar é o mesmo procedimento 1. Abro uma conexão com o meu servidor de banco de dados 2. Depois uso o SQL para recuperar os dados . 3. Depois manipula o resultado, normalmente armazenado em um resultset
  • 30. String sql = "select * from contato"; try { PreparedStatement stmt = conn.prepareStatement(sql); ResultSet rs = stmt.executeQuery(); while (rs.next()) { System.out.println("Nome:"+rs.getString("nome")); System.out.println("Email:"+rs.getString("email")); } stmt.close(); } catch (SQLException u) { throw new RuntimeException(u); }
  • 31. O que acharam das minhas aplicações Java ? Podem testar funciona ☺
  • 32. Funciona … porém não está utilizando os recursos da programação orientada a objetos
  • 33. Em Java, nós usamos orientação objeto, você precisa pesquisar mais sobre este paradigma.
  • 35. OK. Vou pesquisar mais um pouco ....
  • 38. Entendi, eu crio classes que definem responsabilidades. Então já sei como melhorar minha aplicação
  • 39. public class Contato { private String nome; private String email; private String phone; public Contato(String n, String e, String p) { this.nome = n; this.email = e; this.phone = p; } public void salvaNoBanco () {….} } Faço uma classe contato que é responsável por salvá-la no banco ☺
  • 40. public class CadastraContato { public static void main(String[] args) { Contato contato = new Contato (”sergio", skosta@gmail.com, “123”); contato .salvaNoBanco(); } } Depois basta instanciar um objeto e executar o método salvaNoBanco
  • 41. Agora a solução ficou boa né ? O que vocês acham ?
  • 42. Está melhor, mas você não devia misturar codigo específico de banco de dados dentro da sua classe contato.
  • 43. Ja OUVIU falar em POJO (Plain Old Java Objects) ? Mantenha sua classe contato simples, e delegue operações de banco de dados para outra classe
  • 44. Esses desenvolvedores, nunca estão satisfeitos. Vou pesquisar mais um pouco
  • 47. Acho que já sei como resolver 1. Crio uma classe POJO 2. Depois outra classe para salvar no banco
  • 48. public class Contato { private String nome; private String email; private String telefone; String getNome() { return nome; } void setNome(String nome) { this.nome = nome; } …. } Minha classe POJO
  • 49. public class ContatoDAO { private Connection connection; private String url = "jdbc:postgresql://localhost/contatos?user=postgres&password=postgres"; public ContatoDAO() { try { conn = DriverManager.getConnection(url); System.out.println("conectado"); } catch (SQLException excecao) { throw new RuntimeException(excecao); } } public void adiciona(Contato Contato) {….} } Minha classe DAO que salva no banco … abrindo conexão
  • 50. public void adiciona(Contato Contato) { String sql = "INSERT INTO Contato( nome,email,telefone) VALUES(?,?,?)” try { PreparedStatement stmt = connection.prepareStatement(sql); stmt.setString(1, Contato.getNome()); stmt.setString(2, Contato.getEmail()); stmt.setString(3, Contato.getTelefone()); stmt.execute(); stmt.close(); } catch (SQLException u) { throw new RuntimeException(u); } } O Método que salva um contato no banco.
  • 51. public class CadastraContato { public static void main(String[] args) { Contato contato = new Contato(); contato.setNome("sergio"); contato.setEmail("skosta@gmail.com"); contato.setTelefone("123"); ContatoDAO dao = new ContatoDAO(); dao.adiciona(contato); } } Então minha aplicação cliente precisa apenas ….
  • 52. Parabéns ! Ficou muito melhor.
  • 53. ATIVIDADE: Modifiquem a classe ContatoDAO, para permitir a recuperação dos dados. O método irá retornar uma coleção de Contatos: public List<Contato> recuperarContatos() { // codigo aqui }
  • 54. Laboratório Um aplicativo de “Cadastro de Contatos” em Swing
  • 55. Cadastro de contatos • Montem a seguinte interface. • Alterem o nome das variáveis referentes as caixas de textos e botões. • Usem nomes sugestivos e sigam um “padrão”. Exemplo, btnCadastrar, btnLimpar, txtNome, txtEmail
  • 56. Codifiquem a ação “Sair”, similar ao que fizemos na aulas sobre interface gráfica
  • 57. Evitando fechamento acidental. Peça uma confirmação do usuário.
  • 58. O Java oferece uma classe que cria este tipo de “caixas”, de mensagem, confirmação e entrada de usuário. private void btnSairActionPerformed(java.awt.event.ActionEvent evt) { int confirm = JOptionPane.showConfirmDialog (this, "Deseja Realmente fechar a aplicação?", "Sair - Confirmação", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); if (confirm == JOptionPane.YES_OPTION) { System.exit(1); } }
  • 59. JOptionPane.showMessageDialog ( null, "Montando uma caixa de Dialogo sem ícone", "Mensagem", JOptionPane.PLAIN_MESSAGE ); int opcao = JOptionPane.showConfirmDialog ( null, "Deseja terminar ?", "Mensagem Final", JOptionPane.YES_NO_OPTION , JOptionPane.QUESTION_MESSAGE ) String numero=JOptionPane.showInputDialog ( null ,"Digite uma informação qualquer” ,"Entrada de dados", JOptionPane.QUESTION_MESSAGE );
  • 60. Defina o “mnemonic” para cada botão. Facilita o uso direto pelo teclado.
  • 61. Codifique a ação limpar, como fizemos em aula passada.
  • 62. Codifique a ação cadastrar. No fim da ação, mostre uma mensagem para o usuário que foi salva com sucesso.
  • 63. Vamos usar o banco de dados “contato”, o mesmo utilizado na aula sobre banco de dados.
  • 64. Além disso, usaremos a mesma estrutura. As classes Contato e ContatoDao.
  • 65. Contudo, faremos uma classe para abrir a conexão. A ConnectionFactory public class ConnectionFactory { public Connection getConnection() { String url = "jdbc:postgresql://localhost/contatos? user=postgres&password=postgres"; try { return DriverManager.getConnection(url); } catch(SQLException excecao) { throw new RuntimeException(excecao); } }
  • 66. A ConnectionFactory será usada no construtor da ContatoDAO. public ContatoDAO() { connection = new ConnectionFactory().getConnection(); }
  • 67. Depois de testado o aplicativo, substitua o textfield do telefone por um formattedtextfield.
  • 68. Inclua os imports ao código fonte e o código para configurar a máscara em personalizar codigo. MaskFormatter mascara; try { mascara = new MaskFormatter( "(##)#####-####"); mascara.setPlaceholderCharacter('_'); fmttxtFone.setFormatterFactory ( new DefaultFormatterFactory(mascara)); } catch (ParseException ex) { } import javax.swing.text.DefaultFormatterFactory; import javax.swing.text.MaskFormatter;