Testcontainers module for Oracle XE database - provides lightweight, throwaway instances of Oracle XE database for integration testing
Standard JDBC database connectivity with Oracle-specific connection URLs, driver management, and database operations. Provides seamless integration with JUnit testing frameworks and connection pooling libraries.
Provides Oracle-specific JDBC connection details including driver class names, connection URLs, and authentication credentials with support for both PDB and SID connection modes.
public String getDriverClassName();
public String getJdbcUrl();
public String getUsername();
public String getPassword();
public String getTestQueryString();Returns:
String: Oracle JDBC driver class name ("oracle.jdbc.OracleDriver" or "oracle.jdbc.driver.OracleDriver")String: Complete JDBC connection URL with host, port, and database/SIDString: Database username (application user or system user based on connection mode)String: Database passwordString: Test query for connection validation ("SELECT 1 FROM DUAL")Usage Example:
OracleContainer container = new OracleContainer("gvenzl/oracle-xe:18.4.0-slim")
.withUsername("appuser")
.withPassword("apppass");
container.start();
// Get connection details
String driverClass = container.getDriverClassName();
String jdbcUrl = container.getJdbcUrl();
String username = container.getUsername();
String password = container.getPassword();
// Example URLs:
// PDB mode: jdbc:oracle:thin:@localhost:32768/xepdb1
// SID mode: jdbc:oracle:thin:@localhost:32768:xe
// Test query
String testQuery = container.getTestQueryString(); // "SELECT 1 FROM DUAL"Creates and manages JDBC connections with automatic driver loading, connection parameter handling, and query string support for connection customization.
public Connection createConnection(String queryString) throws SQLException, NoDriverFoundException;
public Connection createConnection(String queryString, Properties info) throws SQLException, NoDriverFoundException;
public Driver getJdbcDriverInstance() throws NoDriverFoundException;Parameters:
queryString (String): Additional query parameters for connection URLinfo (Properties): JDBC connection propertiesReturns:
Connection: Active JDBC database connectionDriver: Oracle JDBC driver instanceThrows:
SQLException: Database connection errorsNoDriverFoundException: JDBC driver loading failuresUsage Example:
OracleContainer container = new OracleContainer("gvenzl/oracle-xe:18.4.0-slim");
container.start();
// Create basic connection
try (Connection conn = container.createConnection("")) {
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT SYSDATE FROM DUAL");
if (rs.next()) {
System.out.println("Current time: " + rs.getTimestamp(1));
}
}
// Create connection with properties
Properties props = new Properties();
props.setProperty("oracle.net.CONNECT_TIMEOUT", "10000");
props.setProperty("oracle.jdbc.ReadTimeout", "30000");
try (Connection conn = container.createConnection("", props)) {
// Use connection with custom properties
DatabaseMetaData meta = conn.getMetaData();
System.out.println("Database: " + meta.getDatabaseProductName());
}
// Get driver instance
Driver oracleDriver = container.getJdbcDriverInstance();Service Provider Interface (SPI) implementation for automatic container discovery and creation in testing frameworks and dependency injection containers.
public class OracleContainerProvider extends JdbcDatabaseContainerProvider {
public boolean supports(String databaseType);
public JdbcDatabaseContainer newInstance();
public JdbcDatabaseContainer newInstance(String tag);
}Parameters:
databaseType (String): Database type identifier ("oracle")tag (String): Docker image tag for container creationReturns:
boolean: Whether provider supports the database typeJdbcDatabaseContainer: New Oracle container instanceUsage Example:
// SPI automatic discovery (used by testing frameworks)
ServiceLoader<JdbcDatabaseContainerProvider> providers =
ServiceLoader.load(JdbcDatabaseContainerProvider.class);
for (JdbcDatabaseContainerProvider provider : providers) {
if (provider.supports("oracle")) {
JdbcDatabaseContainer container = provider.newInstance("21.3.0-slim");
// Use container
break;
}
}
// Direct provider usage
OracleContainerProvider provider = new OracleContainerProvider();
boolean supportsOracle = provider.supports("oracle"); // true
JdbcDatabaseContainer container1 = provider.newInstance(); // default tag
JdbcDatabaseContainer container2 = provider.newInstance("21.3.0-slim"); // custom tagOracle XE Testcontainers supports two connection URL formats depending on the connection mode:
PDB (Pluggable Database) Mode (Default):
jdbc:oracle:thin:@<host>:<port>/<database_name>SID (System Identifier) Mode:
jdbc:oracle:thin:@<host>:<port>:<sid>Usage Example:
// PDB mode (default)
OracleContainer pdbContainer = new OracleContainer("gvenzl/oracle-xe:18.4.0-slim")
.withDatabaseName("testdb");
pdbContainer.start();
String pdbUrl = pdbContainer.getJdbcUrl();
// Result: jdbc:oracle:thin:@localhost:32768/testdb
// SID mode
OracleContainer sidContainer = new OracleContainer("gvenzl/oracle-xe:18.4.0-slim")
.usingSid();
sidContainer.start();
String sidUrl = sidContainer.getJdbcUrl();
// Result: jdbc:oracle:thin:@localhost:32768:xe
String sidUser = sidContainer.getUsername(); // "system" (not app user)@Testcontainers
class OracleJdbcTest {
@Container
static OracleContainer oracle = new OracleContainer("gvenzl/oracle-xe:18.4.0-slim")
.withDatabaseName("testdb")
.withUsername("testuser")
.withPassword("testpass")
.withInitScript("classpath:init.sql");
@Test
void testDatabaseConnection() throws SQLException {
String jdbcUrl = oracle.getJdbcUrl();
try (Connection conn = DriverManager.getConnection(
jdbcUrl, oracle.getUsername(), oracle.getPassword())) {
// Test connection
assertTrue(conn.isValid(30));
// Execute test query
try (Statement stmt = conn.createStatement()) {
ResultSet rs = stmt.executeQuery(oracle.getTestQueryString());
assertTrue(rs.next());
assertEquals(1, rs.getInt(1));
}
}
}
}@SpringBootTest
@Testcontainers
class SpringOracleTest {
@Container
static OracleContainer oracle = new OracleContainer("gvenzl/oracle-xe:18.4.0-slim");
@DynamicPropertySource
static void configureProperties(DynamicPropertyRegistry registry) {
registry.add("spring.datasource.url", oracle::getJdbcUrl);
registry.add("spring.datasource.username", oracle::getUsername);
registry.add("spring.datasource.password", oracle::getPassword);
registry.add("spring.datasource.driver-class-name", oracle::getDriverClassName);
}
@Autowired
private JdbcTemplate jdbcTemplate;
@Test
void testSpringDataSource() {
Integer result = jdbcTemplate.queryForObject("SELECT 1 FROM DUAL", Integer.class);
assertEquals(1, result);
}
}Install with Tessl CLI
npx tessl i tessl/maven-org-testcontainers--oracle-xe