I would like to read metadata of the datasource. Be it a Database or Files. The requirement is to display the set of available tables and columns of each table. I also would like to know the details of foreign keys, etc. I know this should be possible using JDBC API. But i would like to know if Apache Metamodel supports this in an abstracted way which can be used for all types of datasources.
Great, if you can share any examples.
...... Ram
Schemas, tables and columns can be explored in Apache Metamodel. The DataContext has a schema called "information_schema" that you can see metadata about the data context. Find this snippet for an example:
// Prepare a data context based on plain old Java objects
List<TableDataProvider<?>> tableDataProviders = new ArrayList<TableDataProvider<?>>();
SimpleTableDef tableDef1 = new SimpleTableDef("snippetTableName1", new String[] {"id", "name"});
tableDataProviders.add(new ArrayTableDataProvider(tableDef1,
new ArrayList<Object[]>()));
PojoDataContext dataContext = new PojoDataContext("snippetSchemaName", tableDataProviders);
// Prints a schema tree
for (Schema schema : dataContext.getSchemas()) {
System.out.println("Schema: " + schema.getName());
for (Table table : schema.getTables()) {
System.out.println("\t Table: " + table.getName());
for (Column column : table.getColumns()) {
System.out.println("\t\t Column: " + column.getName() + " of type: " + column.getType());
}
}
}
This should print:
Schema: information_schema
Table: tables
Column: name of type: VARCHAR
Column: type of type: VARCHAR
Column: num_columns of type: INTEGER
Column: remarks of type: VARCHAR
Table: columns
Column: name of type: VARCHAR
Column: type of type: VARCHAR
Column: native_type of type: VARCHAR
Column: size of type: INTEGER
Column: nullable of type: BOOLEAN
Column: indexed of type: BOOLEAN
Column: table of type: VARCHAR
Column: remarks of type: VARCHAR
Table: relationships
Column: primary_table of type: VARCHAR
Column: primary_column of type: VARCHAR
Column: foreign_table of type: VARCHAR
Column: foreign_column of type: VARCHAR
Schema: snippetSchemaName
Table: snippetTableName1
Column: id of type: VARCHAR
Column: name of type: VARCHAR