2013-05-07 59 views
3

我试图从MYSQL下载图像(.png)文件。 有些时候它工作fine.unable找到确切的问题。 它在Jboss服务器上正常工作。抛出一个错误,同时试图在我的本地计算机上运行Apche。java.sql.SQLException:在mysql结果集结束后

请帮我修复错误。 这是我的java代码。

这里是堆栈跟踪输出:

java.sql.SQLException: After end of result set 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074) 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:988) 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:974) 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:919) 
at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:854) 
at com.mysql.jdbc.ResultSetImpl.getAsciiStream(ResultSetImpl.java:1275) 
at org.apache.tomcat.dbcp.dbcp.DelegatingResultSet.getAsciiStream(DelegatingResultSet.java:253) 
at org.apache.tomcat.dbcp.dbcp.DelegatingResultSet.getAsciiStream(DelegatingResultSet.java:253) 
at com.ninenexus.model.Signature.getSignatureImage(Signature.java:173) 
at com.ninenexus.servlets.SaveMySignature.mySignatureDisplay(SaveMySignature.java:69) 
at com.ninenexus.servlets.SaveMySignature.doPost(SaveMySignature.java:35) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:641) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:306) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:380) 
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243) 
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188) 
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:288) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
at java.lang.Thread.run(Unknown Source) 
+1

其中的堆栈跟踪? – 2013-05-07 11:50:31

+1

什么是错误,特别是当它不起作用时?一定要关闭'finally'块中的所有资源。另外,你为什么使用字符来表示二进制数据? – bdkosher 2013-05-07 11:50:55

+0

Marco Forberg.in cath block – 2013-05-07 11:51:50

回答

7

要调用result.next()两次。我假设你的查询只返回1行,因为你试图匹配Userid。当调用第二个result.next()时,ResultSet中没有行要返回。这就是为什么一个SQLException被抛出。卸下第一result.next()像这样:

result = st.executeQuery(); 
if(!result.next()){ 
    input = result.getAsciiStream(1); 
    } 
+0

这还不行吗?这是说如果不是result.next()。 – DaveH 2013-05-07 12:09:17

+0

无所谓,通话本身会引发异常。 – Aashray 2013-05-07 12:20:46

+0

好的,我可以看到第二个调用会抛出异常。但让我们说,他将第一个调用移除到'result.next()'。其余的调用将返回true,这意味着'输入'变量不会被填充不是吗? – DaveH 2013-05-07 12:54:47

1

第二result.next移动你过去的结果集的结尾。

我想你想

result = st.executeQuery(); 
if(result.next()){ 
    input = result.getAsciiStream(1); 
} 
+0

1+ for response ... :) – 2013-11-19 19:46:58