1 Replies Last post: Jul 4, 2008 4:46 PM by Nate Putnam  
Coolcat KeyContributor 727 posts since
Mar 19, 2007
Currently Being Moderated

Jul 4, 2008 3:57 PM

SQLException: Illegal operation on empty result set.

Packet Filter 2.0.1

Openfire 3.5.2

MySQL Database

 

Got this exception with empty rule table. I had reported this error some time ago, but it's still not resolved.

 

2008.07.04 22:39:19 [org.jivesoftware.openfire.plugin.rules.DbRuleManager.getLastOrderId(DbRuleMana ger.java:170)]
java.sql.SQLException: Illegal operation on empty result set.
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:910)
at com.mysql.jdbc.ResultSet.checkRowPos(ResultSet.java:713)
at com.mysql.jdbc.ResultSet.getInt(ResultSet.java:2617)
at org.jivesoftware.openfire.plugin.rules.DbRuleManager.getLastOrderId(DbRuleManag er.java:167)
at org.jivesoftware.openfire.plugin.rules.RuleManagerProxy.getLastOrder(RuleManage rProxy.java:64)
at org.jivesoftware.openfire.plugin.packetFilter.pf_002dmain_jsp._jspService(pf_00 2dmain_jsp.java:85)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.jivesoftware.openfire.container.PluginServlet.handleJSP(PluginServlet.java: 229)
at org.jivesoftware.openfire.container.PluginServlet.service(PluginServlet.java:87 )
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.ja va:1093)
at org.jivesoftware.admin.PluginFilter.doFilter(PluginFilter.java:70)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.ja va:1084)
at org.jivesoftware.admin.AuthCheckFilter.doFilter(AuthCheckFilter.java:99)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.ja va:1084)
at com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:11 8)
at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:52)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.ja va:1084)
at org.jivesoftware.util.LocaleFilter.doFilter(LocaleFilter.java:66)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.ja va:1084)
at org.jivesoftware.util.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingF ilter.java:42)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.ja va:1084)
at org.jivesoftware.admin.PluginFilter.doFilter(PluginFilter.java:70)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.ja va:1084)
at org.jivesoftware.admin.AuthCheckFilter.doFilter(AuthCheckFilter.java:99)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.ja va:1084)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollect ion.java:206)
at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:324)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.j ava:829)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488) 

 

I checked the code:


        try {
            con = DbConnectionManager.getConnection();
            pstmt = con.prepareStatement(GET_LAST_ORDERID);
            rs = pstmt.executeQuery();
            rs.next();
            count = rs.getInt(1);

        } catch (SQLException sqle) {
            Log.error(sqle);
//If error dataset is probably empty
            return 0;
        }

 

Why logging an ERROR (!!!) exception if there are just no rules? I posted a solution for this already the last time (see link above) and you replied to that, so I assumed it would be in the next version....

Nate Putnam Jiver 102 posts since
Oct 23, 2006
Currently Being Moderated
Jul 15, 2008 10:08 AM in response to: Coolcat
Re: SQLException: Illegal operation on empty result set.

I checked in a fix for this in trunk. It seems to be one of those awesome Mysql driver things. On some versions of Mysql this seems to do the right thing (return 0) and on others it throws and exception. I have also seen this issue before with inserting text into varchar fields. If the text is to long 500 characters in 255 long field it will chop the text down and insert, sometimes it will throw an exception. weird.

 

Anyway should be fixed for Mysql moving forward.

More Like This

  • Retrieving data ...