Regresar   Foros del Web > Programación para sitios web > Java y JSP > JSP/Servlets

El registro es Gratis en Foros del Web
Respuesta
 
Herramientas Buscar en Tema Desplegado
Antiguo 09/06/05, 16:04:51   #1 (permalink)
antony_fire ha deshabilitado el Karma
 
Registrado: jun 2005
Ubicación: Cucuta
Mensajes: 58
antony_fire is offline  
CallableStatement

Hola a todos.

Ultimamente he estado desarrollando mi proyecto de grado y he tenido un problema, en adelante le comento mi problemita.

He creado un procedimiento almacenado en firebird, este procedimiento retorna una tabla de 13 columnas por N filas, bien, lo intente hacer de la siguiente forma, observemos el siguiente codigo:

rs = st.executeQuery("SELECT * FROM OBTENER_CARTERA('2005/01/01')");
while(rs.next()) {
System.out.println(rs.getObject(1));
System.out.println(rs.getObject(2));
System.out.println(rs.getObject(3));
System.out.println(rs.getObject(4));
System.out.println(rs.getObject(5));
System.out.println(rs.getObject(6));
System.out.println(rs.getObject(7));
System.out.println(rs.getObject(8));
System.out.println(rs.getObject(9));
System.out.println(rs.getObject(10));
System.out.println(rs.getObject(11));
System.out.println(rs.getObject(12));
System.out.println(rs.getObject(13));
}

Bueno, este codigo arroja una exception que informa que el indice 9 no existe, pero claro que existe por que yo le hago el mismo query directo sobre la base de datos por medio del ibconsole y me arroja todos los resultados.

Bien, ya que lo anterior no funcionó, decidí utilizar una interfaz del paquete java.sql que se llama CallableStatement el codigo que realize es el siguiente, pongamos atencion.

Connection con = DriverManager.getConnection(ENLACE_LOGICO,USER,PAS SWORD);
ResultSet rs = null;
java.sql.CallableStatement cs = con.prepareCall("{call PRO_CALC_CARTERA(?,?,?,?,?,?,?,?,?,?,?,?,?,?)}");
cs.setTimestamp(1,java.sql.Timestamp.valueOf("2006-11-11 00:00:00.0"));
cs.registerOutParameter(2,java.sql.Types.VARCHAR);
cs.registerOutParameter(3,java.sql.Types.VARCHAR);
cs.registerOutParameter(4,java.sql.Types.VARCHAR);
cs.registerOutParameter(5,java.sql.Types.VARCHAR);
cs.registerOutParameter(6,java.sql.Types.VARCHAR);
cs.registerOutParameter(7,java.sql.Types.VARCHAR);
cs.registerOutParameter(8,java.sql.Types.VARCHAR);
cs.registerOutParameter(9,java.sql.Types.INTEGER);
cs.registerOutParameter(10,java.sql.Types.VARCHAR) ;
cs.registerOutParameter(11,java.sql.Types.DATE);
cs.registerOutParameter(12,java.sql.Types.FLOAT);
cs.registerOutParameter(13,java.sql.Types.FLOAT);
cs.registerOutParameter(14,java.sql.Types.INTEGER) ;
//rs = (ResultSet)cs.getObject(1);
rs = cs.executeQuery();
while(rs.next()) {
System.out.println(rs.getObject(1));
System.out.println(rs.getObject(2));
System.out.println(rs.getObject(3));
System.out.println(rs.getObject(4));
System.out.println(rs.getObject(5));
System.out.println(rs.getObject(6));
System.out.println(rs.getObject(7));
System.out.println(rs.getObject(8));
System.out.println(rs.getObject(9));
System.out.println(rs.getObject(10));
System.out.println(rs.getObject(11));
System.out.println(rs.getObject(12));
System.out.println(rs.getObject(13));
}

Porsupesto que este codigo tampoco sirve.

si alguno de ustedes sabe como hacer lo que estoy haciendo o si alguien quiere que sea mas explicito por favor responda a este mensage, muchas gracias por la colaboracion que me puedan brindar...

Adios amigos.
  Responder Con Cita
Antiguo 07/03/08, 14:27:31   #2 (permalink)
qgqlochekone ha deshabilitado el Karma
 
Registrado: mar 2008
Mensajes: 11
Send a message via Skype™ to qgqlochekone
qgqlochekone is offline  
Re: CallableStatement

tal vez el comportamiento en consola deriva del de el JDBC

ademas, seria bueno pongas la traza de la execpcion, pero completa, muchas veces la raiz esta en otro lado, puede ser que rs.getObject(9) genera una exepcion desde le propio backen

