Foros del Web » Programación para mayores de 30 ;) » Java »

PreparedStatement en JDBC

Estas en el tema de PreparedStatement en JDBC en el foro de Java en Foros del Web. Buenas, tengo una duda a ver si alguien me puede hechar una mano. ¿La clase PreparedStatement de JDBC puede recibir parámetros que sean funciones? Buscando ...
  #1 (permalink)  
Antiguo 21/01/2013, 07:56
 
Fecha de Ingreso: enero-2013
Mensajes: 10
Antigüedad: 11 años, 3 meses
Puntos: 0
Pregunta PreparedStatement en JDBC

Buenas, tengo una duda a ver si alguien me puede hechar una mano. ¿La clase PreparedStatement de JDBC puede recibir parámetros que sean funciones?

Buscando por internet he llegado a la siguiente conclusión:

Statement: Permite ejecutar sentencias SQL sin parámetros
PreparedStatement: Permite ejecutar sentencias SQL con parámetros de entrada
CallableStatement: Para sentencias SQL con parámetros de entrada y salida, como llamadas a procedimientos almacenados

De esta información yo deduzco que para ejecutar una función sólo se puede utilizar la clase CallableStatement, no obstante en los apuntes de clase he leido que PreparedStatement permite que los parámetros sean funciones ¿esto es así?.

Muchas gracias, un saludo.

Última edición por elchapitas; 21/01/2013 a las 10:42
  #2 (permalink)  
Antiguo 22/01/2013, 11:32
 
Fecha de Ingreso: enero-2013
Mensajes: 8
Antigüedad: 11 años, 3 meses
Puntos: 1
Respuesta: PreparedStatement en JDBC

No estoy seguro, pero la clase PreparedStatement puedes enviarle de que tipo es el parametro por ejemplo
preparedStatement.setString();

y llamas algo asi
suponiendo que tu query es "SELECT * FROM tabla WHERE a = ?"

Si la función te devuelve un solo resultado entonces es fácil y lo haces asi

prepardStatement.setString("SELECT funcion()");
  #3 (permalink)  
Antiguo 22/01/2013, 14:02
 
Fecha de Ingreso: enero-2013
Mensajes: 10
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: PreparedStatement en JDBC

Gracias mynor7, pero sigue sin quedarme claro, entiendo que a PreparedStatement se puede pasar sólo parámetros de entrada como en el siguiente ejemplo:

PreparedStatement ps = conexion.prepareStatement("insert into person values (?,?,?)");

también entiendo que a CallableStatement se le puede pasar parámetros de entrada y salida, por tanto se le pueden pasar funciones que devuelvan algo e incluso procedimientos (funciones que no devuelven nada)

CallableStatement ps = conexion.prepareCall( "{?=funcion(?)}");

Ahora bien mi pregunta es la siguiente ¿a PreparedStatement le podría pasar un parametro (como el del siguiente ejemplo) que fuera un procedimiento? porque supongo que no se podrá pasar una función puesto que la clase PreparedStatement no tiene métodos para capturar la salida.

PreparedStatement ps = conexion.prepareStatement( "{procedimiento(?)}");

Muchas gracias, un saludo.
  #4 (permalink)  
Antiguo 23/01/2013, 02:39
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: PreparedStatement en JDBC

Si CallableStatement es una clase específica para llamar a procedures y funciones, ¿para qué iba a existir si ya pudieras hacerlo desde PreparedStatement? Y mejor ¿por qué quieres hacerlo con PreparedStatement y no con CallableStatement ?

Lo que sí puedes hacer con PreparedStatement es que una función forma parte de la select, por ejemplo

"SELECT nombre,apellido,edad(fecha_nac) FROM TABLA1 whuere id=?"

donde edad() es una función de SQL que calcula la edad a partir de la fecha de nacimiento.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #5 (permalink)  
Antiguo 26/01/2013, 15:00
 
Fecha de Ingreso: enero-2013
Mensajes: 10
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: PreparedStatement en JDBC

Pues tenía/tengo claro que para ejecutar procedimientos/funciones se usa la clase CallableStatement, la pregunta era porque en los apuntes del temario decia que la clase PreparedStatement podía recibir funciones como parametros, entonces quería saber si quizás pudiera recibir como parametro un procedimiento que no devuelve nada.

Sigo sin tenerlo claro, pero me supongo que eso de que puede recibir funciones como parametros se referirá a lo que comentas tú de que una función puede formar parte de select que se le pasa como argumento a la clase PreparedStatement.

Gracias.

Etiquetas: clase
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:58.