2009-11-23 9 views

Respuesta

12

Spring tiene un objeto DatabaseMetaDataCallback que puede ocuparse de algunos aspectos de la placa de caldera de la solución a la que se ha vinculado duffymo. A continuación, puede pasar ese objeto al llamar al JDBCUtils.extractDatabaseMetaData.

Puede encontrar un ejemplo de cómo hacer la misma llamada que intenta hacer con esas clases here.

código de ejemplo de ese vínculo:

Clase:

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

Uso:

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

+1 de mí - esta es la mejor respuesta con diferencia. Bonito. – duffymo

4

Siempre puede obtener java.sql.DatabaseMetaData utilizando la conexión. No hay ningún método en SimpleJdbcTemplate que lo ayude, pero francamente no es necesario.

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

Es posible que el aspecto del resorte es importante debido a las interacciones de gestor de transacciones o algo así. – bmargulies

+1

No creo que se necesiten transacciones para una operación de solo lectura como esta. El único problema podría ser si alguien cambia el esquema mientras realiza la operación de tal manera que el resultado se invalida. Si eso puede pasar, tienes problemas mucho más grandes. – duffymo

+1

Ese enlace actualmente está redireccionando a un sitio de phising – Justin

1

Consulta la vista USER_TABLES y la obtendrás.

pellizque en sqlplus, por supuesto, para ver la forma primero.

+0

En mi experiencia, las "tablas" de la aplicación suelen ser sinónimos de tablas en otro esquema, por lo que es posible que también tenga que consultar ALL_TABLES. – Dan

Cuestiones relacionadas