BAEL-4431-jdbcmetadata: Article about extracting metadata using JDBC (#9815)

* BAEL-4431-jdbcmetadata: Article about extracting metadata using JDBC

* BAEL-4431-jdbcmetadata: Review comments, fixed formatting issues by using the recommended intelij formatter

Co-authored-by: sahil.singla <sahil.singla@99acres.com>
This commit is contained in:
sahilsingla112 2020-08-13 19:07:46 +05:30 committed by GitHub
parent 6ce7fee3ff
commit a0ee1712e6
3 changed files with 192 additions and 0 deletions

View File

@ -0,0 +1,49 @@
package com.baeldung.jdbcmetadata;
import org.apache.log4j.Logger;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DatabaseConfig {
private static final Logger LOG = Logger.getLogger(DatabaseConfig.class);
private Connection connection;
public DatabaseConfig() {
try {
Class.forName("org.h2.Driver");
String url = "jdbc:h2:mem:testdb";
connection = DriverManager.getConnection(url, "sa", "");
} catch (ClassNotFoundException | SQLException e) {
LOG.error(e);
}
}
public Connection getConnection() {
return connection;
}
public void init() {
createTables();
createViews();
}
private void createTables() {
try {
connection.createStatement().executeUpdate("create table CUSTOMER (ID int primary key auto_increment, NAME VARCHAR(45))");
connection.createStatement().executeUpdate("create table CUST_ADDRESS (ID VARCHAR(36), CUST_ID int, ADDRESS VARCHAR(45), FOREIGN KEY (CUST_ID) REFERENCES CUSTOMER(ID))");
} catch (SQLException e) {
LOG.error(e);
}
}
private void createViews() {
try {
connection.createStatement().executeUpdate("CREATE VIEW CUSTOMER_VIEW AS SELECT * FROM CUSTOMER");
} catch (SQLException e) {
LOG.error(e);
}
}
}

View File

@ -0,0 +1,30 @@
package com.baeldung.jdbcmetadata;
import org.apache.log4j.Logger;
import java.sql.SQLException;
public class JdbcMetadataApplication {
private static final Logger LOG = Logger.getLogger(JdbcMetadataApplication.class);
public static void main(String[] args) {
DatabaseConfig databaseConfig = new DatabaseConfig();
databaseConfig.init();
try {
MetadataExtractor metadataExtractor = new MetadataExtractor(databaseConfig.getConnection());
metadataExtractor.extractTableInfo();
metadataExtractor.extractSystemTables();
metadataExtractor.extractViews();
String tableName = "CUSTOMER";
metadataExtractor.extractColumnInfo(tableName);
metadataExtractor.extractPrimaryKeys(tableName);
metadataExtractor.extractForeignKeys("CUST_ADDRESS");
metadataExtractor.extractDatabaseInfo();
metadataExtractor.extractUserName();
metadataExtractor.extractSupportedFeatures();
} catch (SQLException e) {
LOG.error("Error while executing SQL statements", e);
}
}
}

View File

@ -0,0 +1,113 @@
package com.baeldung.jdbcmetadata;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.SQLException;
public class MetadataExtractor {
private final DatabaseMetaData databaseMetaData;
public MetadataExtractor(Connection connection) throws SQLException {
this.databaseMetaData = connection.getMetaData();
DatabaseMetaData databaseMetaData = connection.getMetaData();
}
public void extractTableInfo() throws SQLException {
ResultSet resultSet = databaseMetaData.getTables(null, null, "CUST%", new String[] { "TABLE" });
while (resultSet.next()) {
// Print the names of existing tables
System.out.println(resultSet.getString("TABLE_NAME"));
System.out.println(resultSet.getString("REMARKS"));
}
}
public void extractSystemTables() throws SQLException {
ResultSet resultSet = databaseMetaData.getTables(null, null, null, new String[] { "SYSTEM TABLE" });
while (resultSet.next()) {
// Print the names of system tables
System.out.println(resultSet.getString("TABLE_NAME"));
}
}
public void extractViews() throws SQLException {
ResultSet resultSet = databaseMetaData.getTables(null, null, null, new String[] { "VIEW" });
while (resultSet.next()) {
// Print the names of existing views
System.out.println(resultSet.getString("TABLE_NAME"));
}
}
public void extractColumnInfo(String tableName) throws SQLException {
ResultSet columns = databaseMetaData.getColumns(null, null, tableName, null);
while (columns.next()) {
String columnName = columns.getString("COLUMN_NAME");
String columnSize = columns.getString("COLUMN_SIZE");
String datatype = columns.getString("DATA_TYPE");
String isNullable = columns.getString("IS_NULLABLE");
String isAutoIncrement = columns.getString("IS_AUTOINCREMENT");
System.out.println(String.format("ColumnName: %s, columnSize: %s, datatype: %s, isColumnNullable: %s, isAutoIncrementEnabled: %s", columnName, columnSize, datatype, isNullable, isAutoIncrement));
}
}
public void extractPrimaryKeys(String tableName) throws SQLException {
ResultSet primaryKeys = databaseMetaData.getPrimaryKeys(null, null, tableName);
while (primaryKeys.next()) {
String primaryKeyColumnName = primaryKeys.getString("COLUMN_NAME");
String primaryKeyName = primaryKeys.getString("PK_NAME");
System.out.println(String.format("columnName:%s, pkName:%s", primaryKeyColumnName, primaryKeyName));
}
}
public void fun() throws SQLException {
}
public void extractForeignKeys(String tableName) throws SQLException {
ResultSet foreignKeys = databaseMetaData.getImportedKeys(null, null, tableName);
while (foreignKeys.next()) {
String pkTableName = foreignKeys.getString("PKTABLE_NAME");
String fkTableName = foreignKeys.getString("FKTABLE_NAME");
String pkColumnName = foreignKeys.getString("PKCOLUMN_NAME");
String fkColumnName = foreignKeys.getString("FKCOLUMN_NAME");
System.out.println(String.format("pkTableName:%s, fkTableName:%s, pkColumnName:%s, fkColumnName:%s", pkTableName, fkTableName, pkColumnName, fkColumnName));
}
}
public void extractDatabaseInfo() throws SQLException {
String productName = databaseMetaData.getDatabaseProductName();
String productVersion = databaseMetaData.getDatabaseProductVersion();
String driverName = databaseMetaData.getDriverName();
String driverVersion = databaseMetaData.getDriverVersion();
System.out.println(String.format("Product name:%s, Product version:%s", productName, productVersion));
System.out.println(String.format("Driver name:%s, Driver Version:%s", driverName, driverVersion));
}
public void extractUserName() throws SQLException {
String userName = databaseMetaData.getUserName();
System.out.println(userName);
ResultSet schemas = databaseMetaData.getSchemas();
while (schemas.next()) {
String table_schem = schemas.getString("TABLE_SCHEM");
String table_catalog = schemas.getString("TABLE_CATALOG");
System.out.println(String.format("Table_schema:%s, Table_catalog:%s", table_schem, table_catalog));
}
}
public void extractSupportedFeatures() throws SQLException {
System.out.println("Supports scrollable & Updatable Result Set: " + databaseMetaData.supportsResultSetConcurrency(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE));
System.out.println("Supports Full Outer Joins: " + databaseMetaData.supportsFullOuterJoins());
System.out.println("Supports Stored Procedures: " + databaseMetaData.supportsStoredProcedures());
System.out.println("Supports Subqueries in 'EXISTS': " + databaseMetaData.supportsSubqueriesInExists());
System.out.println("Supports Transactions: " + databaseMetaData.supportsTransactions());
System.out.println("Supports Core SQL Grammar: " + databaseMetaData.supportsCoreSQLGrammar());
System.out.println("Supports Batch Updates: " + databaseMetaData.supportsBatchUpdates());
System.out.println("Supports Column Aliasing: " + databaseMetaData.supportsColumnAliasing());
System.out.println("Supports Savepoints: " + databaseMetaData.supportsSavepoints());
System.out.println("Supports Union All: " + databaseMetaData.supportsUnionAll());
System.out.println("Supports Union: " + databaseMetaData.supportsUnion());
}
}