Java - Almacenamiento (en Oracle) de tipos Booleanos en java

 
Vista:

Almacenamiento (en Oracle) de tipos Booleanos en java

Publicado por gchp (1 intervención) el 16/05/2011 13:42:18
Buenos días, a ver si alguien me puede ayudar, estoy buscando información respecto al almacenamiento de tipos booleanos en java. Tengo un clase que tiene un atributo, que es un tipo booleano, quiero almacenarlo y recuperarlo directamente de la base de datos (oracle) sin tener que considerarlo como un char, que es lo que ahora hago.

Gracias anticipadas por vuestra colaboración
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

Almacenamiento (en Oracle) de tipos Booleanos en java

Publicado por Tom (1831 intervenciones) el 16/05/2011 16:05:54
No hay tipos booleanos en SQL.
Pero quizás puedas usar directamente algún tipo entero (o BIT si tu versión de Oracle lo permite).
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

Almacenamiento (en Oracle) de tipos Booleanos en java

Publicado por gchp (2 intervenciones) el 17/05/2011 12:29:04
Gracias Tom, perdona pero creo que no me he explicado bien. A ver si logro explicarme mejor, tengo un clase con muchos atributos, de lo cuales algunos son de tipos booleanos, al declararlos en el código los considero como un string porque ya sabes que estos tipos boolenos en java toman el valor de true o false (y no como 0 ó 1), que al guardar en la base de datos no está contemplado como tal, por tanto para que se almacene en Oracle su valor que le corresponde, he creado un atributo temporal de tipo booleano (que lo defino con el @transient), luego desde este dependiendo del valor que tome hago la asignación al atributo original, es decir hago la conversión (desde el atributo temporal) al tipo char (original) para que tome el valor de 0 (cero) ó 1 (uno) y se almacene con estos valores a Oracle. Conclusión lo que yo quiero es evitar esta conversión, pregunto si hay alguna forma de hacerlo directamente.
Te pongo un ejemplo
Atributo de la clase(original):
@Column(name="SIABVAL")
private String valido;

Atributo temporal:
public boolean isValidoValor() {
valido = valido + "";
if (valido.equals("null"))
validoValor = false;
else{
if (this.valido.equals("T"))
validoValor = true;
else
validoValor = false;
}
return validoValor;
}


public void setValidoValor(boolean validoValor) {
this.validoValor = validoValor;
if (validoValor)
this.valido = "T";
else
this.valido = "F";
}

CONCLUSIÓN: A mí me gustaría saber si hay una forma mejor o un tipo de dato más óptimo para convertir el tipo booleano de Java al Char que requiere Oracle.

Muchísimas 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

Almacenamiento (en Oracle) de tipos Booleanos en java

Publicado por Tom (1831 intervenciones) el 17/05/2011 20:07:58
Si te he entendido. No confundas como se asigna una variable con su representación interna.
El hecho de que tú escribas "boolean b = true" no quiere decir que la representación de un booleano sea un string (de hecho no escribes b = "true").

Además, las conversiones de tipos de java a SQL los realiza el driver JDBC, que suele ser bastante listo.

Cuando se diseñan tablas y se usa un char para recoger un boolean, es simplemente porque un char ocupa 1 byte, mientras que el entero más pequeño usará, seguramente, 2.

Así que, si quieres un método eficiente, prueba simplemente setBoolean() y getBoolean() en java, y tipo BIT en la BD.

Y echa un ojo a la documentación de Oracle (copio y pego):
"
11.3.4.2.2 getBoolean() Note

Because there is no BOOLEAN database type, when you use getBoolean() a datatype conversion always occurs. The getBoolean() method is supported only for numeric columns (BIT, TINYINT, SMALLINT, INTEGER, BIGINT, REAL, FLOAT, DOUBLE, DECIMAL, NUMERIC, CHAR, VARCHAR, or LONGVARCHAR). When applied to these columns, getBoolean() interprets any zero (0) value as false, and any other value as true. When applied to any other sort of column, getBoolean() raises the exception java.lang.NumberFormatExceptionCheck with Longxing!.
"
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

Almacenamiento (en Oracle) de tipos Booleanos en java

Publicado por gchp (2 intervenciones) el 17/05/2011 21:57:20
Muchisimas gracias Tomás, ahora probaré y ya te contaré como ha ido todo.

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