Database metadata abstraction library for jOOQ's code generation system providing unified access to schema information across multiple database vendors
—
Core database abstraction and connection management providing the entry point for all metadata operations in jOOQ-meta.
Creates database instances using factory methods for type-safe database abstraction.
/**
* Creates a Database instance for the specified SQL dialect
* Uses reflection to instantiate the appropriate Database class
* and sets the dialect on the created instance
* @param dialect - SQL dialect (POSTGRES, MYSQL, H2, etc.)
* @returns Database instance for the specified dialect
* @throws IllegalArgumentException if Database cannot be created
*/
static Database database(SQLDialect dialect);
/**
* Gets the Database implementation class for a dialect
* Maps SQL dialects to their corresponding Database implementation classes
* Falls back to JDBCDatabase.class for unsupported dialects
*
* Supported dialects include:
* - CLICKHOUSE: ClickHouseDatabase
* - CUBRID: CUBRIDDatabase
* - DERBY: DerbyDatabase
* - DUCKDB: DuckDBDatabase
* - FIREBIRD: FirebirdDatabase
* - H2: H2Database
* - HSQLDB: HSQLDBDatabase
* - IGNITE: IgniteDatabase
* - MARIADB: MariaDBDatabase
* - MYSQL: MySQLDatabase
* - POSTGRES: PostgresDatabase
* - SQLITE: SQLiteDatabase
* - TRINO: TrinoDatabase
* - YUGABYTEDB: YugabyteDBDatabase
* - DEFAULT: JDBCDatabase (fallback)
*
* @param dialect - SQL dialect
* @returns Class object for database implementation
*/
static Class<? extends Database> databaseClass(SQLDialect dialect);Usage Examples:
import org.jooq.meta.Database;
import org.jooq.meta.Databases;
import org.jooq.SQLDialect;
import java.sql.Connection;
// Create database for PostgreSQL
Database database = Databases.database(SQLDialect.POSTGRES);
// Create and set connection separately
Connection conn = DriverManager.getConnection("jdbc:postgresql://localhost/db", "user", "pass");
Database database = Databases.database(SQLDialect.POSTGRES);
database.setConnection(conn);
// Get implementation class
Class<? extends Database> dbClass = Databases.databaseClass(SQLDialect.MYSQL);Manages database connections for metadata extraction with proper resource handling.
/**
* Sets the database connection for metadata operations
* @param connection - JDBC connection to the database
*/
void setConnection(Connection connection);
/**
* Gets the current database connection
* @returns Current JDBC connection or null if not set
*/
Connection getConnection();
/**
* Creates a jOOQ DSL context using the current connection
* @returns DSLContext for executing queries
*/
DSLContext create();
/**
* Closes the database and releases all resources
* Must be called to prevent resource leaks
*/
void close();Usage Examples:
import org.jooq.meta.Database;
import org.jooq.meta.postgres.PostgresDatabase;
import java.sql.Connection;
import java.sql.DriverManager;
try (Database database = new PostgresDatabase()) {
// Set up connection
Connection connection = DriverManager.getConnection(
"jdbc:postgresql://localhost:5432/mydb", "username", "password");
database.setConnection(connection);
// Use database for metadata operations
List<SchemaDefinition> schemas = database.getSchemata();
// Database connection is available
Connection conn = database.getConnection();
// Create DSL context for queries
DSLContext dsl = database.create();
} // Automatically closes and releases resourcesConfigures database-specific behavior and SQL dialect handling.
/**
* Gets the SQL dialect for this database
* @returns Current SQL dialect
*/
SQLDialect getDialect();
/**
* Sets the SQL dialect for this database
* @param dialect - SQL dialect to use
*/
void setDialect(SQLDialect dialect);
/**
* Checks if database supports unsigned types
* @returns true if unsigned types are supported
*/
boolean supportsUnsignedTypes();
/**
* Sets unsigned type support flag
* @param supportsUnsignedTypes - Whether unsigned types are supported
*/
void setSupportsUnsignedTypes(boolean supportsUnsignedTypes);Configuration of database-specific properties and options.
/**
* Sets database properties for implementation-specific configuration
* @param properties - Properties object with configuration
*/
void setProperties(Properties properties);
/**
* Gets database properties
* @returns Properties object with current configuration
*/
Properties getProperties();
/**
* Sets base directory for file-based implementations
* @param basedir - Base directory path
*/
void setBasedir(String basedir);
/**
* Gets base directory for file-based implementations
* @returns Base directory path
*/
String getBasedir();Configures error handling behavior during metadata extraction.
/**
* Sets error handling behavior
* @param onError - Error handling strategy (FAIL, LOG, SILENT)
*/
void setOnError(OnError onError);
/**
* Gets current error handling behavior
* @returns Current error handling strategy
*/
OnError onError();
/**
* Sets slow query logging threshold
* @param logSlowQueriesAfterSeconds - Threshold in seconds
*/
void setLogSlowQueriesAfterSeconds(int logSlowQueriesAfterSeconds);
/**
* Gets slow query logging threshold
* @returns Threshold in seconds
*/
int getLogSlowQueriesAfterSeconds();enum OnError {
/** Fail immediately on any error */
FAIL,
/** Log errors and continue processing */
LOG,
/** Ignore errors silently */
SILENT
}
interface Database extends AutoCloseable {
void setConnection(Connection connection);
Connection getConnection();
SQLDialect getDialect();
void setDialect(SQLDialect dialect);
DSLContext create();
void setProperties(Properties properties);
Properties getProperties();
void close();
}Usage Examples:
import org.jooq.meta.Database;
import org.jooq.meta.postgres.PostgresDatabase;
import org.jooq.meta.jaxb.OnError;
import java.util.Properties;
Database database = new PostgresDatabase();
// Configure error handling
database.setOnError(OnError.LOG);
// Set up properties
Properties props = new Properties();
props.setProperty("key", "value");
database.setProperties(props);
// Configure dialect-specific options
database.setSupportsUnsignedTypes(false);
database.setLogSlowQueriesAfterSeconds(5);Install with Tessl CLI
npx tessl i tessl/maven-org-jooq--jooq-meta