Java - Obtener la fecha actual en formato java.sql.Date (JAVA - MYSQL)

 
Vista:
sin imagen de perfil
Val: 11
Ha aumentado su posición en 3 puestos en Java (en relación al último mes)
Gráfica de Java

Obtener la fecha actual en formato java.sql.Date (JAVA - MYSQL)

Publicado por fran (6 intervenciones) el 23/05/2020 00:42:17
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?

1
private Date fecha;


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

1
2
3
4
Venta v=new Venta(0, Integer.parseInt(request.getParameter("idCliente")),
    Integer.parseInt(request.getParameter("idLibro")), **fecha** ) {
    };
    gventas.registrarVenta(v);


Muchas gracias

Saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Billy Joel
Val: 2.665
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Obtener la fecha actual en formato java.sql.Date (JAVA - MYSQL)

Publicado por Billy Joel (875 intervenciones) el 23/05/2020 01:59:29
Es cuestión de formato. Por ejemplo hoy es 2020-05-22 el formato es yyyy-mm-dd.
Entonces:
1
2
3
4
Venta v = new Venta(0, Integer.parseInt(request.getParameter("idCliente")),
        Integer.parseInt(request.getParameter("idLibro")),  "2020-05-22") {
};
gventas.registrarVenta(v);

Prueba así.
Cualquier duda solo pregunta.

Saludos,
Billy Joel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 11
Ha aumentado su posición en 3 puestos en Java (en relación al último mes)
Gráfica de Java

Obtener la fecha actual en formato java.sql.Date (JAVA - MYSQL)

Publicado por fran (6 intervenciones) el 23/05/2020 12:58:43
Buenas. Muchas gracias.

En este caso tengo que obtener la fecha actual de cuando se realice la venta por lo que será un valor de tipo "Date", y el debe coger el valor actual de cada momento.
El constructo sería así: Venta(int idVenta, int idCliente, int idLibro, Date fecha)

Controller.java

1
2
3
4
5
6
7
8
case "doVenta":
 
    Venta v=new Venta(0, Integer.parseInt(request.getParameter("idCliente")),
    Integer.parseInt(request.getParameter("idLibro")),  ) {
    };
    gventas.registrarVenta(v);
 
    break;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package beans;
 
import java.sql.Date;
 
public class Venta {
 
	private int idVenta;
	private int idCliente;
	private int idLibro;
	private Date fecha;
	private String autor;
	private int idTema;
	private int isbn;
	private int paginas;
	private double precio;
	private String titulo;
	private String usuario;
	private String password;
	private String email;
	private int telefono;
 
	public Venta() {
		super();
	}
 
	public Venta(int idVenta, int idCliente, int idLibro, Date fecha) {
		super();
		this.idVenta = idVenta;
		this.idCliente = idCliente;
		this.idLibro = idLibro;
		this.fecha = fecha;
 
	}
	public int getIdVenta() {
		return idVenta;
	}
	public void setIdVenta(int idVenta) {
		this.idVenta = idVenta;
	}
	public int getIdCliente() {
		return idCliente;
	}
	public void setIdCliente(int idCliente) {
		this.idCliente = idCliente;
	}
	public int getIdLibro() {
		return idLibro;
	}
	public void setIdLibro(int idLibro) {
		this.idLibro = idLibro;
	}
	public Date getFecha() {
		return fecha;
	}
	public void setFecha(Date fecha) {
		this.fecha = fecha;
	}

GestionVe.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package modelo;
 
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
 
import beans.Venta;
 
public class GestionVe {
 
	Datos cn = new Datos();
    Connection con;
    PreparedStatement ps;
    ResultSet rs;
 
