Este equipo especializado luego de días de investigación y de recopilar de información, dimos con la respuesta, deseamos que resulte útil para ti para tu proyecto.
Solución:
Esto resultó ser un error local, pero publicaré la solución de todos modos porque esta situación tiene algún valor educativo.
Como aprendí del comentario de @Ralph a esta respuesta, eliminar “lo imposible” es una buena manera de resolver tales problemas.
Después de evitar el riesgo de siteID
al estar equivocado (al codificarlo), tenemos la siguiente situación:
- los misma consulta exacta trabajado en un entorno, pero no en el otro, para sólo un particular
SiteID
2184 - es imposible que
ResultSet
sólo no funciona por este valor particular (I afirmar lo es, porque siempre asumo que los errores están en mi código, no en bibliotecas de idiomas) - si es así, las bases de datos debe diferir
Agregar declaraciones de resultados dentro de while loop ayudó en mi caso.
while(rs.next)
rs.getString("your column name");
La explicación más probable es que su ResultSet no contiene filas. ¿Has comprobado eso?
Si ese es el caso, rs.next()
regresará false, pero ya no está comprobando el valor de retorno. Poner rs.next()
de vuelta al bloque if, estaba bien allí.
Puedes asegurarte por:
if (rs.next())
if(rs.getBytes("SitePicture")!=null)
byte ba[] = rs.getBytes("SitePicture");
return new sun.misc.BASE64Encoder().encodeBuffer(ba);
else
System.out.println("No rows returned");
EDITAR:
¿Qué tipo de columna es siteID? Su método toma un int, pero su SQL lo envuelve entre comillas, como si fuera un string.
EDITAR 2:
El uso de una declaración preparada podría resolver su problema.
PreparedStatement ps = conn.prepareStatement("SELECT SitePicture FROM SiteTable WHERE SiteID = ?");
ps.setInt(1, siteId);
ResultSet rs = ps.executeQuery();
Si entiendes que te ha resultado provechoso este post, nos gustaría que lo compartas con el resto juniors y nos ayudes a dar difusión a este contenido.