I am trying to Download image (.png) file from MYSQL. some time it works fine.unable find exact problem. it works properly on Jboss server. throws an error while trying to run in my local machine on Apche.
Please help me to FIX the error. Here is my java code.
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);
}
}
Here is Stack trace output:
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)
You are calling result.next()
twice. I'm assuming that your query returns only 1 row since you are trying to match by Userid
. When the second result.next()
is being called, there is no row to be returned in the ResultSet
. This is why an SQLException
is being thrown. Remove the 1st result.next()
like so:
result = st.executeQuery();
if(!result.next()){
input = result.getAsciiStream(1);
}
The second result.next
is moving you past the end of the result set.
I think you want
result = st.executeQuery();
if(result.next()){
input = result.getAsciiStream(1);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With