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

Mostrar Query

Estas en el tema de Mostrar Query en el foro de Java en Foros del Web. He conseguido conectarme a una BD Informix y al ejecutar cualquier Query que me de como respuesta una sola columna va bien; el problema reside ...
  #1 (permalink)  
Antiguo 17/10/2005, 04:29
 
Fecha de Ingreso: agosto-2005
Mensajes: 83
Antigüedad: 18 años, 9 meses
Puntos: 0
Mostrar Query

He conseguido conectarme a una BD Informix y al ejecutar cualquier Query que me de como respuesta una sola columna va bien; el problema reside cuando quiero ejecutar una consulta que me devuelva mas de un registro me sale esto por pantalla:

Comienza Main...
SQLException atrapada No such column name

----jGRASP: operation complete.

El codigo es el siguiente:

stmt=con.createStatement();

rs=stmt.executeQuery("SELECT * FROM TSERINS WHERE serins='ACL'");



while (rs.next()){
System.out.println(rs.getString("*"));
}
}catch (ClassNotFoundException e){
System.out.println("No se pudo cargar el driver "+e.getMessage());
}catch(SQLException e){
System.out.println("SQLException atrapada "+e.getMessage());
  #2 (permalink)  
Antiguo 17/10/2005, 06:48
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
¿Desde cuando existe la columna de nombre '*'?

Eso es un alias para decir: "todas las columnas" en SQL, pero no es ninguna columna en concreto, asi que no puedes hacer "rs.getString("*")"
  #3 (permalink)  
Antiguo 17/10/2005, 08:43
 
Fecha de Ingreso: agosto-2005
Mensajes: 83
Antigüedad: 18 años, 9 meses
Puntos: 0
execute procedure

ok muchas gracias por hacerme darme cuentad e lo estupido q soy..jeje..es lo q tiene no tengo solucion ..

Pero bueno a lo q voy, lo que he de hacer no es consultar a la BD sino lanzar unos procedimientos almacenados con lo q el codigo ha quedado asi:

rs=stmt.executeQuery("execute procedure prueba_proced()");

Y me da el siguiente Mensaje

SQLEexeption: Method only for queries

Como se podria lanzar un procedimiento entonces?? muchas gracias
  #4 (permalink)  
Antiguo 17/10/2005, 10:21
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
"SQLException: Method only for queries"
-> Sólo vale para hacer consultas "SELECT".

Para ejecutar procedimientos se utilizan los CallableStatement que se obtienen a traves de un Connection.prepareCall(String), por ejemplo.

Repásate un buen manual de JDBC y el API java.sql.* cuando tengas dudas, que si no iras avanzando poco a poco. Es mejor ir con las bases seguras.

Saludos
  #5 (permalink)  
Antiguo 18/10/2005, 04:40
 
Fecha de Ingreso: agosto-2005
Mensajes: 83
Antigüedad: 18 años, 9 meses
Puntos: 0
Procedimineto alamacenado

Muchas gracias de nuevo ya he ejecutado el procedimiento almacenado basandome en un manual que he encontrado por Internet con el siguiente codigo:

CallableStatement cs = con.prepareCall("{call prueba_proc}");
Resultset rs = cs.executeQuery();

[Aun asi en el ejemplo sigue utilizando el .executeQuery]

Al ejecutar el programa no da ningun error pero no muestra nada por pantalla y el procedimineto almacenado es una consulta con lo que me deberia devolver algo:

create procedure prueba_proc()
DEFINE wdeserv char(20);
SELECT deserv
INTO wdeserv
FROM tserins
WHERE serins = 'ACV';
end procedure

Muchas gracias de nuevo...
  #6 (permalink)  
Antiguo 18/10/2005, 04:40
 
Fecha de Ingreso: agosto-2005
Mensajes: 83
Antigüedad: 18 años, 9 meses
Puntos: 0
Procedimineto alamacenado

Muchas gracias de nuevo ya he ejecutado el procedimiento almacenado basandome en un manual que he encontrado por Internet con el siguiente codigo:

CallableStatement cs = con.prepareCall("{call prueba_proc}");
Resultset rs = cs.executeQuery();

[Aun asi en el ejemplo sigue utilizando el .executeQuery]

Al ejecutar el programa no da ningun error pero no muestra nada por pantalla y el procedimineto almacenado es una consulta con lo que me deberia devolver algo:

create procedure prueba_proc()
DEFINE wdeserv char(20);
SELECT deserv
INTO wdeserv
FROM tserins
WHERE serins = 'ACV';
end procedure

Muchas gracias de nuevo...
  #7 (permalink)  
Antiguo 18/10/2005, 05:43
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Hola,

El metodo "executeQuery" tiene el mismo nombre, pero en un caso lo estabas ejecutando sobre la conexion y en el otro sobre un CallableStatement, esa es la diferencia .

En cuanto a que devuelva un resultado... los procedimientos no devuelven nada, a no ser que sean funciones o que tengan parametros de entrada/salida, y si estas intentando que te devuelvan un resultset... la ultima vez que lo intente era algo dependiente de la base de datos y del driver JDBC, ya que devolver desde un procedimiento almacenado un resultset no esta contemplado en JDBC estándar (al menos la ultima vez que lo mire). Para hacerlo con Oracle, por ejemplo, hay que usar clases propias del driver JDBC de Oracle, mirando en su documentacion.

Saludos
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 17:27.