How to properly cancel a ResultSet query

I have a long running query that can take as long as 10 minutes. In order to allow users to cancel this query I needed to find a way to interrupt the ResultSet I have:

ResultSetMetaData metaData = rs.getMetaData();

To test if it is cancellable, I make another thread

Runnable run = new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(10000);
                    System.out.println("Closing...");
                    rs.close();
                } catch (InterruptedException ex) {
                    Logger.getLogger(DstDao.class.getName()).log(Level.SEVERE, null, ex);
                } catch (SQLException ex) {
                    Logger.getLogger(DstDao.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        };
        run.run();

When that thread does close it, I get the exception:

Exception Encountered: java.sql.SQLRecoverableException: Closed Resultset: getMetaData

It does work, but I'm loathe to use an exception for something that is a part of the normal program flow.

I question if this is the right way to stop the long running query or if there is some way to cancel it I don't know of. Is this the right way to do it? Is there a better method? Thanks!