package org.openhab.persistence.jdbc.utils; import java.sql.DatabaseMetaData; import java.sql.SQLException; import org.knowm.yank.Yank; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.zaxxer.hikari.HikariDataSource; /** * * @author Helmut Lehmeyer * @since 1.9.0 */ public class DbMetaData { private static final Logger logger = LoggerFactory.getLogger(DbMetaData.class); private int dbMajorVersion; private int dbMinorVersion; private int driverMajorVersion; private int driverMinorVersion; private String dbProductName; private String dbProductVersion; public DbMetaData() { HikariDataSource h = Yank.getDefaultConnectionPool(); // HikariDataSource h = Yank.getDataSource(); DatabaseMetaData meta; try { meta = h.getConnection().getMetaData(); // Oracle (and some other vendors) do not support // some the following methods; therefore, we need // to use try-catch block. try { dbMajorVersion = meta.getDatabaseMajorVersion(); logger.debug("dbMajorVersion = '{}'", dbMajorVersion); } catch (Exception e) { logger.error("Asking for 'dbMajorVersion' is a unsupported: '{}'", e.getMessage()); } try { dbMinorVersion = meta.getDatabaseMinorVersion(); logger.debug("dbMinorVersion = '{}'", dbMinorVersion); } catch (Exception e) { logger.error("Asking for 'dbMajorVersion' is a unsupported: '{}'", e.getMessage()); } driverMajorVersion = meta.getDriverMajorVersion(); logger.debug("driverMajorVersion = '{}'", driverMajorVersion); driverMinorVersion = meta.getDriverMinorVersion(); logger.debug("driverMinorVersion = '{}'", driverMinorVersion); dbProductName = meta.getDatabaseProductName(); logger.debug("dbProductName = '{}'", dbProductName); dbProductVersion = meta.getDatabaseProductVersion(); logger.debug("dbProductVersion = '{}'", dbProductVersion); } catch (SQLException e1) { logger.error("Asking for 'dbMajorVersion' seems to be unsupported: '{}'", e1.getMessage()); } } public int getDbMajorVersion() { return dbMajorVersion; } public int getDbMinorVersion() { return dbMinorVersion; } public boolean isDbVersionGreater(int major, int minor) { if (dbMajorVersion > major) { return true; } else if (dbMajorVersion == major) { if (dbMinorVersion > minor) { return true; } } return false; } public int getDriverMajorVersion() { return driverMajorVersion; } public int getDriverMinorVersion() { return driverMinorVersion; } public boolean isDriverVersionGreater(int major, int minor) { if (major > driverMajorVersion) { return true; } else if (major == driverMajorVersion) { if (minor > driverMinorVersion) { return true; } } return false; } public String getDbProductName() { return dbProductName; } public String getDbProductVersion() { return dbProductVersion; } }