Buscar

Aula 9 Programação Orientada Objeto

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 11 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 11 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 11 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Programação Orientada a Objetos. 
 
1 
Prof.Fábio Rener 
 
Banco de Dados com JDBC. 
 
JDBC (Java DataBase Connectivity). 
 
Existem diversas maneiras de uma aplicação Java acessar uma base de dados (local 
ou remota), porém a maneira mais comum é através do padrão JDBC. 
O JDBC está para o Java assim como o ODBC está para outras linguagens. Tanto o 
JDBC como o ODBC são interfaces de programação através das quais é possível 
acessar bancos de dados relacionais. Existem drivers JDBC para bancos de dados 
como Oracle, Microsoft SQL Server,Sybase, MySql, entre outros. 
 
A JDBC é composta por classes agrupadas no pacote java.sql. Através dessas 
classes, é possível estabelecer uma conexão com um banco de dados, enviar 
comandos SQL, disparar stored procedures, processar resultados e controlar 
transações. 
 
Estabelecendo Conexão. 
 
Para estabelecer conexão com uma base de dados precisamos realizar duas etapas: 
 
1. Carregar o driver a ser utilizado. 
 
Antes de qualquer coisa devemos adicionar em nosso classpath o arquivo jar 
que contém o driver. 
 
 
Programação Orientada a Objetos. 
 
2 
Prof.Fábio Rener 
 
Para carregar o driver devemos utilizar o método forName da classe Class conforme o 
exemplo a seguir: 
 
 Class.forName("org.gjt.mm.mysql.Driver"); 
 
No nosso exemplo iremos utilizar uma conexão ODBC para nos ajudar a conectar no 
banco de dados Access, dessa forma devemos carregar o driver 
“sun.jdbc.odbc.JdbcOdbcDriver”. 
 
O driver ODBC já vem no pacote do java não sendo necessario importar nenhum 
outro arquivo. 
 
Iremos criar uma conexão ODBC para o banco de dados Access, seguir a orientação 
do professor para essa tarefa, na criação iremos dar um nome para a conexão ODBC, 
vamos usar o nome ANHANGUERA. 
 
2. Criando a Conexão. 
 
 String STR_CON = "jdbc:mysql://localhost:3306/nomebancodedados"; 
 Connection conn = DriverManager.getConnection(STR_CON, USER, PASSWORD); 
 
 
Devemos consultar a documentação do driver para verificar como deve ser a string de 
conexão (url) para o banco de dados. 
 
Aqui em nosso exemplo como estamos trabalhando com ODBC iremos utilizar a 
seguinte url “jdbc:odbc:ANHANGUERA” e não é necessario passar usuário e senha 
para conexão. 
 
 
 
Exemplo: 
 
package br.anhanguera.poo.dao; 
 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
 
 
public class BaseDAO { 
 
 private static final String STR_DRIVER = "sun.jdbc.odbc.JdbcOdbcDriver"; 
 private static final String STR_CON = "jdbc:odbc:ANHANGUERA"; 
 
 public static Connection getConexao() throws DAOException{ 
 Connection conn = null; 
 try { 
 // 1) Faca o carregamento do driver 
 Class.forName(STR_DRIVER); 
 // 2) Obter conexao 
 conn = DriverManager.getConnection(STR_CON); 
 return conn; 
 } catch (ClassNotFoundException e) { 
 String errorMsg = "Driver não encontrado"; 
 throw new DAOException(errorMsg, e); 
 } catch (SQLException e) { 
 String errorMsg = "Erro ao obter a conexão"; 
Programação Orientada a Objetos. 
 
3 
Prof.Fábio Rener 
 throw new DAOException(errorMsg, e); 
 } 
 } 
 
public static void closeAll(Connection conn,PreparedStatement 
stmt,ResultSet rs) { 
 try { 
 
 if (conn != null) { 
 conn.close(); 
 } 
 
 if(stmt != null){ 
 stmt.close(); 
 } 
 
 if(rs != null){ 
 rs.close(); 
 } 
 } catch (Exception e) { 
 String errorMsg = "Não foi possível fechar a conexão com o banco"; 
 DAOException.print(e, errorMsg); 
 } 
 } 
 
 
 public static void main(String args[]) { 
 Connection conn = null; 
 try { 
 conn = BaseDAO.getConexao(); 
 } catch (DAOException ge) { 
 ge.print(); 
 } finally { 
 closeAll(conn,null,null); 
 } 
 } 
} 
 
