elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


  Mostrar Mensajes
Páginas: 1 2 3 4 5 [6] 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ... 27
51  Programación / Java / Re: AYUDA VALIDACION en: 21 Marzo 2014, 14:20 pm
Muchas gracias y ante cualquier duda, ya sabes que tienes que elegir ElHacker ;)

Respecto a tu pregunta, yo haría lo siguiente:

  • Asociar las fechas a un ID_USUARIO que será la PK.

Así sería muy fácil. Primero obtenemos los registros por el ID_USUARIO. Una vez que tengamos los registros (las fechas) podremos trabajar fácilmente.

Sería algo así, aclaro que no lo he probado y quizás debe tener algunos errores, de eso ya te encargas tú. Espero hayas aprendido a cómo realizarlo.

Código
  1. public boolean validarLicencia(long id) throws SQLException {
  2.      try {
  3. String sentencia = "SELECT ID1, ID2 FROM TUTABLA WHERE ID_USUARIO = ?";
  4. Map mapaUsuario = obtenerMapaPorUserID(sentencia, id);
  5.  
  6. Long id2 = (Long) mapaUsuario.get(0).get("id2"); // obtiene el valor asociado a la llave 'id2' del Map 'mapaUsuario'
  7.  
  8. if(mapaUsuario = null && mapaUsuario.size() == 0) { return false; }
  9.  
  10. if (id2 == null)  { // si el campo id2 es null en la tabla
  11. Calendar calendario = Calendar.getInstance();
  12. calendario.add(5,15) // la fecha de vencimiento es en 15 dias
  13. Long fechaHoyMiliseg = cal.getTime().getTime(); // obtiene fecha en milisegunos
  14. String sentencia = "UPDATE TUTABLA SET ID2 = ?";
  15. ejecutarSentenciaPorUserId(sentencia, fechaHoyMiliseg);
  16. return true; // informa que la licencia es valida
  17. }
  18.  
  19. // Si existe el campo ID2
  20. Calendar calendario = Calendar.getInstance();
  21. Long fechaLimiteMiliseg = id2; // le asigna el valor de id2 recuperado del usuario
  22. Long fechaHoyMiliseg = calendario.getTime().getTime();
  23. if (fechaHoyMiliseg > fechaMiliteMiliseg) { // YA SE VENCIO LICENCIA!
  24. String sentencia = "DELE FROM TUTABLA WHERE ID_USUARIO = ?";
  25. ejecutarSentenciaPorUserId(sentencia, id);
  26. return false; // informa que la licencia ya vencio
  27. }
  28.       } catch (SQLException ex) { throw ex; }
  29.     finally { /* cierras flujos*/ }
  30.  
  31.     return true; // solo para que no de error ya que se debe de colocar el retorno
  32. }

Método que obtiene un Map por id de usuario:
Código
  1. public Map obtenerMapaPorUserID(String sql, id) throws SQLException {
  2.       try {
  3. // obtienes tu conexion y declaras previamente un preparedStatement
  4. estatuto = conexion.preparedStatement(sql);
  5. estatuto.setLong(1,user); // asigna el id a la consulta
  6. ResultSet rs = estatuto.executeQuery();
  7. Map<String llave, Long valor) mapaUsuario = new HashMap<>();
  8. while(rs.next()) {
  9. mapaUsuario.put("id1",rs.getLong("ID1"));
  10. mapaUsuario.put("id2",rs.getLong("ID2"));
  11. }
  12.      } catch (SQLException ex) { throw ex; }
  13.      finally { /* cierras flujos*/ }
  14. return mapaUsuario; // en caso no haya coincidencias devolvera una lista vacia (mapaUsuario.size() == 0)
  15. }

Método que ejecuta una sentencia por id de usuario:

Código
  1. public void ejecutarSentenciaPorUserId(String sentencia, long id) throws SQLException {
  2.        try {
  3.       // obtienes tu conexion y haces un executeUpdate();
  4.        } catch (SQLException ex) { throw ex; }
  5.        finally { /* cierras flujos*/ }
  6. }
52  Programación / Java / Re: AYUDA VALIDACION en: 21 Marzo 2014, 07:23 am
Hola, vamos a hacer un análisis de este algoritmo que a simple vista no entiendo nada xD

Esta línea obtiene los campos ID1, ID2 de la tabla TB_CIV_TEMP cuando el ID1 es desconocido, es decir luego se seteará el parámetro de condición.
Código
  1. String sql = "SELECT ID1, ID2 FROM TB_CIV_TMP WHERE ID1 = ?";
  2.  

Luego hace uso de un método del cual no podemos ver nada pero al parecer devuelve fechas en milisegundos (para poder compararse luego). Este método recibe 3 parámetros: La query, un array String y un array Object.

