package dao; import domain.Carro; import domain.Cliente; import domain.GrupoCarro; import domain.Locacao; 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 LocacaoJDBCDao implements LocacaoDao { private Conexao connection; private String sql; public Conexao getConnection () { return connection; } public void setConnection (Conexao val) { this.connection = val; } public void inserirLocacao(Locacao locacao) throws MinhaException, SQLException, ConexaoException { CarroJDBCDao carroJDBCDao = new CarroJDBCDao(); this.connection = FabricaConexao.obterConexao(); try{ sql = "INSERT INTO locacao (cod_carro, cod_cliente, quilometragem_inicial, data_locacao, data_entrega, hora_locacao, hora_entrega, quilometragem_prevista, cobertura, valor_previsto, nome_plano) " + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ; "; PreparedStatement pStmt = this.connection.prepareStatement(sql); pStmt.setInt(1, locacao.getCarro().getCodCarro()); pStmt.setInt(2, locacao.getCliente().getCodCliente()); pStmt.setInt(3, locacao.getCarro().getQuilometragem()); pStmt.setDate(4, new java.sql.Date(locacao.getDateLocacao().getTime())); pStmt.setDate(5, new java.sql.Date(locacao.getDataEntrega().getTime())); pStmt.setTime(6, locacao.getHoraLocacao()); pStmt.setTime(7, locacao.getHoraEntrega()); pStmt.setInt(8, locacao.getQuilometragemPrevista()); pStmt.setBoolean(9, locacao.getCobertura()); pStmt.setDouble(10, locacao.getValorPrevisto()); pStmt.setString(11, locacao.getPlano()); pStmt.executeUpdate(); carroJDBCDao.mudarDisponibilidade(this.connection, locacao.getCarro()); this.connection.commit(); } catch(SQLException erro){ this.connection.rollback(); erro.printStackTrace(); throw erro; } finally{ this.connection.close(); } } public void removerLocacao(Locacao locacao) throws MinhaException, SQLException, ConexaoException { this.connection = FabricaConexao.obterConexao(); this.connection.setAutoCommit(true); sql = "DELETE FROM locacao WHERE cod_locacao = ? ;"; PreparedStatement pStmt = this.connection.prepareStatement(sql); pStmt.setInt(1, locacao.getCodLocacao()); pStmt.executeUpdate(); this.connection.close(); } public void alterarLocacao(Locacao locacao) throws MinhaException, SQLException, ConexaoException { this.connection = FabricaConexao.obterConexao(); try{ this.connection.setAutoCommit(false); sql = "UPDATE locacao " + "SET cod_carro = ? ," + "cod_cliente = ?, " + "quilometragem_inicial = ? , " + "data_locacao = ? , " + "data_entrega = ? , " + "hora_locacao = ? , " + "hora_entrega = ? , " + "quilometragem_prevista = ? , " + "cobertura = ? , " + "valor_previsto = ? , " + "nome_plano = ? " + "WHERE cod_locacao = ? ; "; PreparedStatement pStmt = this.connection.prepareStatement(sql); pStmt.setInt(1, locacao.getCarro().getCodCarro()); pStmt.setInt(2, locacao.getCliente().getCodCliente()); pStmt.setInt(3, locacao.getQuilometragemInicial()); pStmt.setDate(4, new java.sql.Date(locacao.getDateLocacao().getTime())); pStmt.setDate(5, new java.sql.Date(locacao.getDataEntrega().getTime())); pStmt.setTime(6, locacao.getHoraLocacao()); pStmt.setTime(7, locacao.getHoraEntrega()); pStmt.setInt(8, locacao.getQuilometragemPrevista()); pStmt.setBoolean(9, locacao.getCobertura()); pStmt.setDouble(10, locacao.getValorPrevisto()); pStmt.setString(11, locacao.getPlano()); pStmt.setInt(12, locacao.getCodLocacao()); pStmt.executeUpdate(); this.connection.commit(); } catch(SQLException erro){ this.connection.rollback(); throw erro; } finally{ this.connection.close(); } } public Vector<Locacao> selecionarTodasLocacoes() throws MinhaException, SQLException, ConexaoException { this.connection = FabricaConexao.obterConexao(); sql = "SELECT l.cod_locacao as cod_locacao, " + "c.nome as nome, c.cod_cliente as cod_cliente, c.cpf, " + "l.data_locacao as data_locacao, l.data_entrega as data_entrega, " + "car.placa as placa, car.modelo as modelo, car.cod_carro as cod_carro, car.chassi as chassi, " + "l.quilometragem_inicial as quilometragem_inicial, l.quilometragem_prevista as quilometragem_prevista, " + "l.valor_previsto as valor_previsto, l.cobertura as cobertura, " + "l.hora_locacao as hora_locacao, hora_entrega as hora_entrega, " + "l.nome_plano " + "FROM locacao l, " + "cliente c, " + "carro car " + "WHERE l.cod_carro = car.cod_carro AND " + "l.cod_cliente = c.cod_cliente ;"; PreparedStatement pStmt = this.connection.prepareStatement(sql); ResultSet result = pStmt.executeQuery(); Vector<Locacao> locacoes = new Vector<Locacao>(); if(result == null || !result.next()) throw new MinhaException("Não existem Locações cadastrados no Sistema !"); else{ do{ Locacao locacao = new Locacao(); Cliente cliente = new Cliente(); Carro carro = new Carro(); cliente.setCodCliente(result.getInt("cod_cliente")); cliente.setNome(result.getString("nome")); cliente.setCpf(result.getString("cpf")); carro.setCodCarro(result.getInt("cod_carro")); carro.setModelo(result.getString("modelo")); carro.setPlaca(result.getString("placa")); carro.setChassi(result.getString("chassi")); locacao.setCodLocacao(result.getInt("cod_locacao")); locacao.setQuilometragemInicial(result.getInt("quilometragem_inicial")); locacao.setDateLocacao(result.getDate("data_locacao")); locacao.setDataEntrega(result.getDate("data_entrega")); locacao.setHoraLocacao(result.getTime("hora_locacao")); locacao.setHoraEntrega(result.getTime("hora_entrega")); locacao.setQuilometragemPrevista(result.getInt("quilometragem_prevista")); locacao.setValorPrevisto(result.getDouble("valor_previsto")); locacao.setCobertura(result.getBoolean("cobertura")); locacao.setPlano(result.getString("nome_plano")); locacao.setCarro(carro); locacao.setCliente(cliente); locacoes.add(locacao); }while(result.next()); } return locacoes; } public Locacao selecionarLocacao(Locacao locacao) throws MinhaException, SQLException, ConexaoException { this.connection = FabricaConexao.obterConexao(); sql = "SELECT * FROM locacao WHERE cod_locacao = ? ;"; PreparedStatement pStmt = this.connection.prepareStatement(sql); pStmt.setInt(1, locacao.getCodLocacao()); ResultSet resultSet = pStmt.executeQuery(); Locacao loc = new Locacao(); if(resultSet == null || !resultSet.next()) throw new MinhaException("Não existem Locações cadastrados no Sistema !"); else{ Carro carro = new Carro(); Cliente cliente = new Cliente(); carro.setCodCarro(resultSet.getInt("cod_carro")); cliente.setCodCliente(resultSet.getInt("cod_cliente")); loc.setCarro(carro); loc.setCliente(cliente); loc.setCobertura(resultSet.getBoolean("cobertura")); loc.setCodLocacao(resultSet.getInt("cod_locacao")); loc.setDataEntrega(resultSet.getDate("data_entrega")); loc.setDateLocacao(resultSet.getDate("data_locacao")); loc.setHoraEntrega(resultSet.getTime("hora_entrega")); loc.setHoraLocacao(resultSet.getTime("hora_locacao")); loc.setQuilometragemInicial(resultSet.getInt("quilometragem_inicial")); loc.setQuilometragemPrevista(resultSet.getInt("quilometragem_prevista")); loc.setValorPrevisto(resultSet.getDouble("valor_previsto")); } return loc; } public Locacao selecionarCarroPorCpf(String cpf) throws MinhaException, ConexaoException, SQLException { Locacao loca = new Locacao(); Cliente cliente = new Cliente(); Carro carro = new Carro(); this.connection = FabricaConexao.obterConexao(); sql = "select max(lo.cod_locacao) as codigo ,"+ "lo.cod_carro, "+ "lo.cod_cliente ,"+ "lo.quilometragem_inicial ,"+ "lo.data_locacao ,"+ "lo.data_entrega ,"+ "lo.hora_locacao ,"+ "lo.hora_entrega ,"+ "lo.quilometragem_prevista ,"+ "lo.cobertura ,"+ "lo.valor_previsto ,"+ "lo.nome_plano "+ "from locacao lo, "+ "cliente cl "+ "where lo.cod_cliente = cl.cod_cliente and "+ "cl.cpf = '"+cpf+"' "+ "group by lo.cod_carro ,"+ "lo.cod_cliente ,"+ "lo.quilometragem_inicial ,"+ "lo.data_locacao ,"+ "lo.data_entrega ,"+ "lo.hora_locacao ,"+ "lo.hora_entrega ,"+ "lo.quilometragem_prevista ,"+ "lo.cobertura ,"+ "lo.valor_previsto ,"+ "lo.nome_plano "+ "ORDER BY codigo desc "+ "LIMIT 1"; PreparedStatement pStmt = this.connection.prepareStatement(sql); ResultSet result = pStmt.executeQuery(); if(result == null || !result.next()) { this.connection.close(); throw new MinhaException(" Não existe cliente cadastrado com esse CPF !"); } else { cliente.setCodCliente(result.getInt("cod_cliente")); carro.setCodCarro(result.getInt("cod_carro")); loca.setCodLocacao(result.getInt("codigo")); loca.setQuilometragemInicial(result.getInt("quilometragem_inicial")); loca.setQuilometragemPrevista(result.getInt("quilometragem_prevista")); loca.setDataEntrega(result.getDate("data_entrega")); loca.setDateLocacao(result.getDate("data_locacao")); loca.setHoraEntrega(result.getTime("hora_entrega")); loca.setHoraLocacao(result.getTime("hora_locacao")); loca.setCobertura(result.getBoolean("cobertura")); loca.setValorPrevisto(result.getDouble("valor_previsto")); loca.setPlano(result.getString("nome_plano")); loca.setCliente(cliente); loca.setCarro(carro); } this.connection.close(); return loca; } public int obterCodLocacao(String nome) throws MinhaException, ConexaoException, SQLException { this.connection = FabricaConexao.obterConexao(); int codLoca; sql = "select max(e.cod_locacao) as cod "+ "from locacao as l, "+ "cliente as cl ,"+ "entrega as e "+ "where e.cod_locacao = l.cod_locacao and "+ "l.cod_cliente = cl.cod_cliente and "+ "cl.nome = '"+nome+"';"; PreparedStatement pStmt = this.connection.prepareStatement(sql); ResultSet result = pStmt.executeQuery(); if(result == null || !result.next()) { this.connection.close(); throw new MinhaException(" Não existe cliente cadastrado com esse CPF !"); } else { codLoca = result.getInt("cod"); } this.connection.close(); return codLoca; } }