我正在尝试从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抛出an的原因。result.next()像这样删除第一个:
result.next()
Userid
ResultSet
SQLException
result = st.executeQuery(); if(!result.next()){ input = result.getAsciiStream(1); }