package fi.otavanopisto.muikku.plugins.hsqldb;
import java.io.File;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.ejb.Stateful;
import javax.enterprise.context.Dependent;
import org.hsqldb.cmdline.SqlFile;
import org.hsqldb.cmdline.SqlToolError;
@Dependent
@Stateful
public class HSQLDBPluginController {
private static final String DB_USERNAME = "sa";
private static final String DB_PASSWORD = "";
private static final String DB_DRIVER = "org.hsqldb.jdbc.JDBCDriver";
private static final String DB_URL = "jdbc:hsqldb:mem:%s";
public Connection getConnection(String database) throws SQLException {
try {
Class.forName(DB_DRIVER);
} catch (ClassNotFoundException e) {
// TODO: Proper error handling
throw new SQLException(e);
}
return DriverManager.getConnection(DB_URL.replace("%s", database), DB_USERNAME, DB_PASSWORD);
}
public PreparedStatement executeInsert(Connection connection, String sql, Object... values) throws SQLException {
PreparedStatement preparedStatement = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
int parameterIndex = 1;
for (Object value : values) {
preparedStatement.setObject(parameterIndex, value);
parameterIndex++;
}
preparedStatement.executeUpdate();
return preparedStatement;
}
public ResultSet executeSelect(Connection connection, String sql, Object... values) throws SQLException {
PreparedStatement preparedStatement = connection.prepareStatement(sql);
int parameterIndex = 1;
for (Object value : values) {
preparedStatement.setObject(parameterIndex, value);
parameterIndex++;
}
return preparedStatement.executeQuery();
}
public PreparedStatement executeUpdate(Connection connection, String sql, Object[] values) throws SQLException {
PreparedStatement preparedStatement = connection.prepareStatement(sql);
int parameterIndex = 1;
for (Object value : values) {
preparedStatement.setObject(parameterIndex, value);
parameterIndex++;
}
preparedStatement.executeUpdate();
return preparedStatement;
}
public PreparedStatement executeDelete(Connection connection, String sql, Object[] values) throws SQLException {
PreparedStatement preparedStatement = connection.prepareStatement(sql);
int parameterIndex = 1;
for (Object value : values) {
preparedStatement.setObject(parameterIndex, value);
parameterIndex++;
}
preparedStatement.executeUpdate();
return preparedStatement;
}
public void executeScript(Connection connection, File inputFile) throws IOException, SqlToolError, SQLException {
SqlFile sqlFile = new SqlFile(inputFile);
sqlFile.setConnection(connection);
sqlFile.execute();
}
}