java.sql.SQLException:在mysql结果集结束后

我想从MYSQL下载图像(.png)文件。 一段时间它工作正常。不能找到确切的问题。 它在Jboss服务器上正常工作。 尝试在Apche上的本地计算机上运行时抛出错误。

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

try { conection = SQLUtil.createConnection(Constant.DataSourceName); st = conection.prepareStatement("SELECT image FROM TABLE_NAME WHERE Userid="+ getUserId()); result = st.executeQuery(); result.next(); if(!result.next()){ input = result.getAsciiStream(1); } FileOutputStream output = new FileOutputStream(getSignatureImageDestinationPath()); int ch = input.read(); while (ch != -1) { output.write((char) ch); ch = input.read(); } output.close(); input.close(); result.close(); SQLUtil.closeConnection(conection); } catch (Exception e) { System.out.println(e+":Error"); } finally { if (st != null) { SQLUtil.closeConnection(conection); } } 

这是堆栈跟踪输出:

 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) 

您正在调用result.next()两次。 我假设您的查询只返回1行,因为您尝试通过Userid进行匹配。 当调用第二个result.next()时, ResultSet不会返回任何行。 这就是SQLException原因。 像这样删除第一个result.next()

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

第二个result.next将您移动到结果集的末尾。

我想你想要的

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