package dao;
import domain.Cidade;
import domain.Endereco;
import domain.Funcionario;
import domain.UF;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;
import util.Conexao;
import util.ConexaoException;
import util.MinhaException;
public class FuncionarioJDBCDao implements FuncionarioDao {
private Conexao connection;
public Conexao getConnection () {
return connection;
}
public void setConnection (Conexao val) {
this.connection = val;
}
public Vector<Funcionario> selecionarTodosFuncionarios() throws MinhaException, ConexaoException, SQLException{
this.connection = FabricaConexao.obterConexao();
String sql = "SELECT f.*, " +
"cid.nome_cidade as nome_cidade, " +
"uf.sigla_uf as sigla_uf, " +
"uf.nome_uf as nome_uf " +
"FROM funcionario f, " +
"cidade cid, " +
"uf " +
"WHERE f.cod_cidade = cid.cod_cidade and " +
"cid.sigla_uf = uf.sigla_uf ; ";
PreparedStatement pStmt = this.connection.prepareStatement(sql);
ResultSet result = pStmt.executeQuery();
Vector<Funcionario> funcionarios = new Vector<Funcionario>();
if(result == null || !result.next()) {
throw new MinhaException("Não existem Funcionarios cadastrados no Sistema !");
}
else{
do{
Funcionario funcionario = new Funcionario();
Endereco endereco = new Endereco();
Cidade cid = new Cidade();
UF uf = new UF();
uf.setUF(result.getString("sigla_uf"));
uf.setNomeUF(result.getString("nome_uf"));
cid.setCodCidade(result.getInt("cod_cidade"));
cid.setNomeCidade(result.getString("nome_cidade"));
cid.setUF(uf);
endereco.setNomeRua(result.getString("rua"));
endereco.setNumero(result.getInt("numero_casa"));
endereco.setNomeBairro(result.getString("bairro"));
endereco.setCidade(cid);
funcionario.setCodFuncionario(result.getInt("cod_funcionario"));
funcionario.setNome(result.getString("nome"));
funcionario.setCpf(result.getString("cpf"));
funcionario.setEmail(result.getString("email"));
funcionario.setTelefone(result.getString("telefone"));
funcionario.setLogin(result.getString("login"));
funcionario.setSenha(result.getString("senha"));
funcionario.setDataNasc((result.getDate("data_nasc")));
funcionario.setCargo(result.getString("cargo"));
funcionario.setEndereco(endereco);
funcionarios.add(funcionario);
}while(result.next());
}
return funcionarios;
}
public Vector<Funcionario> selecionarFuncionario(String login) throws MinhaException, ConexaoException, SQLException {
this.connection = FabricaConexao.obterConexao();
String sql = "SELECT * FROM funcionario where login ='"+login+"';";
PreparedStatement pStmt = this.connection.prepareStatement(sql);
ResultSet result = pStmt.executeQuery();
result.next();
Vector<Funcionario> funcionariosEncontrados = new Vector<Funcionario>();
do{
Funcionario funcionario = new Funcionario();
Endereco endereco = new Endereco();
Cidade cidade = new Cidade();
cidade.setCodCidade(result.getInt("cod_cidade"));
endereco.setNomeRua(result.getString("rua"));
endereco.setNumero(result.getInt("numero_casa"));
endereco.setNomeBairro(result.getString("bairro"));
endereco.setCidade(cidade);
/*0*/ funcionario.setCodFuncionario(result.getInt("cod_funcionario"));
/*1*/ funcionario.setNome(result.getString("nome"));
/*2*/ funcionario.setCpf(result.getString("cpf"));
/*3*/ funcionario.setLogin(result.getString("login"));
/*4*/ funcionario.setSenha(result.getString("senha"));
/*5*/ //funcionario.setEmail(result.getString("email"));
/*6*/ //funcionario.setTelefone(result.getString("telefone"));
/*7*/ //funcionario.setDataNasc((result.getDate("datanascimento")));
/*8*/ funcionario.setCargo(result.getString("cargo"));
/*9*/ funcionario.setEndereco(endereco);
funcionariosEncontrados.add(funcionario);
}while(result.next());
this.connection.close();
return funcionariosEncontrados;
}
public void removerFuncionario(Funcionario funcionario) throws MinhaException, SQLException, ConexaoException {
this.connection = FabricaConexao.obterConexao();
this.connection.setAutoCommit(true);
String sql = "DELETE FROM funcionario WHERE cod_funcionario = ? ;";
PreparedStatement pStmt = this.connection.prepareStatement(sql);
pStmt.setInt(1, funcionario.getCodFuncionario());
pStmt.executeUpdate();
this.connection.close();
}
public void alterarFuncionario(Funcionario funcionario) throws MinhaException, SQLException, ConexaoException {
this.connection = FabricaConexao.obterConexao();
this.connection.setAutoCommit(true);
String sql = "UPDATE funcionario " +
"SET nome = ?, " +
"cpf = ?, " +
"data_nasc = ?, " +
"rua = ?, " +
"numero_casa = ?, " +
"bairro = ?, " +
"email = ?, " +
"telefone = ?, " +
"login = ?, " +
"senha = ?, " +
"cargo = ?, " +
"cod_cidade = ? " +
"WHERE cod_funcionario = ? ;";
PreparedStatement pStmt = this.connection.prepareStatement(sql);
pStmt.setString(1, funcionario.getNome());
pStmt.setString(2, funcionario.getCpf());
pStmt.setDate(3,(Date) funcionario.getDataNasc());
pStmt.setString(4, funcionario.getEndereco().getNomeRua());
pStmt.setInt(5, funcionario.getEndereco().getNumero());
pStmt.setString(6, funcionario.getEndereco().getNomeBairro());
pStmt.setString(7, funcionario.getEmail());
pStmt.setString(8, funcionario.getTelefone());
pStmt.setString(9, funcionario.getLogin());
pStmt.setString(10, funcionario.getSenha());
pStmt.setString(11, funcionario.getCargo());
pStmt.setInt(12, funcionario.getEndereco().getCidade().getCodCidade());
pStmt.setInt(13, funcionario.getCodFuncionario());
pStmt.executeUpdate();
this.connection.close();
}
public boolean inserirFuncionario(Funcionario funcionario) throws MinhaException, ConexaoException, SQLException {
this.connection = FabricaConexao.obterConexao();
try
{
this.connection.setAutoCommit(false);
String sql = "INSERT INTO funcionario(nome, cpf, data_nasc, rua, numero_casa, bairro, email, telefone, login, senha, cargo, cod_cidade) " +
"VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);";
PreparedStatement pStmt = this.connection.prepareStatement(sql);
pStmt.setString(1, funcionario.getNome());
pStmt.setString(2, funcionario.getCpf());
pStmt.setDate(3,(Date) funcionario.getDataNasc());
pStmt.setString(4, funcionario.getEndereco().getNomeRua());
pStmt.setInt(5, funcionario.getEndereco().getNumero());
pStmt.setString(6, funcionario.getEndereco().getNomeBairro());
pStmt.setString(7, funcionario.getEmail());
pStmt.setString(8, funcionario.getTelefone());
pStmt.setString(9, funcionario.getLogin());
pStmt.setString(10, funcionario.getSenha());
pStmt.setString(11, funcionario.getCargo());
pStmt.setInt(12, funcionario.getEndereco().getCidade().getCodCidade());
pStmt.executeUpdate();
this.connection.commit();
}
catch(SQLException erro)
{
this.connection.rollback();
throw erro;
}
finally
{
this.connection.close();
return true;
}
}
public Vector<Funcionario> selecionarFuncionariosPorCargo(String cargo) throws MinhaException, ConexaoException, SQLException {
this.connection = FabricaConexao.obterConexao();
String sql = "SELECT * FROM funcionario " +
"WHERE cargo = ? ;";
PreparedStatement pStmt = this.connection.prepareStatement(sql);
pStmt.setString(1, cargo);
ResultSet result = pStmt.executeQuery();
result.next();
Vector<Funcionario> funcionariosEncontrados = new Vector<Funcionario>();
do{
Funcionario funcionario = new Funcionario();
Endereco endereco = new Endereco();
Cidade cidade = new Cidade();
cidade.setCodCidade(result.getInt("cod_cidade"));
endereco.setNomeRua(result.getString("rua"));
endereco.setNumero(result.getInt("numero_casa"));
endereco.setNomeBairro(result.getString("bairro"));
endereco.setCidade(cidade);
funcionario.setCodFuncionario(result.getInt("cod_funcionario"));
funcionario.setNome(result.getString("nome"));
funcionario.setCpf(result.getString("cpf"));
funcionario.setEmail(result.getString("email"));
funcionario.setTelefone(result.getString("telefone"));
funcionario.setDataNasc((result.getDate("data_nasc")));
funcionario.setCargo(result.getString("cargo"));
funcionario.setEndereco(endereco);
funcionariosEncontrados.add(funcionario);
}while(result.next());
this.connection.close();
return funcionariosEncontrados;
}
public Funcionario selecionarFuncionariosPorNome(String nome) throws MinhaException, ConexaoException, SQLException {
this.connection = FabricaConexao.obterConexao();
Funcionario funcionario = new Funcionario();
String sql = "SELECT * FROM funcionario " +
"WHERE nome = ? ;";
PreparedStatement pStmt = this.connection.prepareStatement(sql);
pStmt.setString(1, nome);
ResultSet result = pStmt.executeQuery();
result.next();
do{
Endereco endereco = new Endereco();
Cidade cidade = new Cidade();
cidade.setCodCidade(result.getInt("cod_cidade"));
endereco.setNomeRua(result.getString("rua"));
endereco.setNumero(result.getInt("numero_casa"));
endereco.setNomeBairro(result.getString("bairro"));
endereco.setCidade(cidade);
funcionario.setCodFuncionario(result.getInt("cod_funcionario"));
funcionario.setNome(result.getString("nome"));
funcionario.setCpf(result.getString("cpf"));
funcionario.setEmail(result.getString("email"));
funcionario.setTelefone(result.getString("telefone"));
funcionario.setDataNasc(result.getDate("data_nasc"));
funcionario.setCargo(result.getString("cargo"));
funcionario.setEndereco(endereco);
}while(result.next());
this.connection.close();
return funcionario;
}
}