	public void registrarVenta(Venta v) {
		try{
				String sql="insert into ventas (idCliente,idLibro,fecha)";
				sql+="values (?,?,?)";
				con=cn.conexion();
				PreparedStatement ps=con.prepareStatement(sql);
				ps.setInt(1,v.getIdCliente());
				ps.setInt(2,v.getIdLibro());
				ps.setDate(3,v.getFecha());
				ps.execute();
		}
		catch(SQLException ex){
			ex.printStackTrace();
		}
	}
}

Saludos y gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Billy Joel
Val: 2.665
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Obtener la fecha actual en formato java.sql.Date (JAVA - MYSQL)

Publicado por Billy Joel (875 intervenciones) el 23/05/2020 16:40:28
Una solución rápida es simplemente formatear la fecha que vas a registrar.
Como te había dicho que en MySql el formato de las fechas es yyyy-mm-dd. En ese caso hagamos que la fecha que vas a registrar tenga ese formato. En Java tenemos la clase SimpleDateFormat que nos ayuda a dar formato a fechas.

Para resolver el tema lo hago con una leve modificación al método registrarVenta:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public void registrarVenta(Venta v) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    String f = sdf.format(v.getFecha());
    try {
        String sql = "insert into ventas (idCliente,idLibro,fecha)";
        sql += "values (?,?,?)";
        con = cn.conexion();
        PreparedStatement ps = con.prepareStatement(sql);
        ps.setInt(1, v.getIdCliente());
        ps.setInt(2, v.getIdLibro());
        //ps.setDate(3, v.getFecha());
        ps.setObject(3, f);
        ps.execute();
    } catch (SQLException ex) {
        ex.printStackTrace();
    }
}

Pruebalo y me cuentas.

Saludos,
Billy Joel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Obtener la fecha actual en formato java.sql.Date (JAVA - MYSQL)

Publicado por Armando (2 intervenciones) el 23/05/2020 03:56:42
Guardar fecha en base de datos


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Ingreso {
//Metodo para guardar datos y fechas
static public boolean guardandoMisDatos(Venta venta) {
final String GUARDAR = "INSERT INTO MITABLE(id,primerValor,idcliente,fechaEntrada) VALUES(?, ?, ?, ?)";
//Obtenemos la fecha del objeto venta
  LocalDate fecha = venta.getFecha();
//La convertimos a formato TimeStamp de sql
 Timestamp timestamp = Timestamp.valueOf(fecha);
try(Connection con = DriverManager.getConnection("Cadena de conexion");
      PreparaStatement pstm = conectado.prepareStatement(GUARDAR);) {
       pstm.setInt(1,venta.primerValor());
       pstm.setInt(2, venta.getCliente());
       pstm.setTimestamp(3, timestamp);
       int ingresa = prepa.executeUpdate();
       return ( ingresa == 1)
}catch (SQLException ex) {
System.out.printf("No se logro guardar la información: %s%n", ex.getLocalizedMessage());
return false
}
}
}


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//Desde nuestro controlador instancia la ventas
//Y asignamos la fecha
//Podemos ocupar LocalDate con una fecha en especifico o con la fecha actual ejemplo:
LocalDate miFecha = LocalDate.of(2018, 10, 30);
//Fecha actual
LocalDate miFecha2 = LocalDate.now();
 
Venta venta = new Venta(0, Integer.parseInt(request.getParameter("idCliente"),
                    	                        Integer.parseInt(request.getParameter("idLibro"),miFecha);
 
if(Ingreso.guardandoMisDatos(venta)) {
  System.out.printf("Datos guardados correctamente");
} else {
System.out.println("No fue posible guardar la información");
}
}

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 11
Ha aumentado su posición en 3 puestos en Java (en relación al último mes)
Gráfica de Java

Obtener la fecha actual en formato java.sql.Date (JAVA - MYSQL)

Publicado por fran (6 intervenciones) el 23/05/2020 12:48:45
Buenas, muchas gracias por la ayuda. Probé como dijiste, pero me da un error en el siguiente método:

The method valueOf(String) in the type Timestamp is not applicable for the arguments (LocalDate)
(Me pide que pase "fecha" de LocalDate a String)

Así es como lo tengo ahora mismo, siguiendo tu recomendación

GestionVe.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package modelo;
 
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Timestamp;
import java.time.LocalDate;
 
import beans.Venta;
 
public class GestionVe {
 
	static Datos cn = new Datos();
    static Connection con;
    PreparedStatement ps;
    ResultSet rs;
 
	public static boolean registrarVenta(Venta v) {
		try{
				String sql="insert into ventas (idCliente,idLibro,fecha)";
				sql+="values (?,?,?)";
			    LocalDate fecha = v.getFecha();
			    Timestamp timestamp = Timestamp.valueOf(fecha);
				con=cn.conexion();
				PreparedStatement ps=con.prepareStatement(sql);
				ps.setInt(1,v.getIdCliente());
				ps.setInt(2,v.getIdLibro());
				ps.setTimestamp(3, timestamp);
				ps.execute();
		}
		catch(SQLException ex){
			ex.printStackTrace();
		}
		return false;
	}
}

Venta.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package beans;
 
import java.time.LocalDate;
 
public class Venta {
 
	private int idVenta;
	private int idCliente;
	private int idLibro;
	private LocalDate fecha;
	private String autor;
	private int idTema;
	private int isbn;
	private int paginas;
	private double precio;
	private String titulo;
	private String usuario;
	private String password;
	private String email;
	private int telefono;
 
	public Venta() {
		super();
	}
 
	public Venta(int idVenta, int idCliente, int idLibro, LocalDate fecha) {
		super();
		this.idVenta = idVenta;
		this.idCliente = idCliente;
		this.idLibro = idLibro;
		this.fecha = fecha;
 
	}
	public int getIdVenta() {
		return idVenta;
	}
	public void setIdVenta(int idVenta) {
		this.idVenta = idVenta;
	}
	public int getIdCliente() {
		return idCliente;
	}
	public void setIdCliente(int idCliente) {
		this.idCliente = idCliente;
	}
	public int getIdLibro() {
		return idLibro;
	}
	public void setIdLibro(int idLibro) {
		this.idLibro = idLibro;
	}
	public LocalDate getFecha() {
		return fecha;
	}
	public void setFecha(LocalDate fecha) {
		this.fecha = fecha;
	}

Controller.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
case "doVenta":
    LocalDate miFecha = LocalDate.now();
 
    Venta v=new Venta(0, Integer.parseInt(request.getParameter("idCliente")),
    Integer.parseInt(request.getParameter("idLibro")), miFecha ); {
 
        if(GestionVe.registrarVenta(v)) {
          System.out.printf("Datos guardados correctamente");
        } else {
        System.out.println("No fue posible guardar la información");
        }
 
    };
    GestionVe.registrarVenta(v);
 
 
    break;

Saludos y gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Obtener la fecha actual en formato java.sql.Date (JAVA - MYSQL)

Publicado por Rodrigo (623 intervenciones) el 23/05/2020 16:18:11
Parece que usar LocalDate no te sirve.
Usa LocalDateTime en vez.
El resto deberia permanecer igual o mas o menos igual.

Opcionalmente puedes eliminar la variable "miFecha", y llamar LocalDateTime.now() directamente como parametro del constructor de Venta.

Si no usas los setters de la clase Venta, eliminalos.
Tambien puedes eliminar la invocacion a super() que tienes en esa clase y tambien puedes eliminar el constructor sin parametros,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Obtener la fecha actual en formato java.sql.Date (JAVA - MYSQL)

Publicado por Armando (2 intervenciones) el 23/05/2020 17:35:27
Hola

Disculpa hice mal la conversion de Localdate -> TimeStamp
Esto te debe de funcionar


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public static boolean registrarVenta(Venta v) {
    try{
        final String GUARDAR = "insert into ventas (idCliente,idLibro,fecha) values(?, ?, ?)";
        //Obtenemos la fecha
    LocalDate fecha = v.getFecha();
        //Covertimos LocalDate a TimeStamp
        //El registro de la base de datos debe de ser timestamp
        Timestamp timestamp = Timestamp.valueOf(LocalDateTime.of(da, LocalTime.MIDNIGHT));
        con=cn.conexion();
        PreparedStatement ps=con.prepareStatement(sql);
        ps.setInt(1,v.getIdCliente());
        ps.setInt(2,v.getIdLibro());
        ps.setTimestamp(3, timestamp);
        int ingresa = prepa.executeUpdate();
        return ( ingresa == 1)
    } catch(SQLException ex) {
        ex.printStackTrace();
        System.out.println("Error al tratar de guardar el registro: " + ex.getCause())
        return false;
    } finally {
                //Cerramos la conexón a la base
                try {
                    if(con != null) {
                        con.close();
                    }
                } catch(SQLException ex) {
                System.out.println("Error al cerrar la conexión a la base: " + ex.getCause())
                }
            //Cerrar sentencia
            try {
                    if(ps != null) {
                        ps.close();
                } catch(SQLException ex) {
                System.out.println("Error al cerrar la sentencia: " + ex.getCause())
                }
}

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar