aboutsummaryrefslogtreecommitdiff
path: root/src/uk/org/ury/database/DatabaseDriver.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/uk/org/ury/database/DatabaseDriver.java')
-rw-r--r--src/uk/org/ury/database/DatabaseDriver.java122
1 files changed, 122 insertions, 0 deletions
diff --git a/src/uk/org/ury/database/DatabaseDriver.java b/src/uk/org/ury/database/DatabaseDriver.java
new file mode 100644
index 0000000..0f03267
--- /dev/null
+++ b/src/uk/org/ury/database/DatabaseDriver.java
@@ -0,0 +1,122 @@
+package uk.org.ury.database;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+import uk.org.ury.database.exceptions.ConnectionFailureException;
+import uk.org.ury.database.exceptions.MissingCredentialsException;
+
+
+/**
+ * A database connection manager that connects to the URY databases
+ * using suitably privileged accounts, and handles the processing
+ * of SQL queries.
+ *
+ * @author Matt Windsor
+ *
+ */
+
+public class DatabaseDriver
+{
+ /* The JDBC path used to connect to the URY database. */
+ private String DATABASE_PATH = "jdbc:postgresql://localhost/membership";
+
+ /* The database connection. */
+ private Connection conn;
+
+
+ /**
+ * Construct a new DatabaseDriver with the given user class.
+ *
+ * @param userclass The user class to log in to the database with.
+ *
+ * @throws IllegalArgumentException if the user class is
+ * not supported (this should not happen).
+ *
+ * @throws MissingCredentialsException if the user class
+ * login credentials could not be loaded.
+ *
+ * @throws ConnectionFailureException if the database
+ * backend failed to connect to the database
+ * server.
+ */
+
+ public
+ DatabaseDriver (UserClass userclass) throws MissingCredentialsException, ConnectionFailureException
+ {
+ DatabaseLogin login = null;
+
+ switch (userclass)
+ {
+ case READ_ONLY:
+ login = DatabaseLogin.getLoginFromFile ("read_only.txt");
+ break;
+ case READ_WRITE:
+ login = DatabaseLogin.getLoginFromFile ("read_write.txt");
+ default:
+ throw new IllegalArgumentException ("Unused user class.");
+ }
+
+
+ try
+ {
+ System.out.println ("Trying to acquire connection...");
+
+ connect (login);
+
+ System.out.println ("...connection succeeded.");
+ }
+ catch (SQLException e)
+ {
+ throw new ConnectionFailureException (e.getMessage ());
+ }
+
+ }
+
+
+ public void
+ connect (DatabaseLogin login) throws SQLException
+ {
+ if (login == null)
+ throw new IllegalArgumentException ("Supplied null login.");
+
+ if (login.getUsername () == null)
+ throw new IllegalArgumentException ("Login has no associated username.");
+
+ if (login.getPassword () == null)
+ throw new IllegalArgumentException ("Login has no associated password.");
+
+ conn = DriverManager.getConnection (DATABASE_PATH,
+ login.getUsername (),
+ login.getPassword ());
+ }
+
+
+ /**
+ * Execute a SQL statement.
+ *
+ * @param sql The SQL statement to execute.
+ *
+ * @return the JDBC results set.
+ */
+
+ public ResultSet
+ executeQuery (String sql)
+ {
+ try
+ {
+ Statement st = conn.createStatement ();
+ st.setFetchSize (50);
+
+ return st.executeQuery (sql);
+ }
+ catch (SQLException e)
+ {
+ e.printStackTrace ();
+ return null;
+ }
+ }
+}