Última edición por qgqlochekone fecha: 07/03/08 a las 14:36:47.
  Responder Con Cita
Antiguo 09/03/08, 06:23:35   #3 (permalink)
GreenEyed tiene algunos puntos positivos de karma
 
Registrado: oct 2003
Mensajes: 2.337
GreenEyed is offline  
Re: CallableStatement

¿Seguro que el driver JDBC y la BDD permiten realizar llamadas a procedimientos que devuelvan cursores?

Pocas BDD lo permiten y normalmente hay que declarar los objetos de forma especial.

S!
__________________
TAANSTAFL - Para obtener respuestas inteligentes, lo mejor es empezar por preguntar de forma inteligente.
  Responder Con Cita
Antiguo 13/03/08, 03:32:48   #4 (permalink)
sanmi69 tiene un saldo positivo de karma
 
Registrado: sep 2004
Mensajes: 176
sanmi69 is offline  
Re: CallableStatement

Cita:
Originalmente publicado por antony_fire Ver Mensaje
Hola a todos.

Ultimamente he estado desarrollando mi proyecto de grado y he tenido un problema, en adelante le comento mi problemita.

He creado un procedimiento almacenado en firebird, este procedimiento retorna una tabla de 13 columnas por N filas, bien, lo intente hacer de la siguiente forma, observemos el siguiente codigo:

rs = st.executeQuery("SELECT * FROM OBTENER_CARTERA('2005/01/01')");
while(rs.next()) {
System.out.println(rs.getObject(1));
System.out.println(rs.getObject(2));
System.out.println(rs.getObject(3));
System.out.println(rs.getObject(4));
System.out.println(rs.getObject(5));
System.out.println(rs.getObject(6));
System.out.println(rs.getObject(7));
System.out.println(rs.getObject(8));
System.out.println(rs.getObject(9));
System.out.println(rs.getObject(10));
System.out.println(rs.getObject(11));
System.out.println(rs.getObject(12));
System.out.println(rs.getObject(13));
}

Bueno, este codigo arroja una exception que informa que el indice 9 no existe, pero claro que existe por que yo le hago el mismo query directo sobre la base de datos por medio del ibconsole y me arroja todos los resultados.

Bien, ya que lo anterior no funcionó, decidí utilizar una interfaz del paquete java.sql que se llama CallableStatement el codigo que realize es el siguiente, pongamos atencion.

Connection con = DriverManager.getConnection(ENLACE_LOGICO,USER,PAS SWORD);
ResultSet rs = null;
java.sql.CallableStatement cs = con.prepareCall("{call PRO_CALC_CARTERA(?,?,?,?,?,?,?,?,?,?,?,?,?,?)}");
cs.setTimestamp(1,java.sql.Timestamp.valueOf("2006-11-11 00:00:00.0"));
cs.registerOutParameter(2,java.sql.Types.VARCHAR);
cs.registerOutParameter(3,java.sql.Types.VARCHAR);
cs.registerOutParameter(4,java.sql.Types.VARCHAR);
cs.registerOutParameter(5,java.sql.Types.VARCHAR);
cs.registerOutParameter(6,java.sql.Types.VARCHAR);
cs.registerOutParameter(7,java.sql.Types.VARCHAR);
cs.registerOutParameter(8,java.sql.Types.VARCHAR);
cs.registerOutParameter(9,java.sql.Types.INTEGER);
cs.registerOutParameter(10,java.sql.Types.VARCHAR) ;
cs.registerOutParameter(11,java.sql.Types.DATE);
cs.registerOutParameter(12,java.sql.Types.FLOAT);
cs.registerOutParameter(13,java.sql.Types.FLOAT);
cs.registerOutParameter(14,java.sql.Types.INTEGER) ;
//rs = (ResultSet)cs.getObject(1);
rs = cs.executeQuery();
while(rs.next()) {
System.out.println(rs.getObject(1));
System.out.println(rs.getObject(2));
System.out.println(rs.getObject(3));
System.out.println(rs.getObject(4));
System.out.println(rs.getObject(5));
System.out.println(rs.getObject(6));
System.out.println(rs.getObject(7));
System.out.println(rs.getObject(8));
System.out.println(rs.getObject(9));
System.out.println(rs.getObject(10));
System.out.println(rs.getObject(11));
System.out.println(rs.getObject(12));
System.out.println(rs.getObject(13));
}

Porsupesto que este codigo tampoco sirve.

