/* * HSQLDBDriver.java * * Created on May 28, 2007, 1:18 AM * * CodaServer and related original technologies are copyright 2008, 18th Street Software, LLC. * * Permission to use them is granted under the terms of the GNU GPLv2. */ package org.codalang.codaserver.hsqldbdriver; import org.codalang.codaserver.database.CodaConnection; import org.codalang.codaserver.database.CodaDatabase; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; import java.util.Hashtable; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author michaelarace */ public class HSQLDBDriver implements CodaDatabase { // Various instance variables int mode = 0; String hostname, username, password, schema; HSQLDBConnection conn; java.util.logging.Logger logger; public void setLogger (Logger logger) { this.logger = logger; if (conn != null) conn.setLogger(logger); } public boolean createSchema(String hostname, String username, String password, String schema, Hashtable options, String adminUsername, String adminPassword) { int mode; //System.out.println("In CreateSchema"); if (options == null || options.size() == 0 || (options.containsKey("mode") || options.containsKey("MODE")) || (options.get("mode").equals("standalone") || options.get("MODE").equals("standalone") )) { mode = 0; } else { mode = 1; } switch (mode) { case 0: try { Class.forName("org.hsqldb.jdbcDriver" ); } catch (ClassNotFoundException e) { return false; } Connection tempConn = null; try { tempConn = DriverManager.getConnection("jdbc:hsqldb:file:" + schema, adminUsername, adminPassword); } catch (SQLException e) { logger.log(Level.WARNING, e.getMessage()); return false; } try { Statement s = tempConn.createStatement(); String sql = "CREATE USER " + username + " PASSWORD '" + escapeString(password) + "'"; s.execute(sql); sql = "GRANT DBA TO " + username; s.execute(sql); tempConn.commit(); } catch (SQLException e) { e.printStackTrace(); //logger.log(Level.WARNING, e.getMessage()); return true; } break; default: return false; } return true; } public boolean connect(String hostname, String username, String password, String schema, Hashtable options) { this.hostname = hostname; this.username = username; this.password = password; this.schema = schema; if (options == null || options.size() == 0 || (options.containsKey("mode") || options.containsKey("MODE")) || (options.get("mode").equals("standalone") || options.get("MODE").equals("standalone") )) { this.mode = 0; } else { this.mode = 1; } Connection tempConn = null; switch (this.mode) { case 0: try { Class.forName("org.hsqldb.jdbcDriver" ); } catch (ClassNotFoundException e) { this.conn = null; return false; } try { tempConn = DriverManager.getConnection("jdbc:hsqldb:file:" + schema, username, password); this.conn = new HSQLDBConnection(tempConn, logger); } catch (SQLException e) { logger.log(Level.WARNING, e.getMessage()); this.conn = null; return false; } break; default: try { Class.forName("org.hsqldb.jdbcDriver" ); } catch (ClassNotFoundException e) { this.conn = null; return false; } try { tempConn = DriverManager.getConnection("jdbc:hsqldb:hsql://"+hostname+"/" + schema, username, password); this.conn = new HSQLDBConnection(tempConn, logger); } catch (SQLException e) { logger.log(Level.WARNING, e.getMessage()); this.conn = null; return false; } } return true; } public boolean disconnect() { conn.closeConnection(); return true; } public CodaConnection getConnection() { return conn; } private String escapeString(String val) { return val.replaceAll("'", "''"); } }