2009-11-23 13 views

risposta

12

La molla ha un oggetto DatabaseMetaDataCallback che può occuparsi di alcuni aspetti della piastra di riscaldamento della soluzione a cui Duffymo ha collegato. È quindi possibile passare quell'oggetto quando si chiama JDBCUtils.extractDatabaseMetaData.

Un esempio di come effettuare la stessa chiamata che si sta tentando di eseguire con tali classi è here.

codice di esempio da quel link:

Classe:

class GetTableNames implements DatabaseMetaDataCallback { 

     public Object processMetaData(DatabaseMetaData dbmd) throws SQLException { 
      ResultSet rs = dbmd.getTables(dbmd.getUserName(), null, null, new String[]{"TABLE"}); 
      ArrayList l = new ArrayList(); 
      while (rs.next()) { 
       l.add(rs.getString(3)); 
      } 
      return l; 
     } 
    } 

Usage:

GetTableNames getTableNames = new GetTableNames(); 
try { 
    Object o = JdbcUtils.extractDatabaseMetaData(dataSource, getTableNames); 
    System.out.println(o); 
} catch (MetaDataAccessException e) { 
    System.out.println(e); 
} 
+2

+1 da parte mia: questa è la risposta migliore di gran lunga. Bello. – duffymo

4

Sei sempre libero di ottenere java.sql.DatabaseMetaData utilizzando la connessione. Non ci sono metodi in SimpleJdbcTemplate per aiutarti, ma francamente non ce n'è bisogno.

DatabaseMetaData md = c.getMetaData(); 
ResultSet rs = md.getTables(null, null, "%", null); 
while (rs.next()) { 
    System.out.println(rs.getString(3)); 
} 
+0

E 'possibile che l'aspetto primavera è importante a causa di interazioni gestore delle transazioni o qualcosa del genere. – bmargulies

+1

Non penserei che le transazioni siano necessarie per un'operazione di sola lettura come questa. L'unico problema potrebbe essere se qualcuno cambia lo schema mentre stai eseguendo l'operazione in modo tale che il risultato sia invalidato. Se ciò può accadere, hai problemi molto più grandi. – duffymo

+1

Quel collegamento sta attualmente reindirizzando verso un sito phishing – Justin

1

Interrogare la vista USER_TABLES e li otterrete.

colpire in sqlplus, ovviamente, per vedere prima la forma.

+0

Nella mia esperienza, le "tabelle" dell'applicazione sono spesso sinonimi di tabelle in un altro schema, quindi potrebbe essere necessario interrogare anche ALL_TABLES. – Dan

Problemi correlati