si alguno de ustedes sabe como hacer lo que estoy haciendo o si alguien quiere que sea mas explicito por favor responda a este mensage, muchas gracias por la colaboracion que me puedan brindar...

Adios amigos.

no entiendo bien lo que has querido hacer con el callable statement.

Si tu procedimiento tienen 1 parametro porq le pasas 14 parametros???
Te pongo la solucion si la bbdd fuera oracle:

Código PHP:
 Connection con DriverManager.getConnection(ENLACE_LOGICO,USER,PASSWORD);
        
ResultSet rs null;
        
java.sql.CallableStatement cs con.prepareCall("{CALL ?:=PRO_CALC_CARTERA(?)}");
        
cs.registerOutParameter(1,OracleTypes.CURSOR);
        
cs.setTimestamp(2,java.sql.Timestamp.valueOf("2006-11-11 00:00:00.0"));
 
cs.execute();
 
rs = (ResultSet)cs.getObject(1);
        while(
rs.next()) {
            
System.out.println(rs.getObject(1));
            
System.out.println(rs.getObject(2));
            
System.out.println(rs.getObject(3));
            
System.out.println(rs.getObject(4));
            
System.out.println(rs.getObject(5));
            
System.out.println(rs.getObject(6));
            
System.out.println(rs.getObject(7));
            
System.out.println(rs.getObject(8));
            
System.out.println(rs.getObject(9));
            
System.out.println(rs.getObject(10));
            
System.out.println(rs.getObject(11));
            
System.out.println(rs.getObject(12));
            
System.out.println(rs.getObject(13));
        } 
Depende de la BBDD, la solucion puede ser asi tb:

Código PHP:
 Connection con DriverManager.getConnection(ENLACE_LOGICO,USER,PASSWORD);
       
ResultSet rs null;
       
java.sql.CallableStatement cs con.prepareCall("{CALL PRO_CALC_CARTERA(?)}");      
       
cs.setTimestamp(1,java.sql.Timestamp.valueOf("2006-11-11 00:00:00.0"));
cs.execute();
rs cs.executeQuery();
       while(
rs.next()) {
           
System.out.println(rs.getObject(1));
           
System.out.println(rs.getObject(2));
           
System.out.println(rs.getObject(3));
           
System.out.println(rs.getObject(4));
           
System.out.println(rs.getObject(5));
           
System.out.println(rs.getObject(6));
           
System.out.println(rs.getObject(7));
           
System.out.println(rs.getObject(8));
           
System.out.println(rs.getObject(9));
           
System.out.println(rs.getObject(10));
           
System.out.println(rs.getObject(11));
           
System.out.println(rs.getObject(12));
           
System.out.println(rs.getObject(13));
       } 
  Responder Con Cita
Antiguo 13/03/08, 09:36:23   #5 (permalink)
sanmi69 tiene un saldo positivo de karma
 
Registrado: sep 2004
Mensajes: 176
sanmi69 is offline  
Re: CallableStatement

Cita:
Originalmente publicado por qgqlochekone Ver Mensaje
tal vez el comportamiento en consola deriva del de el JDBC

ademas, seria bueno pongas la traza de la execpcion, pero completa, muchas veces la raiz esta en otro lado, puede ser que rs.getObject(9) genera una exepcion desde le propio backen
joer macho rescatando post de 3 años??? jejeje
  Responder Con Cita
Antiguo 27/04/08, 13:26:47   #6 (permalink)
arrieta ha deshabilitado el Karma
 
Registrado: abr 2008
Mensajes: 2
arrieta is offline  
Re: ¿Qué tengo que importar?

Hola, quiero hacer un insert en la base de datos oracle y para ello necesito saber que "using"-s necesito definir.

en java son :
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

Y cómo puedo saber que "using ...." son en c#??? estoy definiendo la conexión en una clase .cs.

Gracias
  Responder Con Cita
Antiguo 28/04/08, 06:35:45   #7 (permalink)
GreenEyed tiene algunos puntos positivos de karma
 
Registrado: oct 2003
Mensajes: 2.337
GreenEyed is offline  
Re: CallableStatement

Quiza te puedan ayudar mejor en foro de C#, ya que este es de Java.

S!
__________________
TAANSTAFL - Para obtener respuestas inteligentes, lo mejor es empezar por preguntar de forma inteligente.
  Responder Con Cita
Respuesta


Califica este Tema - CallableStatement.

Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado Califica este Tema
Califica este Tema:

Reglas del foro
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está activado
Las caritas están activado
Código [IMG] está activado
Código HTML está desactivado


Todas las horas son GMT -6. La hora es 07:03:28.

Message Board Statistics

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 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96