Dado que no puedo ver el código de éste método, creo que no hace falta decirte que no entiendo ni un carajo para qué sirve xD

Código
  1. List<Map> obj = findMapBySQLParam(sql, new String[] { "id1", "id2" }, new Object[] { "202cb962ac59075b964b07152d234b70" });
  2.  

Ahora, podemos deducir que el método findMapBySQLParam() concatenerá algún valor (alguna fecha en milisegundos quizás) con la query y hará la consulta. Por otro lado, si no se puede realizar la consulta o no hay coincidencias con la consulta, la lista puede ser nula (si no se ha podido realizar la consulta) o vacía (si no hay coincidencias). Si ésto llegara a pasar, devuelve false y termina el método.

Crea un objeto Object y le asigna el valor de la llave "id2" del primer Map de la lista recibida.

Código
  1. // obj.get(0) -> obtiene el primer elemento de la lista. En este caso el primer Map
  2. // .get("id2") -> obtiene el valor asociado a la llave "id2"
  3. Object id2 = (Map) obj.get(0).get("id2");
  4.  

Si el valor es nulo, es decir no hay una llave con ese identificador lo crea:

Código
  1. Calendar cal = Calendar.getInstance(); // obtiene una instancia Calendar
  2. // el primer parametro debe ser una constante. 5 equivale a Calendar.DAY
  3. // el segundo parametro le suma 80 al tipo de dato de la constante. Ej.,
  4. // si es Calendar.DAY y hoy estamos 20, adelanta la fecha en 80 dias.
  5. call.add(5,80);
  6. // Obtiene la fecha avanzada en milisegundos
  7. Long var1 = Long.valueOf(cal.getTime().getTime());
  8. // actualiza el campo ID2 con la fecha avanzada en milisegundos (al parecer)
  9. sql = "UPDATE TB_CIV_TMP SET ID2 = ?";
  10. executeUpdateSQLParam(sql, new Object[] { var1 });
  11. return true; // devuelve true y termina el metodo

En caso el valor no sea nulo, es decir, si el primer Map de la lista si tiene un valor asociado a la llave "id2", obtiene el "id2" en milisegundos (al parecer es una fecha) y la fecha actual también en milisegundos. Luego los compara: Si la fecha en milisegundos de hoy es mayor que id2 en milisegundos, se elimina el usuario de la tabla.

Código
  1. Calendar cal = Calendar.getInstance();
  2. // Fecha ID2 (avanzada) en milisegundos en la base de datos
  3. Long var1 = Long.valueOf(Long.parseLong("" + id2));
  4. // Fecha actual en milisegundos
  5. Long var2 = Long.valueOf(cal.getTime().getTime());
  6. // si la actual es mayor que la avanzada: FIN DE LICENCIA!
  7. if (var2.longValue() > var1.longValue()) {
  8. sql = "DELETE FROM TB_CIV_TMP"; // elimina al user de la DB
  9. executeUpdateSQL(sql); // ejecuta la sentencia sql
  10. return false; // fin del metodo y devuelve false
  11. }
  12.  

De lo anterior podemos resumir que:

Hace una consulta a la base de datos para obtener los campos ID1 e ID2 que al parecer son un fechas, de acuerdo a un valor para ID1.

Calculamos la fecha en milisegundos que está en la base de datos (id2) con la fecha en milisegundos actual. Si la actual es mayor, se elimina el usuario de la base de datos.

Si ID2 no tiene un campo establecido en la base de datos, se obtiene la fecha 80 días en adelante en milisegundos y se guarda en la base de datos.


Conclusión:

Al parecer éste algoritmo trata sobre verificación de licencias de usuario de algún software.


PD: Creo que no es necesario que te diga dónde tienes que manejar las fechas (ya lo he explicado en el análisis). Salu2.
53  Programación / Programación C/C++ / Re: Ubuntu 13.10 C++ Entorno Gráfico con Anjuta y Glade en: 20 Marzo 2014, 19:50 pm
Por si te interesa usar Gtkmm3, tienes la guía oficial en español: Guía Gtkmm3
54  Foros Generales / Sugerencias y dudas sobre el Foro / Re: ¿Nuevo sistema de puntuación? en: 20 Marzo 2014, 19:43 pm
Gracias por la aclaración jefe. Una pregunta, ¿ésto sería para una mejor administración del staff, es decir saber si un mod no está cumpliendo su labor? Salu2.
55  Foros Generales / Sugerencias y dudas sobre el Foro / Re: ¿Nuevo sistema de puntuación? en: 20 Marzo 2014, 18:24 pm
Gracias Elektro, no lo había leído ;)

Saludos.
56  Foros Generales / Sugerencias y dudas sobre el Foro / Re: [Sugerencias] Mejoras y nuevas secciones en el foro. en: 20 Marzo 2014, 18:23 pm
Al final, la idea no salió muy bien, aunque estuvo activa durante meses. Se podría probar de nuevo.

Los otros dos mods que si me planteo si vale la pena instalar son dos:

- Topic Solved (Marcar mensaje como resuelto)
- Good Post/Bad Post o directamente que los usuarios pudieran votar al moderador o al staff para ver el número de agradecimientos.

Lo de Topic Solved creo que yo, mi estimado el-brujo, que vendría muy bien, sobre todo por el orden, así los que entran a la sección, saben qué temas han sido solucionados, encontrando una posible solución a su problema también, y si no, crean un tema nuevo. También en la búsqueda, se podría agregar un filtro: Solucionados.

Salu2.

PD: Lo de las votaciones me parece bien. Esto podría motivar a más gente a ayudar ^^
57  Foros Generales / Sugerencias y dudas sobre el Foro / ¿Nuevo sistema de puntuación? en: 20 Marzo 2014, 18:09 pm
Hola, hoy entré y vi esto (A no ser que haya estado desde siempre y yo de animal no lo vi xD), un sistema de puntuación. ¿Cómo funciona? ¿Es como agradecimiento?



Salu2.
58  Programación / Java / Re: JAVA Como Refrescar JTable en: 20 Marzo 2014, 17:54 pm
Listo, me alegra que se haya solucionado tu problema. Por eso te decía, que primero siempre se agrega el modelo a la JTable y recién se empieza a agregar datos. Cualquier duda, puedes postearla en ElHacker.net que seguro te apoyaremos.

Como última recomendación, te invito a que investigues sobre buenas prácticas de programación, cómo trabajar con bases de datos y patrones de diseño. Con ésto, tendrás un código muy limpio y entendible. Recuerda además, comentar siempre tus códigos, así cuando otro lo vean, sepan qué hace el código y no se pierda intentando decifrarlo.

Un saludo amigo.

PD: Edita el tema y coloca [Solucionado] antes del tema.
59  Programación / Java / Re: JAVA Como Refrescar JTable en: 20 Marzo 2014, 15:25 pm
Saca esa línea, tiene que quedarte así:

Código
  1. while(rs.next()) {
  2. // asignas los datos al array data con sus castings respectivos
  3. modelo.addRow(data);
  4. }
  5.  
  6. for(Object e : data) {
  7. System.out.println("Valor: "+e+"\tTipo de dato: "+e.getClass().getName());
  8. }

NOTA: Los flujos se cierran siempre en un finally, ya que así ocurra una excepción nos aseguramos que la conexión se haya cerrado.

Código
  1. try {
  2. // conexion a db y demas
  3. } catch(SQLException ex) { throw ex; }
  4. finally { if(conexion != null) conexion.close(); }

Pega lo que imprime, para saber si se está guardando la información de la tabla en el array con su correspondiente tipo de dato. Salu2.

PD: Si le pasas por parámetro el modelo de la tabla, ¿para qué la devuelves nuevamente? ¿Estás haciendo algo así no?

Código
  1. JTable tblDatos = new JTable();
  2. modelo = agregarFila(modelo);
  3. tblDatos.setModel(modelo);

Pero no sería necesario. Acuérdate que en Java el paso es por referencia (tipo punteros en C++), por lo que solamente bastaría con un agregarFila(modelo); y el cambio se reflejaría en el modelo. Ej.:

Código
  1. JTable tblDatos = new JTable(modelo);
  2. // aqui el paso es por referencia por lo que solo basta hacer esto
  3. this.agregarFila(modelo); // y se agrega la fila al modelo.
60  Foros Generales / Noticias / Re: Ubuntu 14.04 LTS finalmente unifica las pantallas de inicio y bloqueo en: 20 Marzo 2014, 14:39 pm
Ayer la instalé y noté unity un poco más fluido. Han actualizado un poco la deroación de ventanas con GTK3 y ahora tiene un aspecto más 'fino'. En general, para ser beta está estable, solo un crasheo de firefox en el primer inicio, pero nada grave. Ningún problema con drivers (intel). Lo que me ha gustado es que ahora puedes redimensionar el dash hasta unos minúsculos 16px y creo que se va apoder minimizar las ventanas 'on click' en el dash.

Consumo de ram: 25-25% de 1.8 GB. Hasta Gnome consume la mitad xD. Salu2.
Páginas: 1 2 3 4 5 [6] 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ... 27
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines