Java - Instancia de un objeto con datos de consulta SQL

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

Instancia de un objeto con datos de consulta SQL

Publicado por stuard (7 intervenciones) el 19/12/2019 12:56:52
Buenas tardes!
Estoy realizando un proyecto y me veo en la situacion de que tengo que hacer una consulta a una base de datos que contiene la infirmación de las peliculas y instanciar un objeto con esos datos en la clase Film

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
try {
        	String query = "select * from film";
            Connection connexion = bd.getConnection();
            Statement sentencia = connexion.createStatement();
            ResultSet resultado  = sentencia.executeQuery(query);
 
            if (resultado!=null) {
	            while resultado.next()) {
	                Integer id = resultado.getInt("flm_id");
 
	                String title = resultado.getString("flm_title");
	                String desc = resultado.getString("flm_synopsis");
	                String cover = resultado.getString("flm_cover");
	                String gen = resultado.getString(("flm_genre").toString());
	                String age_rating = resultado.getString("flm_age_rating");
	                String date_release = resultado.getString(("flm_date_release").toString());
	                Integer premiere = resultado.getInt("flm_premiere");
	                Boolean bool = (premiere == 1);
 
	                list.add(new Film( Integer.valueOf(id), title, desc, cover, gen, age_rating, date_release, bool));
	            }
            }
 
            sentencia.close();
            connexion.close();
Cuando intento instanciar los datos con el constructor de la clase Film me dice que esta indefinido. Y creo que es porque
estoy cogiendo datos con el método toString() en el caso de date, enum etc... Las opciones que veo son cambiar el tipo de
datos que pueda almacenar la base de datos en esas columnas y cambiarlo todo a VARCHAR2() pero no es lo más correcto,
espero que me puedan ayudar a entender el problema que estoy teniendo.

La clase film contiene la siguiente estructura:

1
2
3
4
5
6
7
8
9
10
11
12
public Film(Integer id, String name, String sinopsis, String caratula, String genero, Integer edatRec,
			String dateEstreno, Boolean estreno) {
		super();
		this.id = id;
		this.name = name;
		this.sinopsis = sinopsis;
		this.caratula = caratula;
		this.genero = genero;
		this.edatRec = edatRec;
		this.dateEstreno = dateEstreno;
  		this.estreno = estreno;
	}

Y la tabla que contiene los datos tiene los siguientes campos:


