package org.magmax.masterjava.tema10.jdbc_example.persistencia;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class CuentaDao extends DerbyDao implements GenericDao<Cuenta, String> {
private final String query_delete = "delete from cuentas where codigo=?";
private final String query_insert = "insert into cuentas (codigo,cliente,email,saldo) values (?,?,?,?)";
private final String query_update = "update cuentas set cliente=?, email=?, saldo=? where codigo=?";
private final String query_select_all = "select codigo,cliente,email,saldo from cuentas";
private final String query_select = "select codigo,cliente,email,saldo from cuentas where codigo=?";
public String create(Cuenta newInstance) throws SQLException {
Connection conn = null;
PreparedStatement st = null;
try {
conn = getConnection();
st = conn.prepareStatement(query_insert);
st.setString(1, newInstance.getCodigo());
st.setString(2, newInstance.getCliente());
st.setString(3, newInstance.getEmail());
st.setDouble(4, newInstance.getSaldo());
if (st.executeUpdate() != 1)
throw new SQLException("No se pudo crear el objeto");
} finally {
if (st != null)
st.close();
if (conn != null)
conn.close();
}
return newInstance.getCodigo();
}
public Cuenta read(String id) throws SQLException {
Connection conn = null;
PreparedStatement st = null;
ResultSet rs = null;
try {
conn = getConnection();
st = conn.prepareStatement(query_select);
st.setString(1, id);
rs = st.executeQuery();
rs.next();
Cuenta result = new Cuenta();
result.setCodigo(rs.getString(1));
result.setCliente(rs.getString(2));
result.setEmail(rs.getString(3));
result.setSaldo(rs.getDouble(4));
return result;
} finally {
if (st != null)
st.close();
if (conn != null)
conn.close();
}
}
public void update(Cuenta transientObject) throws SQLException {
Connection conn = null;
PreparedStatement st = null;
try {
conn = getConnection();
st = conn.prepareStatement(query_update);
st.setString(1, transientObject.getCliente());
st.setString(2, transientObject.getEmail());
st.setDouble(3, transientObject.getSaldo());
st.setString(4, transientObject.getCodigo());
if (st.executeUpdate() != 1)
throw new SQLException("No se pudo borrar el objeto");
} finally {
if (st != null)
st.close();
if (conn != null)
conn.close();
}
}
public void delete(Cuenta persistentObject) throws SQLException {
Connection conn = null;
PreparedStatement st = null;
try {
conn = getConnection();
st = conn.prepareStatement(query_delete);
st.setString(1, persistentObject.getCodigo());
if (st.executeUpdate() != 1)
throw new SQLException("No se pudo borrar el objeto");
} finally {
if (st != null)
st.close();
if (conn != null)
conn.close();
}
}
public List<Cuenta> findAll() throws SQLException {
Connection conn = null;
PreparedStatement st = null;
ResultSet rs = null;
List<Cuenta> result = new ArrayList<Cuenta>();
try {
conn = getConnection();
st = conn.prepareStatement(query_select_all);
rs = st.executeQuery();
while (rs.next()) {
Cuenta cuenta = new Cuenta();
cuenta.setCodigo(rs.getString(1));
cuenta.setCliente(rs.getString(2));
cuenta.setEmail(rs.getString(3));
cuenta.setSaldo(rs.getDouble(4));
result.add(cuenta);
}
return result;
} finally {
if (st != null)
st.close();
if (conn != null)
conn.close();
}
}
public void imprimeNombres(Date fecha_alta) throws SQLException {
Connection conn = null;
PreparedStatement st = null;
ResultSet rs = null;
try {
conn = getConnection();
st = conn.prepareStatement("select nombre from clientes where fecha_alta > ?");
st.setDate(1, new java.sql.Date (fecha_alta.getTime()));
rs = st.executeQuery();
while (rs.next()) {
System.out.println(rs.getString(0));
}
} finally {
if (st != null)
st.close();
if (conn != null)
conn.close();
}
}
}