package dao;
import domain.Carro;
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 CarroJDBCDao implements CarroDao {
private Conexao connection;
private String sql;
public Conexao getConnection () {
return connection;
}
public void setConnection (Conexao val) {
this.connection = val;
}
public Carro selecionarCarro(int codGrupoCar) throws MinhaException, SQLException, ConexaoException {
Carro car = new Carro();
this.connection = FabricaConexao.obterConexao();
sql = "select ca.* " +
"from carro ca " +
"where ca.cod_carro = ? ";
PreparedStatement pStmt = null;
pStmt = this.connection.prepareStatement(sql);
pStmt.setInt(1, codGrupoCar);
ResultSet result;
result = pStmt.executeQuery();
if (result == null || !result.next()) {
this.connection.close();
throw new MinhaException(" Não existe cliente cadastrado com esse CPF !");
} else {
car.setCodCarro(result.getInt("cod_carro"));
car.setMarca(result.getString("marca"));
car.setModelo(result.getString("modelo"));
car.setDescCarro(result.getString("desc_carro"));
car.setAno(result.getInt("ano"));
car.setPlaca(result.getString("placa"));
car.setChassi(result.getString("chassi"));
car.setDisponivel(result.getBoolean("disponivel"));
car.setQuilometragem(result.getInt("quilometragem"));
}
this.connection.close();
return car;
}
public int obterCodCarro(int codLocacao) throws MinhaException, SQLException, ConexaoException {
int codCarro;
this.connection = FabricaConexao.obterConexao();
sql = "select ca.cod_carro as cod "+
"from locacao as l, "+
"carro as ca "+
"where ca.cod_carro = l.cod_carro and "+
"l.cod_locacao = ? ;";
PreparedStatement pStmt = null;
pStmt = this.connection.prepareStatement(sql);
pStmt.setInt(1, codLocacao);
ResultSet result;
result = pStmt.executeQuery();
if (result == null || !result.next()) {
this.connection.close();
throw new MinhaException(" Não existe cliente cadastrado com esse CPF !");
} else {
codCarro = result.getInt("cod");
}
this.connection.close();
return codCarro;
}
public void inserirCarro(Carro carro) throws MinhaException, SQLException, ConexaoException {
this.connection = FabricaConexao.obterConexao();
try {
this.connection.setAutoCommit(true);
this.sql = "INSERT INTO carro (cod_grupo_carro, marca, modelo, ano, placa, chassi, disponivel, quilometragem, desc_carro) " +
"VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?); ";
PreparedStatement pStmt = this.connection.prepareStatement(sql);
pStmt.setInt(1, carro.getGrupoCarro().getCodGrupoCarro());
pStmt.setString(2, carro.getMarca());
pStmt.setString(3, carro.getModelo());
pStmt.setInt(4, carro.getAno());
pStmt.setString(5, carro.getPlaca());
pStmt.setString(6, carro.getChassi());
pStmt.setBoolean(7, carro.getDisponivel());
pStmt.setInt(8, carro.getQuilometragem());
pStmt.setString(9, carro.getModelo());
pStmt.executeUpdate();
this.connection.commit();
}
catch (SQLException erro) {
this.connection.rollback();
throw new MinhaException(erro.getMessage());
}
finally{
this.connection.close();
}
}
public Carro selecionarCarro(Locacao loca) throws MinhaException, SQLException, ConexaoException {
Carro carro = new Carro();
this.connection = FabricaConexao.obterConexao();
sql = "select ca.modelo, "+
"ca.placa, "+
"ca.chassi "+
" from carro ca, "+
" locacao lo "+
"where ca.cod_carro = lo.cod_carro and "+
"lo.cod_locacao = ?; ";
PreparedStatement pStmt = null;
pStmt = this.connection.prepareStatement(sql);
pStmt.setInt(1, loca.getCodLocacao());
ResultSet result;
result = pStmt.executeQuery();
if (result == null || !result.next()) {
this.connection.close();
throw new MinhaException(" Não existe cliente cadastrado com esse CPF !");
} else {
carro.setModelo(result.getString("modelo"));
carro.setPlaca(result.getString("placa"));
carro.setChassi(result.getString("chassi"));
}
this.connection.close();
return carro;
}
public void removerCarro(Carro carro) throws MinhaException, SQLException, ConexaoException {
this.connection = FabricaConexao.obterConexao();
this.connection.setAutoCommit(true);
this.sql = "DELETE FROM carro WHERE cod_carro = ? ;";
PreparedStatement pStmt = this.connection.prepareStatement(this.sql);
pStmt.setInt(1, carro.getCodCarro());
pStmt.executeUpdate();
this.connection.close();
}
public void alterarCarro(Carro carro) throws MinhaException, SQLException, ConexaoException {
this.connection = FabricaConexao.obterConexao();
this.connection.setAutoCommit(true);
this.sql = "UPDATE carro " +
"SET cod_grupo_carro = ? , " +
"marca = ? , " +
"modelo = ? , " +
"ano = ? , " +
"placa = ? , " +
"chassi = ? , " +
"disponivel = ? , " +
"quilometragem = ? , " +
"desc_carro = ? " +
"WHERE cod_carro = ? ;";
PreparedStatement pStmt = this.connection.prepareStatement(sql);
pStmt.setInt(1, carro.getGrupoCarro().getCodGrupoCarro());
pStmt.setString(2, carro.getMarca());
pStmt.setString(3, carro.getModelo());
pStmt.setInt(4, carro.getAno());
pStmt.setString(5, carro.getPlaca());
pStmt.setString(6, carro.getChassi());
pStmt.setBoolean(7, carro.getDisponivel());
pStmt.setInt(8, carro.getQuilometragem());
pStmt.setString(9, carro.getModelo());
pStmt.setInt(10, carro.getCodCarro());
pStmt.executeUpdate();
this.connection.close();
}
public Vector<Carro> selecionarTodosCarros() throws MinhaException, SQLException, ConexaoException {
this.connection = FabricaConexao.obterConexao();
this.sql = "SELECT c.cod_carro, c.cod_grupo_carro, c.marca, c.modelo, c.ano, c.placa, c.chassi, c.disponivel, c.quilometragem, gc.nome_grupo_carro " +
"FROM carro c, " +
"grupo_carro gc " +
"WHERE c.cod_grupo_carro = gc.cod_grupo_carro;";
PreparedStatement pStmt = this.connection.prepareStatement(this.sql);
ResultSet result = pStmt.executeQuery();
Vector<Carro> carrosGrupo = new Vector<Carro>();
if(result == null || !result.next())
{
this.connection.close();
return carrosGrupo;
}
else
{
do{
Carro carro = new Carro();
GrupoCarro grupoCarro = new GrupoCarro();
grupoCarro.setCodGrupoCarro(result.getInt("cod_grupo_carro"));
grupoCarro.setNomeGrupo(result.getString("nome_grupo_carro"));
carro.setCodCarro(result.getInt("cod_carro"));
carro.setMarca(result.getString("marca"));
carro.setAno(result.getInt("ano"));
carro.setModelo(result.getString("modelo"));
carro.setPlaca(result.getString("placa"));
carro.setChassi(result.getString("chassi"));
carro.setDisponivel(result.getBoolean("disponivel"));
carro.setQuilometragem(result.getInt("quilometragem"));
carro.setGrupoCarro(grupoCarro);
carrosGrupo.addElement(carro);
}while(result.next());
}
this.connection.close();
return carrosGrupo;
}
public Vector<Carro> selecionarCarrosPorGrupo(GrupoCarro grupoCarro) throws MinhaException, SQLException, ConexaoException {
this.connection = FabricaConexao.obterConexao();
this.sql = "SELECT c.* " +
"FROM carro c, " +
"grupo_carro gc " +
"WHERE c.cod_grupo_carro = gc.cod_grupo_carro and " +
" gc.cod_grupo_carro = ? and " +
" c.disponivel = TRUE ;";
PreparedStatement pStmt = this.connection.prepareStatement(this.sql);
pStmt.setInt(1, grupoCarro.getCodGrupoCarro());
ResultSet result = pStmt.executeQuery();
Vector<Carro> carrosGrupo = new Vector<Carro>();
if(result == null || !result.next())
{
this.connection.close();
return carrosGrupo;
}
else
{
do{
Carro carro = new Carro();
carro.setCodCarro(result.getInt("cod_carro"));
carro.setModelo(result.getString("modelo"));
carro.setPlaca(result.getString("placa"));
carro.setChassi(result.getString("chassi"));
carro.setDisponivel(result.getBoolean("disponivel"));
carro.setQuilometragem(result.getInt("quilometragem"));
carro.setGrupoCarro(grupoCarro);
carrosGrupo.addElement(carro);
}while(result.next());
}
this.connection.close();
return carrosGrupo;
}
public void mudarDisponibilidade(Conexao connection, Carro carro) throws SQLException{
try {
this.sql = "UPDATE carro " +
"SET disponivel = FALSE " +
"WHERE cod_carro = ? ;";
PreparedStatement pStmt = connection.prepareStatement(sql);
pStmt.setInt(1, carro.getCodCarro());
pStmt.executeUpdate();
connection.close();
} catch (SQLException erro) {
connection.rollback();
throw erro;
}
}
public void alterarKMDisponibilidade(Vector linha) throws SQLException, ConexaoException {
this.connection = FabricaConexao.obterConexao();
try
{
this.connection.setAutoCommit(false);
sql = "UPDATE carro SET "+
"quilometragem = quilometragem + ?, "+
"disponivel = true "+
"where cod_carro = ?" ;
PreparedStatement prepSt = this.connection.prepareStatement(sql);
prepSt.setInt(1, Integer.parseInt(linha.get(1).toString()));
prepSt.setInt(2, Integer.parseInt(linha.get(6).toString()));
prepSt.executeUpdate();
this.connection.commit();
}
catch(SQLException erro)
{
this.connection.rollback();
erro.printStackTrace();
}
finally
{
this.connection.close();
}
}
//obterCodCarro
/*
public Carro selecionarCarro(int codGrupoCar) throws MinhaException, SQLException, ConexaoException {
Carro car = new Carro();
this.connection = FabricaConexao.obterConexao();
String sql = "select ca.* " +
"from carro ca " +
"where ca.cod_grupo_carro = ? ";
PreparedStatement pStmt = null;
pStmt = this.connection.prepareStatement(sql);
pStmt.setInt(1, codGrupoCar);
ResultSet result;
result = pStmt.executeQuery();
if (result == null || !result.next()) {
this.connection.close();
throw new MinhaException(" Não existe cliente cadastrado com esse CPF !");
} else {
car.setCodCarro(result.getInt("cod_grupo_carro"));
car.setMarca(result.getString("marca"));
car.setModelo(result.getString("modelo"));
car.setDescCarro(result.getString("desc_carro"));
car.setAno(result.getString("ano"));
car.setPlaca(result.getString("placa"));
car.setChassi(result.getString("chassi"));
car.setDisponivel(result.getBoolean("disponivel"));
car.setQuilometragem(result.getInt("quilometragem"));
car.setValorLitroKM(result.getInt("valor_litro_km"));
}
this.connection.close();
return car;
}*/
}