java.sql.SQLException:在mysql结果集结束后 [英] java.sql.SQLException: After end of result set in mysql
问题描述
我正在尝试从MYSQL下载图像(.png)文件。
一段时间它工作正常。无法找到确切的问题。
它在Jboss服务器上正常工作。尝试在Apche上的本地计算机上运行时抛出错误。
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.
请帮我修复错误。
这是我的java代码。
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);
}
}
这是堆栈跟踪输出:
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()
,如下所示:
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);
}
这篇关于java.sql.SQLException:在mysql结果集结束后的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!