package at.ac.tuwien.sepm.assignment.groupphase.util; import java.lang.invoke.MethodHandles; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; @Component public class JDBCConnectionManager { private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); private static final String DEFAULT_CONNECTION_URL = "jdbc:h2:./sepm;INIT=RUNSCRIPT FROM 'classpath:sql/database.sql'"; private String connectionUrl; private Connection connection; public JDBCConnectionManager() { this(DEFAULT_CONNECTION_URL); } public JDBCConnectionManager(String connectionUrl) { this.connectionUrl = connectionUrl; try { Class.forName("org.h2.Driver"); } catch (ClassNotFoundException e) { LOG.error("Failed to load H2 JDBC driver '{}'", e.getMessage(), e); throw new IllegalStateException(e); } } public Connection getConnection() throws SQLException { if (connection == null) connection = DriverManager.getConnection(connectionUrl); return connection; } public void closeConnection() { if (connection == null) return; try { connection.close(); } catch (SQLException e) { LOG.error("Failed to close connection '{}'", e.getMessage(), e); } connection = null; } public void rollbackConnection() { try { connection.rollback(); } catch (SQLException e) { LOG.error("Failed to rollback connection", e); } } }