2009-11-23 14 views

Antwort

12

Frühling hat ein DatabaseMetaDataCallback Objekt, das einige der Kesselplattenaspekte der Lösung, die Duffymo verknüpft hat, übernehmen kann. Sie können dieses Objekt dann übergeben, wenn Sie JDBCUtils.extractDatabaseMetaData aufrufen.

Ein Beispiel für die Herstellung desselben Anrufs, den Sie mit diesen Klassen erstellen möchten, finden Sie unter here.

Beispielcode aus diesem Link:

Klasse:

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

Verbrauch:

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

+1 von mir - das ist die beste Antwort bei weitem. Nett. – duffymo

4

Sie können java.sql.DatabaseMetaData immer über die Verbindung abrufen. Es gibt keine Methoden in SimpleJdbcTemplate, um Ihnen zu helfen, aber ehrlich gesagt gibt es keine Notwendigkeit.

+0

Es ist möglich, dass die Feder Aspekt aufgrund Transaktionsmanager Interaktionen oder etwas wichtig ist. – bmargulies

+1

Ich würde nicht denken, dass Transaktionen für eine schreibgeschützte Operation wie diese benötigt werden. Das einzige Problem könnte sein, wenn jemand das Schema während der Ausführung der Operation so ändert, dass das Ergebnis ungültig wird. Wenn das passieren kann, haben Sie viel größere Probleme. – duffymo

+1

Dieser Link leitet derzeit auf eine Phising-Seite um. – Justin

1

Fragen Sie die Ansicht USER_TABLES ab und Sie erhalten sie.

stochern Sie in sqlplus, natürlich, um zuerst die Form zu sehen.

+0

Meiner Erfahrung nach sind die "Tabellen" der Anwendung oft Synonyme für Tabellen in einem anderen Schema, sodass Sie möglicherweise auch ALL_TABLES abfragen müssen. – Dan

Verwandte Themen