Consultando e atualizando a base de dados. 
 
Para enviar cláusulas SQL para a base de dados devemos utilizar a classe 
PreparedStatement ou Statement do pacote java.sql. 
Para realizar consultas (SELECT) utilizamos o método executeQuery. 
Para atualizar a base ou alterar tabelas utilizamos o método executeUpdate. 
Ambos os métodos estão presentes nas classes PreparedStatement e Statement. 
 
Exemplo: 
 
private final static String GET_ALL_ALUNOS = "select * from tb_aluno"; 
 
public List<Aluno> getAllAlunos() throws DAOException { 
 Connection conn = null; 
 PreparedStatement stmt = null; 
 ResultSet rs = null; 
 List<Aluno> alunos = new ArrayList<Aluno>(); 
 
 try { 
 conn = getConexao(); 
 stmt = conn.prepareStatement(GET_ALL_ALUNOS); 
 rs = stmt.executeQuery(); 
 
 while (rs.next()) { 
Aluno aluno = new Aluno(rs.getInt("id_aluno"), rs.getString("str_nome"), 
rs.getString("str_endereco"),rs.getString("str_telefone"),rs.getString("
str_rg")); 
Programação Orientada a Objetos. 
 
4 
Prof.Fábio Rener 
 
alunos.add(aluno); 
 } 
 
 }catch(SQLException e){ 
String errorMsg = "Não foi possível executar a pesquisa no banco de 
Dados!"; 
 throw new DAOException (errorMsg, e); 
 }finally{ 
 closeAll(conn, stmt, rs); 
 } 
 
 return alunos; 
} 
 
 
 
Utilizando ResultSet(Tratando Resultado). 
 
O objeto ResultSet do exemplo anterior contém os registros retornados pelo SELECT 
executado na base de dados. 
O exemplo mostra a forma de utilização do ResultSet: 
 
try { 
 conn = getConexao(); 
 stmt = conn.prepareStatement(GET_ALL_ALUNOS); 
 rs = stmt.executeQuery(); 
 
 while (rs.next()) { 
Aluno aluno = new Aluno(rs.getInt("id_aluno"), rs.getString("str_nome"), 
rs.getString("str_endereco"),rs.getString("str_telefone"),rs.getString("
str_rg")); 
 
alunos.add(aluno); 
 } 
 
 }catch(SQLException e){ 
String errorMsg = "Não foi possível executar a pesquisa no banco de 
Dados!"; 
 throw new DAOException (errorMsg, e); 
 }finally{ 
 closeAll(conn, stmt, rs); 
 } 
 
 
Podemos acessar os campos pelo nome do mesmo como no exemplo anterior, ou 
pelo seu índice, como mostrado a seguir: 
 
try { 
 conn = getConexao(); 
 stmt = conn.prepareStatement(GET_ALL_ALUNOS); 
 rs = stmt.executeQuery(); 
 
 while (rs.next()) { 
Aluno aluno = new Aluno(rs.getInt(1), rs.getString(2), 
rs.getString(3),rs.getString(4),rs.getString(5)); 
 
alunos.add(aluno); 
 } 
 
 }catch(SQLException e){ 
String errorMsg = "Não foi possível executar a pesquisa no banco de 
Dados!"; 
 throw new DAOException (errorMsg, e); 
 }finally{ 
Programação Orientada a Objetos. 
 
5 
Prof.Fábio Rener 
 closeAll(conn, stmt, rs); 
 } 
 
 
Liberação de Recursos. 
 
Após a execução dos comandos SQL em nossa aplicação devemos ter o cuidado de 
liberar todos os recursos que temos ligados a conexão efetuada, ou seja, devemos 
finalizar os objetos(Connection, PreparedStatement, Statement e ResultSet), 
geralmente fazemos isso usando a cláusula finally. 
 
Exemplo: 
 
public List<Aluno> getAllAlunos() throws DAOException { 
 Connection conn = null; 
 PreparedStatement stmt = null; 
 ResultSet rs = null; 
 List<Aluno> alunos = new ArrayList<Aluno>(); 
 
 try { 
 conn = getConexao(); 
 stmt = conn.prepareStatement(GET_ALL_ALUNOS); 
 rs = stmt.executeQuery(); 
 
 while (rs.next()) { 
Aluno aluno = new Aluno(rs.getInt("id_aluno"), rs.getString("str_nome"),rs.getString("str_endereco"),rs.getString("str_telefone"),rs.getString("
str_rg")); 
 
alunos.add(aluno); 
 } 
 
 }catch(SQLException e){ 
String errorMsg = "Não foi possível executar a pesquisa no banco de 
Dados!"; 
 throw new DAOException (errorMsg, e); 
 }finally{ 
 closeAll(conn, stmt, rs); 
 } 
 
 return alunos; 
} 
 
Em nossa classe BaseDAO, temos o método closeAll que é responsável por encerrar 
a utilização dos recursos ligados a uma conexão. 
 
public static void closeAll(Connection conn,PreparedStatement stmt,ResultSet 
rs) { 
 
try { 
 
 if (conn != null) { 
 conn.close(); 
 } 
 
 if(stmt != null){ 
 stmt.close(); 
 } 
 
 if(rs != null){ 
 rs.close(); 
 } 
 } catch (Exception e) { 
 String errorMsg = "Não foi possível fechar a conexão com o banco"; 
Programação Orientada a Objetos. 
 
6 
Prof.Fábio Rener 
 DAOException.print(e, errorMsg); 
 } 
} 
 
Vamos analisar um pequeno projeto: 
 
 
 
Explicação dos pacotes. 
 
br.anhanguera.poo.dao – Pacote com classes que implementam o pattern DAO, 
dentro dele temos a classe BaseDAO que será herdada por todas as classes, esse 
SuperClasse contém os métodos para criação e finalização de recursos ligados ao 
banco de dados. 
 
package br.anhanguera.poo.dao; 
 
 
public class DAOException extends Exception { 
 
 private static final long serialVersionUID = -471445208566549759L; 
 
 public DAOException(String mensagem, Exception e) { 
 super(mensagem, e); 
 } 
 
 public DAOException(String mensagem) { 
 super(mensagem); 
 } 
 
 public static void print(Exception e, String mensagem) { 
 System.out.println("==============Exception==============="); 
 System.out.println(mensagem); 
 System.out.println("PrintStackTrace: "); 
 e.printStackTrace(); 
 System.out.println("============End Exception============="); 
 } 
 
 public void print() { 
 System.out.println("==============Exception==============="); 
 System.out.println(getMessage()); 
 System.out.println("PrintStackTrace: "); 
 getCause().printStackTrace(); 
 System.out.println("============End Exception============="); 
 } 
} 
 
Programação Orientada a Objetos. 
 
7 
Prof.Fábio Rener 
 
package br.anhanguera.poo.dao; 
 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
 
 
public class BaseDAO { 
 
 private static final String STR_DRIVER = "sun.jdbc.odbc.JdbcOdbcDriver"; 
 private static final String STR_CON = "jdbc:odbc:ANHANGUERA"; 
 
 public static Connection getConexao() throws DAOException{ 
 Connection conn = null; 
 try { 
 // 1) Faca o carregamento do driver 
 Class.forName(STR_DRIVER); 
 // 2) Obter conexao 
 conn = DriverManager.getConnection(STR_CON); 
 return conn; 
 } catch (ClassNotFoundException e) { 
 String errorMsg = "Driver nao encontrado"; 
 throw new DAOException(errorMsg, e); 
 } catch (SQLException e) { 
 String errorMsg = "Erro ao obter a conexao"; 
 throw new DAOException(errorMsg, e); 
 } 
 } 
 
public static void closeAll(Connection conn,PreparedStatement 
stmt,ResultSet rs) { 
 try { 
 if (conn != null) { 
 conn.close(); 
 } 
 
 if(stmt != null){ 
 stmt.close(); 
 } 
 
 if(rs != null){ 
 rs.close(); 
 } 
 } catch (Exception e) { 
 String errorMsg = "Não foi possível fechar a conexão com o banco"; 
 DAOException.print(e, errorMsg); 
 } 
 } 
 
 
 public static void main(String args[]) { 
 Connection conn = null; 
 try { 
 conn = BaseDAO.getConexao(); 
 } catch (DAOException ge) { 
 ge.print(); 
 } finally { 
 closeAll(conn,null,null); 
 } 
 } 
} 
 
 
 
Programação Orientada a Objetos. 
 
8 
Prof.Fábio Rener 
package br.anhanguera.poo.dao; 
 
import java.sql.Connection; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.util.ArrayList; 
import java.util.List; 
 
import br.anhanguera.poo.to.Aluno; 
 
public class AlunoDAO extends BaseDAO{ 
 
 // constante com o comando de insert na tabela de alunos 
 private final static String INSERIR_ALUNO = "insert into tb_aluno 
(str_nome,str_endereco,str_telefone,str_rg) values (?,?,?,?)"; 
 
// constante com o comando de update na tabela de alunos 
private final static String ATUALIZAR_ALUNO = "update tb_aluno set 
str_nome=?, str_endereco= ?, str_telefone=?, str_rg=? WHERE id_aluno = ?"; 
 
 // constante com o comando de select sem parametros 
 private final static String GET_ALL_ALUNOS = "select * from tb_aluno"; 
 
 //variavel instance sera utilizada para implementacao do pattern singleton 
 private static AlunoDAO instance = null; 
 
 //construtor privado para implementacao do pattern singleton, 
 private AlunoDAO() {} 
 
 //metodo que retorna a instancia da classe 
 public static synchronized AlunoDAO getInstance() { 
 if(instance == null){ 
 instance = new AlunoDAO(); 
 } 
 
 return instance; 
 } 
 
 public void incluir(Aluno aluno) throws DAOException { 
 
 // Criar uma variavel para a Conexao 
 Connection conn = null; 
 
 // Criar uma variavel para a PreparedStatement 
 PreparedStatement stmt = null; 
 
 try { 
 
 // Obtem uma conexao com o banco de dados 
 conn = getConexao(); 
 
// Cria um preparedStatement para o BD conseguir pre-compilar um 
SQL previamente 
 stmt = conn.prepareStatement(INSERIR_ALUNO); 
 
 // Atribui uma String para a 1a. interrogacao (nome) 
 stmt.setString(1, aluno.getStrNome()); 
 
 // Atribui uma String para a 2a. interrogacao (endereco) 
 stmt.setString(2, aluno.getStrEndereco()); 
 
 // Atribui uma String para a 3a. interrogacao (telefone) 
 stmt.setString(3, aluno.getStrTelefone()); 
 
 // Atribui uma String para a 3a. interrogacao (rg) 
// Esse coluna aceita valores nulos devemos dessa forma fazer o 
tratamento 
Programação Orientada a Objetos. 
 
9 
Prof.Fábio Rener 
if(aluno.getStrRg()!= null && 
!aluno.getStrRg().trim().equals("")){ 
 stmt.setString(4, aluno.getStrRg()); 
 }else{ 
 stmt.setNull(4, java.sql.Types.VARCHAR); 
 } 
 
 // Executa o comando junto com os parametros configurados 
 stmt.executeUpdate(); 
 
 }catch (SQLException e) { 
String errorMsg = "Não foi possível incluir o aluno no banco de 
dados,\nverifique sua operação!"; 
 //e.printStackTrace(); 
 throw new DAOException (errorMsg, e); 
 } finally { 
 // Finalizar o statement e a conexao 
 closeAll(conn, stmt,null); 
 } 
 } 
 
 public void alterar(Aluno aluno) throws DAOException { 
 
 // Criar uma variavel para a Conexao 
 Connection conn = null; 
 
 // Criar uma variavel para a PreparedStatementPreparedStatement stmt = null; 
 
 try { 
 
 // Obtem uma conexao com o banco de dados 
 conn = getConexao(); 
 
// Cria um preparedStatement para o BD conseguir pre-compilar um 
SQL previamente 
 stmt = conn.prepareStatement(ATUALIZAR_ALUNO); 
 
 // Atribui uma String para a 1a. interrogacao (nome) 
 stmt.setString(1, aluno.getStrNome()); 
 
 // Atribui uma String para a 2a. interrogacao (endereco) 
 stmt.setString(2, aluno.getStrEndereco()); 
 
 // Atribui uma String para a 3a. interrogacao (telefone) 
 stmt.setString(3, aluno.getStrTelefone()); 
 
 // Atribui uma String para a 4a. interrogacao (rg) 
// Esse coluna aceita valores nulos devemos dessa forma fazer o 
tratamento 
if(aluno.getStrRg()!= null && 
!aluno.getStrRg().trim().equals("")){ 
 stmt.setString(4, aluno.getStrRg()); 
 }else{ 
 stmt.setNull(4, java.sql.Types.VARCHAR); 
 } 
 
 // Atribui int para a 5a. interrogacao (id_aluno) 
 stmt.setInt(5, aluno.getIdAluno()); 
 
 
 // Executa o comando junto com os parametros configurados 
 stmt.executeUpdate(); 
 } catch (SQLException e) { 
String errorMsg = "Não foi possível alterar o aluno no banco de 
dados,\nverifique sua operação!"; 
 //e.printStackTrace(); 
 throw new DAOException (errorMsg, e); 
Programação Orientada a Objetos. 
 
10 
Prof.Fábio Rener 
 } finally { 
 // Finalizar o statement e a conexao 
 closeAll(conn, stmt,null); 
 } 
 } 
 
 public List<Aluno> getAllAlunos() throws DAOException { 
 Connection conn = null; 
 PreparedStatement stmt = null; 
 ResultSet rs = null; 
 List<Aluno> alunos = new ArrayList<Aluno>(); 
 try { 
 conn = getConexao(); 
 stmt = conn.prepareStatement(GET_ALL_ALUNOS); 
 rs = stmt.executeQuery(); 
 while (rs.next()) { 
Aluno aluno = new Aluno(rs.getInt("id_aluno"), 
rs.getString("str_nome")rs.getString("str_endereco"),rs.getString
("str_telefone"),rs.getString("str_rg")); 
 alunos.add(aluno); 
 } 
 } catch (SQLException e) { 
String errorMsg = "Não foi possível executar a pesquisa no banco 
de Dados!"; 
 throw new DAOException (errorMsg, e); 
 } finally { 
 closeAll(conn, stmt, rs); 
 } 
 return alunos; 
 } 
 
} 
 
 
 
 
 
 
br.anhanguera.poo.to – Pacote com classes que implementam o pattern TO. 
 
package br.anhanguera.poo.to; 
 
import java.io.Serializable; 
 
public class Aluno implements Serializable { 
 
 
 private static final long serialVersionUID = 7451493081496319340L; 
 
 private int idAluno; 
 private String strNome; 
 private String strEndereco; 
 private String strTelefone; 
 private String strRg; 
 
 
 public Aluno(){} 
 
 
 
 public Aluno(int idAluno, String strNome, String strEndereco, 
 String strTelefone, String strRg) { 
 this.idAluno = idAluno; 
 this.strNome = strNome; 
 this.strEndereco = strEndereco; 
 this.strTelefone = strTelefone; 
Programação Orientada a Objetos. 
 
11 
Prof.Fábio Rener 
 this.strRg = strRg; 
 } 
 
 
 
 public Aluno(String strNome, String strEndereco, String strTelefone, 
 String strRg) { 
 this.strNome = strNome; 
 this.strEndereco = strEndereco; 
 this.strTelefone = strTelefone; 
 this.strRg = strRg; 
 } 
 
 
 public int getIdAluno() { 
 return idAluno; 
 } 
 public void setIdAluno(int idAluno) { 
 this.idAluno = idAluno; 
 } 
 public String getStrNome() { 
 return strNome; 
 } 
 public void setStrNome(String strNome) { 
 this.strNome = strNome; 
 } 
 public String getStrEndereco() { 
 return strEndereco; 
 } 
 public void setStrEndereco(String strEndereco) { 
 this.strEndereco = strEndereco; 
 } 
 public String getStrTelefone() { 
 return strTelefone; 
 } 
 public void setStrTelefone(String strTelefone) { 
 this.strTelefone = strTelefone; 
 } 
 public String getStrRg() { 
 return strRg; 
 } 
 public void setStrRg(String strRg) { 
 this.strRg = strRg; 
 } 
 
 @Override 
 public String toString() { 
 return "Aluno [idAluno=" + idAluno + ", strNome=" + strNome 
 + ", strEndereco=" + strEndereco + ", strTelefone=" 
 + strTelefone + ", strRg=" + strRg + "]"; 
 } 
 
 
}

Outros materiais