Non è necessario aprire due volte la connessione.
Hai oggetti diversi per le due operazioni diverse :

1) ResultSetMetaData
2) ResultSet
3) DatabaseMetaData (non indispensabile)

Ti allego un esempio valido per quasi tutti i DBMS (con ACCESS ovviamente, devi modificarlo un po')

codice:
/*
 * Dumper.java
 *
 * Created on 22 novembre 2006, 23.14
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

/**
 *
 * @author Brainjar
 */
/*
 * Dumper.java
 *
 * Created on September 9, 2002, 11:22 AM
 *

 */
import java.sql.*;
import java.util.*;
public class Dumper {
    public static void main(String args[]) {
        try{
            // Load the driver
            String ibmDbURL   = "jdbc:....................";
            Class.forName("com.ibm.db2.jcc.DB2Driver").newInstance();
            
            // Connect to the database
            Connection connection=DriverManager.getConnection(ibmDbURL, "user", "password" );            

            // Get database meta data
            DatabaseMetaData meta = connection.getMetaData();
            
            // Display meta data information
            System.out.println("Database: "+meta.getDatabaseProductName());
            System.out.println("Product version "+meta.getDatabaseProductVersion());
            System.out.println("User name: "+meta.getUserName());
            System.out.println("Driver: "+meta.getDriverName());
            System.out.println("Driver version: "+meta.getDriverVersion());
            System.out.println("SQL keywords: "+meta.getSQLKeywords());
            
            
            System.out.println("===================================");
            System.out.println("Schema term: "+meta.getSchemaTerm());
            System.out.println("===================================");
            System.out.println("Catalog term: "+meta.getCatalogTerm());
            System.out.println("===================================");
            
            String [] sa = { "none" };
            ResultSet rsCatalogs = meta.getCatalogs();
            while (rsCatalogs.next()) {
                System.out.println("For " + rsCatalogs.getString(1));
                
                    ResultSet rsTables = meta.getTables(null, null, "%", null );
                        ResultSetMetaData mdTables = rsTables.getMetaData();
                        int columnCount = mdTables.getColumnCount();
                        
                        for(int i=1; i<columnCount; i++) {
                            System.out.print("\t\t" + mdTables.getColumnName(i) + "\t");
                        }
                        System.out.println("");
                        
                        while (rsTables.next()) {
                            for(int i=1; i<columnCount; i++) {
                                System.out.print("\t\t" + rsTables.getString(i) + "\t");
                            }
                            System.out.println("");
                        }
                    rsTables.close();
                    
            }
            rsCatalogs.close();
            // Close the database
            // ---------------------------------------------------------------------------
            // In questo punto hai ancora la connessione aperta e puoi fare la tua query e
            // utilizzare il tuo oggetto resultset .......
            // ---------------------------------------------------------------------------
            connection.close();

        }catch(Exception ex){
            System.out.println(ex);
            System.exit(0);
        }
    }
}