Commit af43c1b4 by Billy Larru

modificando DAOHelper

parent f6b7360a
...@@ -14,7 +14,7 @@ import org.apache.logging.log4j.Logger; ...@@ -14,7 +14,7 @@ import org.apache.logging.log4j.Logger;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONObject; import org.json.JSONObject;
import salidasautomaticas.dao.SalidasDAO; import salidasautomaticas.dao.SalidasDAO;
import salidasautomaticas.util.EstandarDAO; import salidasautomaticas.util.DAOHelper;
/** /**
* *
...@@ -67,7 +67,7 @@ public class SalidasMysqlDAO implements SalidasDAO { ...@@ -67,7 +67,7 @@ public class SalidasMysqlDAO implements SalidasDAO {
JSONArray parametrosQuery = new JSONArray(); JSONArray parametrosQuery = new JSONArray();
parametrosQuery.put(getFechaHoy()); parametrosQuery.put(getFechaHoy());
jsonArray = EstandarDAO.getInstance().consultar(cn, query, parametrosQuery); jsonArray = DAOHelper.getInstance().consultar(cn, query, parametrosQuery);
return jsonArray; return jsonArray;
} }
...@@ -155,7 +155,7 @@ public class SalidasMysqlDAO implements SalidasDAO { ...@@ -155,7 +155,7 @@ public class SalidasMysqlDAO implements SalidasDAO {
JSONArray parametros = new JSONArray(); JSONArray parametros = new JSONArray();
parametros.put(horaProgramada); parametros.put(horaProgramada);
JSONArray jsonArray = EstandarDAO.getInstance().consultar(cn, query, parametros); JSONArray jsonArray = DAOHelper.getInstance().consultar(cn, query, parametros);
return jsonArray; return jsonArray;
} }
...@@ -196,7 +196,7 @@ public class SalidasMysqlDAO implements SalidasDAO { ...@@ -196,7 +196,7 @@ public class SalidasMysqlDAO implements SalidasDAO {
.put(aleatorioMin) .put(aleatorioMin)
.put(asistencia.getString("codasis")); .put(asistencia.getString("codasis"));
resultado = EstandarDAO.getInstance().ejecutar(cn, queryPersonal, parametros); resultado = DAOHelper.getInstance().ejecutar(cn, queryPersonal, parametros);
updateCounts[i] = resultado.getInt("msg"); updateCounts[i] = resultado.getInt("msg");
i++; i++;
......
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package salidasautomaticas.util; package salidasautomaticas.util;
import java.sql.Connection; import java.sql.Connection;
...@@ -20,187 +15,195 @@ import org.json.JSONObject; ...@@ -20,187 +15,195 @@ import org.json.JSONObject;
* *
* @author sistem19user * @author sistem19user
*/ */
public class EstandarDAO { public class DAOHelper {
private static final Logger log = LogManager.getLogger(DAOHelper.class);
private static final Logger log = LogManager.getLogger(EstandarDAO.class); private static DAOHelper instance;
private static EstandarDAO instance; private DAOHelper() {
}
private EstandarDAO() {
} public static DAOHelper getInstance() {
if (instance == null) {
public static EstandarDAO getInstance() { instance = new DAOHelper();
if (instance == null) { }
instance = new EstandarDAO(); return instance;
} }
return instance;
} /**
* Este metodo ejecuta una sentencia sql de consulta(solamente selects) en la
public JSONObject listar(Connection cn, String query, JSONArray... parametros) throws Exception { * base de datos y devuelve como resultado en un JSONArray los registros
JSONObject obj = new JSONObject(); * obtenidos.
JSONArray jsonArray = consultar(cn, query, parametros); *
* Ejemplo de uso con parametros:
int length = jsonArray.length(); *
* Connection cn = (aqui obtengo la conexion)
obj.put("data", jsonArray); * String query = "select * from personal where codpersonal = ? and fecha_ingreso = ? and retirado = ?";
obj.put("recordsFiltered", length); * JSONArray parametros = new JSONArray();
obj.put("recordsTotal", length); * parametros
obj.put("draw", "1"); * .put(939) //codpersonal es entero
* .put("2018-01-12") //fecha de ingreso es un String
return obj; * .put(true); // retirado es un booleano
} *
* JSONArray resultado = DAOHelper.getInstance().consultar(cn, query, parametros);
/** *
* Este metodo ejecuta una sentencia sql de consulta(solamente selects) en *
* la base de datos y devuelve como resultado en un JSONArray los registros * Ejemplo de uso sin parametros
* obtenidos * String query = "select * from personal";
* * JSONArray resultado = DAOHelper.getInstance().consultar(cn, query,);
* *
* @param cn objeto que representa la conexion a la base de datos * @param cn objeto que representa la conexion a la base de datos
* @param query sentencia sql que se desea ejecutar en la base de datos * @param query sentencia sql que se desea ejecutar en la base de datos
* @param parametros parametros que vamos a pasar al query, *es opcional * @param parametros parametros que vamos a pasar al query, *es opcional
* @return Devuelve como resultado los registros obtenidos por el query en * @return Devuelve como resultado los registros obtenidos por el query en un
* un objeto JSONArray * objeto JSONArray
* @throws Exception * @throws Exception
*/ */
public JSONArray consultar(Connection cn, String query, JSONArray... parametros) throws Exception { public JSONArray consultar(Connection cn, String query, JSONArray... parametros) throws Exception {
//objeto que almacena todos las filas obtenidas por el query //objeto que almacena todos las filas obtenidas por el query
JSONArray jsonArray = new JSONArray(); JSONArray jsonArray = new JSONArray();
try { PreparedStatement ps = null;
if (cn == null) { ResultSet rs = null;
jsonArray = null; try {
} else { ps = cn.prepareStatement(query);
PreparedStatement ps = cn.prepareStatement(query);
//validamos si existen parametros
//validamos si existen parametros if (parametros != null && parametros.length > 0) {
if (parametros != null && parametros.length > 0) { JSONArray params = parametros[0];
JSONArray params = parametros[0]; int index = 1;
int cont = 1;
//Recorremos la lista de parametros y lo seteamos en el preparedstatement
//Recorremos la lista de parametros y lo seteamos en el preparedstatement for (Object parametro : params) {
for (Object parametro : params) { setPreparedStatement(ps, index++, parametro);
setPreparedStatement(ps, cont, parametro); }
cont++;
} }
} log.trace("query [SELECT] =" + ps);
log.trace("query [SELECT] =" + ps);
rs = ps.executeQuery();
ResultSet rs = ps.executeQuery(); ResultSetMetaData rm = rs.getMetaData();
ResultSetMetaData rm = rs.getMetaData(); int numCols = rm.getColumnCount();
int numCols = rm.getColumnCount();
while (rs.next()) {
while (rs.next()) { JSONObject obj = new JSONObject();
JSONObject obj = new JSONObject(); for (int i = 1; i <= numCols; i++) {
for (int i = 1; i <= numCols; i++) { setJSONObject(rs, rm, i, obj);
castColumn(rs, rm, i, obj); }
} jsonArray.put(obj);
jsonArray.put(obj); }
} } catch (Exception ex) {
log.error("error", ex);
// rs.close(); throw ex;
// cn.close(); }
} return jsonArray;
} catch (Exception ex) { }
log.error("error", ex);
throw ex; /**
} * Este metodo nos permite ejecutar una sentencia sql en la base de datos y
return jsonArray; * devuelve como resultado en un JSONObject las filas afectadas por el query.
} *
* Ejemplo de uso con parametros:
/** *
* Este metodo nos permite ejecutar una sentencia sql en la base de datos y * Connection cn = (aqui obtengo la conexion)
* devuelve como resultado en un JSONObject las filas afectadas por el * String query = "update personal set fecha_ingreso = ? and retirado = ? where codpersonal = ?";
* query. * JSONArray parametros = new JSONArray();
* * parametros
* @param cn objeto que representa la conexion a la base de datos * .put("2018-01-12") //fecha de ingreso es un String
* @param query sentencia sql que se desea ejecutar en la base de datos * .put(true) //retirado es un boolean
* @param parametros parametros que vamos a pasar al query, *es opcional * .put(923); // codpersonal es un entero
* @return Devuelve la cantidad de filas afectadas por el query en un *
* JSONObject. * JSONObject resultado = DAOHelper.getInstance().ejecutar(cn, query, parametros);
* @throws Exception *
*/ *
public JSONObject ejecutar(Connection cn, String query, JSONArray... parametros) throws Exception { * Ejemplo de uso sin parametros
JSONObject obj = new JSONObject(); * String query = "delete from personal";
try { * JSONObject resultado = DAOHelper.getInstance().ejecutar(cn, query);
if (cn == null) { *
obj.put("msg", 0); * @param cn objeto que representa la conexion a la base de datos
} else { * @param query sentencia sql que se desea ejecutar en la base de datos
PreparedStatement ps = cn.prepareStatement(query); * @param parametros parametros que vamos a pasar al query, *es opcional
if (parametros != null && parametros.length > 0) { * @return Devuelve la cantidad de filas afectadas por el query en un
JSONArray params = parametros[0]; * JSONObject.
int cont = 1; * @throws Exception
for (Object parametro : params) { */
setPreparedStatement(ps, cont, parametro); public JSONObject ejecutar(Connection cn, String query, JSONArray... parametros) throws Exception {
cont++; JSONObject obj = new JSONObject();
} try {
} PreparedStatement ps = cn.prepareStatement(query);
log.trace("query [ExecuteUpdate]= " + ps); if (parametros != null && parametros.length > 0) {
int filas = ps.executeUpdate(); JSONArray params = parametros[0];
if (filas > 0) { int index = 1;
obj.put("msg", filas); for (Object parametro : params) {
} else { setPreparedStatement(ps, index++, parametro);
obj.put("msg", 0); }
} }
}
} catch (Exception ex) { log.trace("query [ExecuteUpdate]= " + ps);
log.error("error", ex); int filas = ps.executeUpdate();
throw ex; obj.put("msg", filas);
} } catch (Exception ex) {
return obj; log.error("error", ex);
} throw ex;
}
/** return obj;
* Setea en el prepared statement el valor del parametro segun su tipo de }
* dato.
* /**
* @param ps representa el objeto PreparedStatement * Setea en el prepared statement el valor del parametro segun su tipo de
* @param index indica la posicion del parametro en la consulta sql * dato.
* @param p parametro de la consulta sql *
* @throws SQLException * @param ps representa el objeto PreparedStatement
*/ * @param index indica la posicion del parametro en la consulta sql
private void setPreparedStatement(PreparedStatement ps, int index, Object p) throws SQLException { * @param p parametro de la consulta sql
if (p instanceof Integer) { * @throws SQLException
ps.setInt(index, (int) p); */
} else if (p instanceof String) { private void setPreparedStatement(PreparedStatement ps, int index, Object p) throws SQLException {
ps.setString(index, p.toString()); if (p instanceof Integer) {
} else if (p instanceof Double) { ps.setInt(index, (int) p);
ps.setDouble(index, (double) p); } else if (p instanceof String) {
} else if (p instanceof Boolean) { ps.setString(index, p.toString());
ps.setBoolean(index, (boolean) p); } else if (p instanceof Double) {
} ps.setDouble(index, (double) p);
} } else if (p instanceof Boolean) {
ps.setBoolean(index, (boolean) p);
/** } else if (p instanceof byte[]) {
* Obtiene el valor de una columna de una tabla y lo guarda en el objeto ps.setBytes(index, (byte[]) p);
* JSONObject con el tipo de dato que le corresponde. }
* }
* @param rs Objeto ResultSet para obtener el valor de una columna de una
* tabla /**
* @param rsmd Objeto ResultSetMetaData nos permite obtener el nombre y tipo * Obtiene el valor de una columna de una tabla y lo guarda en el objeto
* de columna * JSONObject con el tipo de dato que le corresponde.
* @param columnIndex Posicion de la columna en la sentencia sql *
* @param obj Representa a un registro de la base de datos * @param rs Objeto ResultSet para obtener el valor de una columna de una
* @throws SQLException * tabla
*/ * @param rsmd Objeto ResultSetMetaData nos permite obtener el nombre y tipo
private void castColumn(ResultSet rs, ResultSetMetaData rsmd, int columnIndex, JSONObject obj) throws SQLException { * de columna
//obtenemos el tipo de dato de la columna de la tabla * @param columnIndex Posicion de la columna en la sentencia sql
int type = rsmd.getColumnType(columnIndex); * @param obj Representa a un registro de la base de datos
* @throws SQLException
//evaluamos el tipo */
switch (type) { private void setJSONObject(ResultSet rs, ResultSetMetaData rsmd, int columnIndex, JSONObject obj) throws SQLException {
case Types.VARCHAR: //obtenemos el tipo de dato de la columna de la tabla
case Types.CHAR: int type = rsmd.getColumnType(columnIndex);
obj.put(rsmd.getColumnName(columnIndex), rs.getString(columnIndex));
break; //evaluamos el tipo
case Types.INTEGER: switch (type) {
obj.put(rsmd.getColumnName(columnIndex), rs.getInt(columnIndex)); case Types.VARCHAR:
break; case Types.CHAR:
case Types.BIT: obj.put(rsmd.getColumnName(columnIndex), rs.getString(columnIndex) == null ? JSONObject.NULL : rs.getString(columnIndex));
obj.put(rsmd.getColumnName(columnIndex), rs.getBoolean(columnIndex)); break;
break; case Types.INTEGER:
default: obj.put(rsmd.getColumnName(columnIndex), rs.getInt(columnIndex));
obj.put(rsmd.getColumnName(columnIndex), rs.getString(columnIndex)); break;
} case Types.BIT:
} obj.put(rsmd.getColumnName(columnIndex), rs.getBoolean(columnIndex));
break;
case Types.BINARY:
obj.put(rsmd.getColumnName(columnIndex), rs.getBytes(columnIndex));
break;
default:
obj.put(rsmd.getColumnName(columnIndex), rs.getString(columnIndex) == null ? JSONObject.NULL : rs.getString(columnIndex));
}
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment