Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Yager2222 en 23 Mayo 2020, 00:44 am



Título: obtener la fecha actual java.sql.Date
Publicado por: Yager2222 en 23 Mayo 2020, 00:44 am
Tengo que obtener la fecha actual en formato java.sql.Date. para pasar el dato a una tabla en MySQL, Pero estoy completamente perdido:

¿Cómo se inserta la fecha en MySQL desde java?

Código:
private Date fecha;


¿Cómo se definiría la "fecha" dentro del siguiente constructor para sacar su valor?

Código:
Venta v=new Venta(0, Integer.parseInt(request.getParameter("idCliente")), 
                    Integer.parseInt(request.getParameter("idLibro")), **fecha** ) {
};
                    gventas.registrarVenta(v);


Muchas gracias

Saludos


Título: Re: obtener la fecha actual java.sql.Date
Publicado por: rub'n en 2 Junio 2020, 14:31 pm
Tengo que obtener la fecha actual en formato java.sql.Date. para pasar el dato a una tabla en MySQL, Pero estoy completamente perdido:

¿Cómo se inserta la fecha en MySQL desde java?

Código:
private Date fecha;


¿Cómo se definiría la "fecha" dentro del siguiente constructor para sacar su valor?

Código:
Venta v=new Venta(0, Integer.parseInt(request.getParameter("idCliente")), 
                     Integer.parseInt(request.getParameter("idLibro")), **fecha** ) {
};
                     gventas.registrarVenta(v);


Muchas gracias

Saludos

Hola,

Para la fecha actual usa java.util.Date().getTime(), son diferentes paquetes, pero mismo nombre de clase, el constructor de la fecha con sql recibe un long como parámetro, que lo obtenemos de getTime()


Código
  1. new java.util.Date().getTime()

por lo tanto quedaría

Código
  1. java.sql.Date date = new java.sql.Date(new java.util.Date().getTime());
  2. System.out.println(date.toString());

Output:

Código
  1. 2020-06-02
  2.  
  3. Process finished with exit code 0

También con

Código
  1. System.out.println(java.sql.Date.valueOf(LocalDate.now()));

Código
  1. 2020-06-02
  2.  
  3. Process finished with exit code 0
  4.  
Ahora para hacer un insert desde java con MySQL, debes conectarte a la db, construir la query, usar PreparedStatement que es la sentencia precompilada y segura.


Título: Re: obtener la fecha actual java.sql.Date
Publicado por: TickTack en 4 Junio 2020, 17:59 pm
Hola Yager2222,

no sé si todavía lo necesitas, pero de todos modos.
Use el paquete Calender primero para obtener la instancia y luego la hora.
Código:
java.util.Calendar

Y luego usalo en el constructor.
Código:
java.sql.Date

Esto debería verse como...
Código:
java.sql.Date fecha = new java.sql.Date(Calendar.getInstance().getTime().getTime());

Entonces el código final puede verse como asi:
Código:
Venta v=new Venta(0, Integer.parseInt(request.getParameter("idCliente")),
                       Integer.parseInt(request.getParameter("idLibro")), new java.sql.Date(Calendar.getInstance().getTime().getTime()) ) {
                       };
                       gventa.registrarVenta(v);

Citar
¿Cómo se inserta la fecha en MySQL desde java?
La siguiente es otra manera:
Inserta fechas, o más bien datos en Java a una base de datos usando PreparedStatement. El tutorial de oracle "oficial" sobre cómo lograr tal cosa se puede encontrar aquí:
https://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html

Un ejemplo sobre cómo insertar una fecha usando PreparedStatement:
Código:
final java.sql.Date fechaSQL = new java.sql.Date();
final java.sql.Timestamp horaSQL = new java.sql.Timestamp();

final PreparedStatement declaracionPreparada = connection.prepareStatement("insert into tblDates (date,time) values(?,?)");
declaracionPreparada.setDate(1,fechaSQL);
declaracionPreparada.setTimestamp(2,horaSQL);
declaracionPreparada.executeUpdate();

declaracionPreparada.close();
connection.close();
Tene en cuenta que el método executeUpdate() en una instancia de PreparedStatement devuelve un valor Integer que indica cuántas filas se vieron afectadas por la instrucción o devuelve el valor 0 para las instrucciones SQL que no devuelven nada. Puede ser conveniente utilizar ese valor para, por ejemplo, manejo de errores o registro simple solo por nombrar un par de ejemplos.
En términos ideales, vos utilizarías una declaración de bloque de recursos de prueba además del manejo adecuado del error para garantizar la eliminación y el registro adecuados de los recursos, incluso en el caso de excepciones:
https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html

Ejemplo:
Código:
public final void viewTable(final Connection con) throws SQLException {

   final String query = "SELECT COF_NAME, SUP_ID, PRICE, SALES, TOTAL FROM COFFEES";

   try (final Statement stmt = con.createStatement()) {
       final ResultSet rs = stmt.executeQuery(query);

       while (rs.next()) {
           final String coffeeName = rs.getString("COF_NAME");
           final int supplierID = rs.getInt("SUP_ID");
           final float price = rs.getFloat("PRICE");
           final int sales = rs.getInt("SALES");
           final int total = rs.getInt("TOTAL");

           logger.info(coffeeName + ", " + supplierID + ", " +
                              price + ", " + sales + ", " + total);
       }
   } catch (final SQLException e) {
       logger._error_(e);
   }
}
Este fragmento de código se toma de los documentos de Oracle enumerados aquí (https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html (https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html)), pero ligeramente modificado para incluir una interfaz de registro SLF4J (http://www.slf4j.org/ (http://www.slf4j.org/)).

Citar
¿Cómo se definiría la "fecha" dentro del siguiente constructor para sacar su valor?

Código:
Venta v=new Venta(0, Integer.parseInt(request.getParameter("idCliente")), 
                     Integer.parseInt(request.getParameter("idLibro")), **fecha** ) {
};
                     gventas.registrarVenta(v);
No estoy seguro de lo que estás pidiendo con respecto a tu segunda pregunta. ¿Podrías dar más detalles? Estoy pensando que simplemente lo definirías como el objeto Date que es. También puede convertir java.sql.Date y java.util.Date utilizando sus respectivos métodos y constructores. Por ejemplo, para convertir un java.util.Date en un java.sql.Date:
Código:
new java.sql.Date(utilDate.getTime());

Sin embargo, para el desarrollo de aplicaciones modernas, se recomienda que utilices una instancia de objeto Calendar en su lugar:
https://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html (https://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html)

O incluso mejor (realmente preferido), Joda-Time (https://www.joda.org/joda-time/ (https://www.joda.org/joda-time/)) (java.time).

Además, si fuera tu, dejaría que Hibernate (http://hibernate.org/ (http://hibernate.org/)) u otras implementaciones de JPA (https://es.m.wikipedia.org/wiki/Java_Persistence_API (https://es.m.wikipedia.org/wiki/Java_Persistence_API)) manejen la parte SQL de tu aplicación si estás trabajando con entidades/objetos específicos y mapeo de datos. La inclusión del Framework Spring hará que tu vida sea mucho más fácil (sin mencionar que hará que te contraten de manera mucho más interesante si podes trabajar en dicho marco):
https://spring.io/
https://spring.io/projects/spring-data-jpa


Saludos


Título: Re: obtener la fecha actual java.sql.Date
Publicado por: rub'n en 4 Junio 2020, 19:46 pm
doc la api Calendar es vieja, lo nuevo es la api java.time nativa desde la jdk 8 sin apis de terceros como joda time, pero igual yo tambien llegue a usar Joda Time.