1
2
3
4
5
6
7
8
9
10
11
12
CREATE  TABLE `film` (
  `flm_id` int(11) NOT NULL,
  `flm_title` varchar(45) NOT NULL,
  `flm_synopsis` varchar(500) DEFAULT NULL,
  `flm_cover` varchar(45) DEFAULT NULL,
  `flm_genre` enum('FICCIO','AVENTURAS','TERROR','DIBUIJOS') DEFAULT NULL,
  `flm_age_rating` int(11) DEFAULT NULL,
  `flm_date_release` varchar(20) DEFAULT NULL,
  `flm_premiere` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`flm_id`),
  UNIQUE KEY `flm_title_UNIQUE` (`flm_title`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;


Con que método o como hago para recuperar del objeto respuesta los datos enum( clase enumerada ), flm_date_releas(date)
ya que no tengo un método definido.
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 pablo
Val: 626
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Instancia de un objeto con datos de consulta SQL

Publicado por pablo (239 intervenciones) el 19/12/2019 14:37:23
Hola qué tal Stuard bueno para resolver lo de la fecha podrías declarar una variable de tipo Date y guardas ahí el resultado que te devuelva de la consulta es decir:

1
Date fecha = rs.getDate("flm_date_release");

De esa manera y en esa variable debería guardarte la fecha y la hora, de la manera en que lo guardas con String no te va a funcionar por que ese campo es una fecha y no un String por ende es mejor si lo utilizas de esa manera, pues te vas a asegurar de que se guarde la información.

ahora bien con lo del enum ahí he investigado un poco y al parecer JDBC no lo soporta o no tiene un método que te pueda hacer la conversión de ese enum y darte el valor directamente por lo que se recomienda que crees un enum en Java con los mismos valores que guardas o tienes en tu base de datos y los sincronices es decir:

1
MiEnum enumVal =  MiEnum.valueOf(resultado.getString("flm_genre"));

Donde MiEnum será tu Enum de Java con los mismos valores que tienes en MySQL.

Ya queda de tu parte si quieres guardar este enum de otra manera en tu base de datos como planteas con varchar y por registro lo vas guardando según el caso que amerite

Prueba estás cosas y cualquier cosa pues comenta para ver si te fueron de utilidad o te da algún error.

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
sin imagen de perfil
Val: 11
Ha aumentado su posición en 4 puestos en Java (en relación al último mes)
Gráfica de Java

Instancia de un objeto con datos de consulta SQL

Publicado por stuard (7 intervenciones) el 19/12/2019 19:28:45
Perfecto, se me olvido importar el package java.sql.Date por eso pensaba que el objeto resultado que implementa ResultSet no tenia dicho método.


Dejo otra duda por aquí;


En las declaraciones de estas variables por que no son accesibles desde los otros métodos? Estoy confuso si en java los métodos tienen acceso a las variables globales de esa misma clase sin pasarlas como parámetro
Si pongo el siguiente bloque de codigo en diferentes métodos lo acepta todo pero la unica que me dá fallo es la variable gen y tengo que cambiarle el nombre en los diferentes métodos, por que el resto de variables no son visibles entre diferentes métodos en la misma clase y gen si?

1
2
3
4
5
6
7
8
9
Integer id = resultat.getInt("flm_id");
String title = resultat.getString("flm_title");
String desc = resultat.getString("flm_synopsis");
String cover = resultat.getString("flm_cover");
Genere gen = Genere.valueOf(resultat.getString(("flm_genre").toString()).toUpperCase());
Integer age_rating = resultat.getInt("flm_age_rating");
Date date_release = resultat.getDate("flm_date_release");
Integer premiere = resultat.getInt("flm_premiere");
Boolean bool = (premiere == 1);



Un saludo!
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 pablo
Val: 626
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Instancia de un objeto con datos de consulta SQL

Publicado por pablo (239 intervenciones) el 19/12/2019 20:35:33
Hola Stuard bien atendiendo a tu pregunta, para que estas variables sean accesibles desde otros métodos debes declararlas bien sea despues de iniciar la clase o bien al final de la clase, ya que el scope del método no va a permitir salir a las variables que declares dentro de sus métodos quedan relegadas a dicho método y ya es decir:

1
2
3
4
5
6
7
8
class Numero {
  private  int numero;
 
  public int metodo(){
  return  this.numero;
}
 
}

En cambio sí la usas así pasa lo del scope

1
2
3
4
5
6
class Numero {
  public int metodo(){
   int numero =0;
  return numero;
 }
}

En el primer caso puedes usar la misma variable donde la necesites en cualquier método que la llames, por el contrario en el segundo caso la variable queda permitida solo para dicho método, no puede salir de ahí.

Para lo de la clase Genere mi pregunta sería esa variable es una variable que tu creaste por que en los tipos de datos no existe o no sé si existe un tipo de dato Genere, de ser el caso que es un objeto tuyo tienes que llamar o importar esa clase para que Java pueda reconocer que estas utilizando dicho objeto de no ser así el nunca entedera en los demás métodos que estas utilizando una variable de ese tipo.

Bueno espero que esto aclare un poco tus dudas, cualquier cosa avisas si entendí algo mal o así.

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

Instancia de un objeto con datos de consulta SQL

Publicado por stuard (7 intervenciones) el 19/12/2019 22:14:30
Gracias por tu respuesta Pablo!
Salu2.
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