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

KhA*_*aAb 7 java 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);
        }
    }
Run Code Online (Sandbox Code Playgroud)

这是堆栈跟踪输出:

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)
Run Code Online (Sandbox Code Playgroud)

Aas*_*ray 12

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

result = st.executeQuery();
if(!result.next()){
    input = result.getAsciiStream(1);
    }
Run Code Online (Sandbox Code Playgroud)