JDBC CRIANDO O BANCO DE DADOS: Siga as instruções para instalar o banco de dados H2 e criar a tabela Alunos. CRIANDO O PROJETO JAVA PARA DESKTOP: Crie um projeto Java chamado Prograd Crie um pacote chamado br.edu.ufabc.prograd.modelo Dentro do pacote que você acabou de criar, crie uma classe chamada Aluno que deve ter o seguinte código: package br.edu.ufabc.prograd.modelo; public class Aluno { private Long id; private String nome; private String email; private String endereco; 1 Observe que criamos o atributo id do tipo Long não do tipo long, porque Long inicia o atributo com valor default null. Fazemos assim para não dar erro na inserção do banco de dados. 2 Vamos transformar a classe Aluno em um javabean. Javabeans são classes que possuem o construtor sem argumentos e métodos de acesso do tipo get e set. Para fazer isso de forma automática no Eclipse, use o atalho ctrl + 3 e digite generate. Dentre as opções trazidas, selecione Generate Getters and Setters. Na janela que abrir, selecione todos os atributos. 3 Crie um pacote chamado br.edu.ufabc.prograd.testes 4 Dentro do pacote recém-criado, crie uma classe chamada CriaAluno que deve ter o seguinte código: package br.edu.ufabc.prograd.testes; import br.edu.ufabc.prograd.modelo.aluno; public class CriaAluno { public static void main(string[] args) throws SQLException { Aluno aluno = new Aluno(); aluno.setnome("jack"); aluno.setemail("jack@gmail.com"); aluno.setendereco("av. dos Estados, 5001"); aluno.setid((long) 3); // se essa conversão de tipo (casting) der erro no Java 1.8, modifique o comando para: aluno.setid(new Long(3));
System.out.println(aluno.getNome()); System.out.println(aluno.getEmail()); System.out.println(aluno.getEndereco()); System.out.println(aluno.getId()); CONECTANDO O BANCO DE DADOS AO PROJETO JAVA: Crie um pacote que será responsável pelas conexões com o BD: br.edu.ufabc.prograd.jdbc JDBC (Java DataBase Connectivity): conjunto de interfaces bem definidas dentro do pacote java.sql; driver JDBC: classes concretas que fazem ponte entre API JDBC e o BD; no pacote br.edu.ufabc.prograd.jdbc, crie uma classe chamada ConnectionFactory com o código: package br.edu.ufabc.prograd.jdbc; public class ConnectionFactory { public Connection getconnection(){ System.out.println("Conectando ao banco de dados"); // a linha abaixo não é mais necessária a partir do JDBC 4 (Java 6) //Class.forName("org.h2.Driver"); return DriverManager.getConnection("jdbc:h2:tcp://localhost/~poo","admin","admin"); catch (Exception e) { adicione os imports necessários (java.sql.connection e java.sql.drivermanager); adicione o driver do H2 (um arquivo JAR) contendo a implementação JDBC do H2 ao classpath do projeto. O driver do H2 chama-se h2-1.4.182.jar e encontra-se dentro da pasta h2, pasta bin. Para incluir o driver do banco de dados: clique direito sobre o projeto, opção Build Path -> Configure Build Path -> Libraries -> Add External JARs teste a conexão na classe CriaAluno com o código: // testando conexão Connection connection = new ConnectionFactory().getConnection(); System.out.println("Conexão estabelecida"); connection.close(); sempre tratar exceções e sempre lembrar de fechar conexões do BD; importância de criar uma fábrica de conexões: um único lugar para mudar, caso necessário; possibilidade de criar pooling de conexões; seguimos padrões de projeto a respeito de encapsular construção de objetos complicados (livro Padrões de Projeto da Gang of four);
ACESSANDO E MODIFICANDO OS DADOS DO BANCO DE DADOS (INSERIR): Crie um pacote que será responsável por objetos de acessos aos dados (DAO - Data Access Object): br.edu.ufabc.prograd.dao nesse pacote, crie um Javabean AlunoDAO; lembre-se de importar a classe java.sql (cuidado para não confundir com a classe com.sql); coloque a conexão com o banco de dados no construtor do AlunoDAO: public class AlunoDAO { private Connection connection; public AlunoDAO() { this.connection = new ConnectionFactory().getConnection(); Na classe AlunoDAO, implemente a inserção de registros: (?,?,?)"; public void insere(aluno aluno) { String sql = "insert into alunos (nome,email,endereco) values // prepared statement para inserção PreparedStatement stmt = connection.preparestatement(sql); // seta valores stmt.setstring(1, aluno.getnome()); stmt.setstring(2, aluno.getemail()); stmt.setstring(3, aluno.getendereco()); //executa // fecha statement catch (SQLException e) { modifique a classe CriaAluno, acrescentando um código para testar o método de inserção: // gravando registro dao.insere(aluno); System.out.println("Gravado!"); Quais são os problemas com a SQL abaixo? String sql = "insert into alunos (nome,email,endereco) values ('"+nome+"','"+email+"'+'"+endereco+"')"; 1. difícil de ler; mais provável de ocorrer erros;
preconceito contra Joana D'Arc; SQL Injection: técnica usada para atacar aplicações orientadas a dados. Ilustração: http://xkcd.com/327/ é necessário sanitizar as entradas do BD: tratar entradas (caracteres especiais, etc); mais genérico e mais seguro: String sql = "insert into alunos (nome,email,endereco) values (?,?,?)"; 1. PreparedStatement: interface para executar as cláusulas, faz sanitização das entradas do BD; ACESSANDO E MODIFICANDO OS DADOS DO BANCO DE DADOS (REMOVER, ALTERAR E LISTAR): Implemente a remoção de registros: public void remove(aluno aluno) { PreparedStatement stmt = connection.preparestatement("delete from alunos where id=?"); stmt.setlong(1, aluno.getid()); catch (SQLException e) { modifique a classe CriaAluno, acrescentando um código para testar o método de remoção (não esqueça de setar o id do registro a ser modificado): // removendo registro dao.remove(aluno); System.out.println("Removido!"); implemente a alteração de registros: id=?"; public void altera(aluno aluno) { String sql = "update alunos set nome=?, email=?, endereco=? where PreparedStatement stmt = connection.preparestatement(sql); stmt.setstring(1, aluno.getnome()); stmt.setstring(2, aluno.getemail()); stmt.setstring(3, aluno.getendereco()); stmt.setlong(4, aluno.getid()); catch (SQLException e) {
modifique a classe CriaAluno, acrescentando um código para testar o método de alteração (não esqueça de setar o id do registro a ser modificado): // alterando registro dao.altera(aluno); System.out.println("Alterado!"); implemente a listagem dos registros: public List<Aluno> getlista() { // importar java.util List<Aluno> alunos = new ArrayList<Aluno>(); PreparedStatement stmt; stmt = this.connection.preparestatement("select * from alunos order by nome"); ResultSet rs = stmt.executequery(); // importar java.sql while (rs.next()) { Aluno aluno = new Aluno(); aluno.setid(rs.getlong("id")); aluno.setnome(rs.getstring("nome")); aluno.setemail(rs.getstring("email")); aluno.setendereco(rs.getstring("endereco")); alunos.add(aluno); rs.close(); catch (SQLException e) { return alunos; modifique a classe CriaAluno, acrescentando um código para testar o método de listagem: // listando registros List<Aluno> alunos = dao.getlista(); for (Aluno aluno1 : alunos){ System.out.println("Nome: "+aluno1.getnome()+" Email: "+aluno1.getemail()+" Endereço: "+ aluno1.getendereco()); Use os métodos criados para inserir, remover, alterar e listar para fazer testes com o banco de dados através da aplicação Java. Usando o comando SQL select, cheque no BD as alterações realizadas.