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);
}
}
}