[quote=java]
Será que você tem algum exemplo mais prático do uso de interfaces? aonde várias classes implementam a mesma interface? (pra que eu possa entender) [/quote]
Exemplo de classes de persistencia implementando uma interface.
[code]package br.com.agenciaviagens.dao;
import java.util.ArrayList;
public interface DAO {
public ArrayList<Object> carregarDados(Object obj, String orderBy) throws Exception;
/**
*
* @param obj
* @return primaryKey da inserção, zero em caso de falha
* @throws Exception
*/
public int inserir(Object obj) throws Exception;
public boolean alterar(Object obj) throws Exception;
public boolean excluir(Object obj) throws Exception;
}
[/code]
package br.com.agenciaviagens.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import org.apache.log4j.Logger;
import br.com.agenciaviagens.obj.Cliente;
public class ClienteDAO implements DAO {
private static Logger logger = Logger.getLogger(ClienteDAO.class);
private Connection connection;
public ClienteDAO(Connection conexao){
connection = conexao;
}
@Override
public boolean alterar(Object obj) throws Exception {
Cliente cliente = (Cliente)obj;
PreparedStatement pstmt = null;
try{
pstmt = connection.prepareStatement("update CLIENTE set NOME = ?, TELEFONE = ? where ID = ?");
pstmt.setString(1, cliente.getNome());
pstmt.setString(2, cliente.getTelefone());
pstmt.setInt(3, cliente.getId());
pstmt.execute();
pstmt.close();
} catch (SQLException e) {
logger.error("Erro ao criar Statement(ClienteDAO - alterar)!");
e.printStackTrace();
return false;
}
return true;
}
@Override
public ArrayList<Object> carregarDados(Object obj, String orderBy)
throws Exception {
Cliente cliente = (Cliente)obj;
Statement stmt = null;
ResultSet rs = null;
ArrayList<Object> listaClientes = new ArrayList<Object>();
try{
stmt = connection.createStatement();
//Monta a query de busca
StringBuffer sql = new StringBuffer("select * from CLIENTE ");
if(cliente.getId() != 0){
if (sql.toString().contains("where")){
sql.append(" and ID = '").append(cliente.getId() + "'");
}else{
sql.append(" where ID = '").append(cliente.getId() + "'");
}
}
if(cliente.getNome() != null){
if (sql.toString().contains("where")){
sql.append(" and NOME like '%").append(cliente.getNome() + "%'");
}else{
sql.append(" where NOME like '%").append(cliente.getNome() + "%'");
}
}
if(cliente.getTelefone() != null){
if (sql.toString().contains("where")){
sql.append(" and TELEFONE = '").append(cliente.getTelefone() + "'");
}else{
sql.append(" where TELEFONE = '").append(cliente.getTelefone() + "'");
}
}
if(orderBy != null && !orderBy.equals("")){
sql.append(" order by ").append(orderBy);
}
//executa a busca
rs = stmt.executeQuery(sql.toString());
while(rs.next()){
cliente = new Cliente();
cliente.setId(rs.getInt("ID"));
cliente.setNome(rs.getString("NOME"));
cliente.setTelefone(rs.getString("TELEFONE"));
listaClientes.add(cliente);
}
rs.close();
stmt.close();
} catch (SQLException e) {
logger.error("Erro ao criar Statement(ClienteDAO - carregarDados)");
e.printStackTrace();
}
return listaClientes;
}
@Override
public boolean excluir(Object obj) throws Exception {
Cliente cliente = (Cliente)obj;
PreparedStatement pstmt = null;
try{
pstmt = connection.prepareStatement("delete from CLIENTE where ID = ?");
pstmt.setInt(1, cliente.getId());
pstmt.execute();
pstmt.close();
} catch (SQLException e) {
logger.error("Erro ao criar Statement(ClienteDAO - excluir)!");
e.printStackTrace();
return false;
}
return true;
}
@Override
public int inserir(Object obj) throws Exception {
int primaryKey = 0;
Cliente cliente = (Cliente)obj;
PreparedStatement pstmt = null;
StringBuffer query = new StringBuffer("insert into CLIENTE (NOME, TELEFONE) ").
append("VALUES (?, ?)");
try{
pstmt = connection.prepareStatement(query.toString());
pstmt.setString(1, cliente.getNome());
pstmt.setString(2, cliente.getTelefone());
pstmt.execute();
String query2 = "SELECT LAST_INSERT_ID()";
ResultSet rs = pstmt.executeQuery(query2);
if(rs.next()){
primaryKey = rs.getInt(1);
logger.info("Cliente Inserido com ID: "+primaryKey);
}
rs.close();
pstmt.close();
} catch (SQLException e) {
logger.error("Erro ao criar Statement(ClienteDAO - inserir)!");
e.printStackTrace();
return 0;
}
return primaryKey;
}
}
package br.com.agenciaviagens.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import org.apache.log4j.Logger;
import br.com.agenciaviagens.obj.Cidade;
import br.com.agenciaviagens.obj.Estado;
public class CidadeDAO implements DAO {
private static Logger logger = Logger.getLogger(CidadeDAO.class);
private Connection connection;
public CidadeDAO(Connection conexao){
connection = conexao;
}
@Override
public boolean alterar(Object obj) throws Exception {
Cidade cidade = (Cidade)obj;
PreparedStatement pstmt = null;
try{
pstmt = connection.prepareStatement("update CIDADE set DESCRICAO = ?, ESTADO = ? where ID = ?");
pstmt.setString(1, cidade.getDescricao());
pstmt.setInt(2, cidade.getEstado().getId());
pstmt.setInt(3, cidade.getId());
pstmt.execute();
pstmt.close();
} catch (SQLException e) {
logger.error("Erro ao criar Statement(CidadeDAO - alterar)!");
e.printStackTrace();
return false;
}
return true;
}
@Override
public ArrayList<Object> carregarDados(Object obj, String orderBy)
throws Exception {
Cidade cidade = (Cidade)obj;
Statement stmt = null;
ResultSet rs = null;
ArrayList<Object> listaCidades = new ArrayList<Object>();
//Busca lista de Estados para inserir às cidades
Estado estado = new Estado();
EstadoDAO estadoDAO = new EstadoDAO(connection);
ArrayList<Object> listaEstado = estadoDAO.carregarDados(estado, "");
try{
stmt = connection.createStatement();
//Monta a query de busca
StringBuffer sql = new StringBuffer("select * from CIDADE ");
if(cidade.getId() != 0){
if (sql.toString().contains("where")){
sql.append(" and ID = '").append(cidade.getId() + "'");
}else{
sql.append(" where ID = '").append(cidade.getId() + "'");
}
}
if(cidade.getDescricao() != null){
if (sql.toString().contains("where")){
sql.append(" and DESCRICAO = '").append(cidade.getDescricao() + "'");
}else{
sql.append(" where DESCRICAO = '").append(cidade.getDescricao() + "'");
}
}
if(orderBy != null && !orderBy.equals("")){
sql.append(" order by ").append(orderBy);
}
//executa a busca
rs = stmt.executeQuery(sql.toString());
while(rs.next()){
cidade = new Cidade();
cidade.setId(rs.getInt("ID"));
cidade.setDescricao(rs.getString("DESCRICAO"));
estado.setId(rs.getInt("ESTADO"));
cidade.setEstado(selecionaEstadoDaLista(estado, listaEstado));
listaCidades.add(cidade);
}
rs.close();
stmt.close();
} catch (SQLException e) {
logger.error("Erro ao criar Statement(CidadeDAO - carregarDados)");
e.printStackTrace();
}
return listaCidades;
}
public ArrayList<Object> carregarDadosPorEstado(Estado estado, String orderBy)
throws Exception {
ResultSet rs = null;
PreparedStatement pstmt = null;
ArrayList<Object> listaCidades = new ArrayList<Object>();
//Busca lista de Estados para inserir às cidades
EstadoDAO estadoDAO = new EstadoDAO(connection);
ArrayList<Object> listaEstado = estadoDAO.carregarDados(new Estado(), "");
try{
StringBuffer query = new StringBuffer("select * from CIDADE where ESTADO = ?");
if(orderBy != null && !orderBy.equals(""))
query.append(" order by ").append(orderBy);
pstmt = connection.prepareStatement(query.toString());
pstmt.setInt(1, estado.getId());
rs = pstmt.executeQuery();
while(rs.next()){
Cidade cidade = new Cidade();
cidade.setId(rs.getInt("ID"));
cidade.setDescricao(rs.getString("DESCRICAO"));
cidade.setEstado(selecionaEstadoDaLista(estado, listaEstado));
listaCidades.add(cidade);
}
pstmt.close();
} catch (SQLException e) {
logger.error("Erro ao criar Statement(CidadeDAO - carregarDadosPorEstado)!");
e.printStackTrace();
}
return listaCidades;
}
@Override
public boolean excluir(Object obj) throws Exception {
Cidade cidade = (Cidade)obj;
PreparedStatement pstmt = null;
try{
pstmt = connection.prepareStatement("delete from CIDADE where ID = ?");
pstmt.setInt(1, cidade.getId());
pstmt.execute();
pstmt.close();
} catch (SQLException e) {
logger.error("Erro ao criar Statement(CidadeDAO - excluir)!");
e.printStackTrace();
return false;
}
return true;
}
public boolean excluirPorEstado(Object obj) throws Exception{
Estado estado = (Estado)obj;
PreparedStatement pstmt = null;
try{
pstmt = connection.prepareStatement("delete from CIDADE where ESTADO = ?");
pstmt.setInt(1, estado.getId());
pstmt.execute();
pstmt.close();
} catch (SQLException e) {
logger.error("Erro ao criar Statement(CidadeDAO - excluirPorEstado)!");
e.printStackTrace();
return false;
}
return true;
}
@Override
public int inserir(Object obj) throws Exception {
int primaryKey = 0;
Cidade cidade = (Cidade)obj;
PreparedStatement pstmt = null;
try{
pstmt = connection.prepareStatement("insert into CIDADE (DESCRICAO, ESTADO) values (?, ?)");
pstmt.setString(1, cidade.getDescricao());
pstmt.setInt(2, cidade.getEstado().getId());
pstmt.execute();
String query2 = "SELECT LAST_INSERT_ID()";
ResultSet rs = pstmt.executeQuery(query2);
if(rs.next()){
primaryKey = rs.getInt(1);
logger.info("Cidade Inserida com ID: "+primaryKey);
}
rs.close();
pstmt.close();
} catch (SQLException e) {
logger.error("Erro ao criar Statement(CidadeDAO - inserir)!");
e.printStackTrace();
return 0;
}
return primaryKey;
}
private Estado selecionaEstadoDaLista(Estado estado, ArrayList<Object> listaEstado){
for (int i = 0; i < listaEstado.size(); i++) {
if( ((Estado)listaEstado.get(i)).getId() == estado.getId() ){
return (Estado)listaEstado.get(i);
}
}
return null;
}
}
veja o codigo e espero q ajude…