19package org.sleuthkit.autopsy.centralrepository.datamodel;
21import java.sql.Connection;
22import java.sql.DriverManager;
23import java.sql.PreparedStatement;
24import java.sql.ResultSet;
25import java.sql.SQLException;
26import java.sql.Statement;
27import java.util.Properties;
28import java.util.logging.Level;
29import org.sleuthkit.autopsy.coreutils.Logger;
42 private final static String
JDBC_DRIVER =
"org.postgresql.Driver";
55 throw new CentralRepoException(
"cannot load or save postgres settings for selection: " + choice);
77 this.connSettings =
loader.loadSettings();
88 return String.format(
"PostgresCentralRepoSettings: [db type: postgres, host: %s:%d, db name: %s, username: %s]",
96 String getValidationQuery() {
110 String getJDBCBaseURI() {
123 String getConnectionURL(
boolean usePostgresDb) {
124 StringBuilder url =
new StringBuilder()
125 .append(getJDBCBaseURI())
131 url.append(
"postgres");
136 return url.toString();
145 Connection getEphemeralConnection(
boolean usePostgresDb) {
148 String url = getConnectionURL(usePostgresDb);
149 Properties props =
new Properties();
153 Class.forName(getDriver());
154 conn = DriverManager.getConnection(url, props);
155 }
catch (ClassNotFoundException | SQLException ex) {
158 LOGGER.log(Level.SEVERE,
"Failed to acquire ephemeral connection to postgresql.", ex);
172 Connection conn = getEphemeralConnection(
true);
189 Connection conn = getEphemeralConnection(
true);
194 String sql =
"SELECT datname FROM pg_catalog.pg_database WHERE lower(datname) = lower(?) LIMIT 1";
195 PreparedStatement ps =
null;
198 ps = conn.prepareStatement(sql);
200 rs = ps.executeQuery();
204 }
catch (SQLException ex) {
205 LOGGER.log(Level.SEVERE,
"Failed to execute database existance query.", ex);
223 Connection conn = getEphemeralConnection(
false);
236 Connection conn = getEphemeralConnection(
true);
241 String sql =
"CREATE DATABASE %s OWNER %s";
244 stmt = conn.createStatement();
246 }
catch (SQLException ex) {
247 LOGGER.log(Level.SEVERE,
"Failed to execute create database statement.", ex);
258 Connection conn = getEphemeralConnection(
true);
263 String sql =
"DROP DATABASE %s";
266 stmt = conn.createStatement();
267 stmt.execute(String.format(sql,
getDbName()));
268 }
catch (SQLException ex) {
269 LOGGER.log(Level.SEVERE,
"Failed to execute drop database statement.", ex);
327 int getBulkThreshold() {
static CentralRepoDbChoice getSavedDbChoice()
static void closeResultSet(ResultSet resultSet)
static boolean executeValidationQuery(Connection conn, String validationQuery)
static void closeStatement(Statement statement)
static void closeConnection(Connection conn)
static boolean schemaVersionIsSet(Connection conn)
boolean verifyDatabaseSchema()
void setHost(String host)
PostgresConnectionSettings connSettings
boolean verifyConnection()
PostgresCentralRepoSettings(PostgresSettingsLoader loader)
PostgresCentralRepoSettings()
void setUserName(String userName)
static final String JDBC_DRIVER
static final String JDBC_BASE_URI
static final Logger LOGGER
void setPassword(String password)
void setBulkThreshold(int bulkThreshold)
static final String VALIDATION_QUERY
boolean verifyDatabaseExists()
void setDbName(String dbName)
static PostgresSettingsLoader getLoaderFromSaved()
DatabaseTestResult testStatus()
final PostgresSettingsLoader loader
synchronized static Logger getLogger(String name)
PostgresSettingsLoader MULTIUSER_SETTINGS_LOADER
PostgresSettingsLoader CUSTOM_SETTINGS_LOADER