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

No hay más datos para leer del socket

Estas en el tema de No hay más datos para leer del socket en el foro de Java en Foros del Web. Me sale este error y no tengo ni idea de a qué se puede deber. Hago una consulta a la base de datos para obtener ...
  #1 (permalink)  
Antiguo 27/04/2009, 06:20
 
Fecha de Ingreso: julio-2008
Mensajes: 62
Antigüedad: 15 años, 9 meses
Puntos: 0
No hay más datos para leer del socket

Me sale este error y no tengo ni idea de a qué se puede deber. Hago una consulta a la base de datos para obtener el nº de registros (es un count). Luego según si el count devuelve 1 registro o más de 1 hago una consulta para obtener un id de una tabla o hago otra consulta para obtener los datos de tantas filas como obtuve de número en el count de la primera select. Esta es la traza del error:
StackTrace:
java.sql.SQLException: No hay más datos para leer del socket
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBE rror.java:134)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBE rror.java:179)
at oracle.jdbc.dbaccess.DBError.check_error(DBError.j ava:1160)
at oracle.jdbc.ttc7.MAREngine.unmarshalUB1(MAREngine. java:963)
at oracle.jdbc.ttc7.MAREngine.unmarshalSB1(MAREngine. java:893)
at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:369)
at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol .java:1891)
at oracle.jdbc.ttc7.TTC7Protocol.fetch(TTC7Protocol.j ava:1198)
at oracle.jdbc.driver.OracleStatement.doExecuteQuery( OracleStatement.java:2400)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTi meout(OracleStatement.java:2672)
at oracle.jdbc.driver.OracleStatement.doScrollStmtExe cuteQuery(OracleStatement.java:6944)
at oracle.jdbc.driver.OracleStatement.executeQuery(Or acleStatement.java:578)

Os agradecería que me explicarais a qué se suele deber el error " No hay más datos para leer del socket" y si alguien puede aportar algún dato más, sin duda lo agradeceré.
  #2 (permalink)  
Antiguo 27/04/2009, 08:29
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: No hay más datos para leer del socket

Suele pasar eso cuando la conexion se ha cerrado y tu sigues intentando usarla. Puede haberla cerrado otro Thread o puede haberla cerrado el servidor por algun motivo (en algunos casos por timeout) pero básicamente el driver de Oracle responde eso cuando el socket ya no responde por que la conexión se ha cerrado.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #3 (permalink)  
Antiguo 29/04/2009, 01:34
 
Fecha de Ingreso: julio-2008
Mensajes: 62
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: No hay más datos para leer del socket

Gracias por tu interés pero cuando la conexión a la base de datos está cerrada el error que me da es: Conexión cerrada. Así que creo que mi problema debe ser otro, porque como ya he dicho el error es No hay más datos para leer del socket. ¿Hay alguna otra posible causa de este error?
  #4 (permalink)  
Antiguo 08/05/2009, 00:13
 
Fecha de Ingreso: julio-2008
Mensajes: 62
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: No hay más datos para leer del socket

Descubrí que el error era al <i>consultar</i> la sentencia SQL y dejó de fallar al quitarle esto:
LEFT JOIN
(SELECT SYS_CONNECT_BY_PATH (d_contacto, ', ') AS telefonos, x_id_persona
FROM (SELECT c.x_id_persona, d_contacto, c_tipo,
ROW_NUMBER () OVER (PARTITION BY cp.x_id_persona ORDER BY c_tipo DESC)
rn,
COUNT (*) OVER (PARTITION BY c.x_id_persona) cnt
FROM sv_rh_candidato c
LEFT JOIN
(SELECT x_id_persona, d_contacto, c_tipo
FROM sv_ge_contacto_persona
WHERE c_tipo = 'TM' OR c_tipo = 'TF'
GROUP BY x_id_persona, d_contacto, c_tipo) cp
ON c.x_id_persona = cp.x_id_persona
)
WHERE LEVEL = cnt
START WITH rn = 1
CONNECT BY PRIOR rn = rn - 1 AND PRIOR x_id_persona = x_id_persona) telf
ON p.x_id_persona = telf.x_id_persona

¿Por qué puede dar problemas este left join?
  #5 (permalink)  
Antiguo 08/05/2009, 05:16
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: No hay más datos para leer del socket

Lo único que se me ocurre es que el join haga que el query sea tan lento que el dirver JDBC cierre la conexion pensando que se ha colgado.

O eso un bug del driver por algun lado, por que una clausula de SQL haciendo que un socket se cierre no es nada normal.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
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 19:57.