/**
  * Public method that deletes rows which match a whereClause from a given table
  *
  * @param table Table from where the rows will be deleted
  * @param whereClause Where clause to be matched
  * @return <b>True</b> if delete successful.
  * @throws SQLException
  */
 public static boolean delete(String table, String whereClause) throws SQLException {
   init();
   Connection con = pool.getConnection();
   String query = "DELETE FROM " + table;
   if (!whereClause.isEmpty()) {
     query += " WHERE " + whereClause;
   }
   Statement st = con.createStatement();
   return (st.executeUpdate(query) != 0);
 }
 /**
  * Method that does a INSERT INTO <tt>table</tt> VALUES (<tt>values</tt>)
  *
  * @param values Array of strings containing the values to be inserted.
  * @param table Table where the values should be inserted into.
  * @return <b>True</b> if successful.
  * @throws SQLException
  */
 public static boolean insert(String[] values, String table) throws SQLException {
   init();
   Connection con = pool.getConnection();
   String query = "INSERT INTO " + table + " VALUES ('" + values[0] + "'";
   for (int i = 1; i < values.length; i++) {
     query += ", '" + values[i] + "'";
   }
   query += ")";
   Statement st = con.createStatement();
   return (st.executeUpdate(query) != 0);
 }
 /**
  * Method that executes an update on a group of fields.
  *
  * @param fields String array which should contain the field and values to be updated as a key
  *     pair.
  * @param table The table to be updated.
  * @param whereClause Should the update use a where clause, it should be in the format <b>ID = 1
  *     AND SecondID = 2</b> and so on, regular SQL operations apply.
  * @return <b>True</b> if the update is successful.
  * @throws SQLException
  */
 public static boolean update(String[][] fields, String table, String whereClause)
     throws SQLException {
   init();
   Connection con = pool.getConnection();
   String query = "UPDATE " + table + " SET " + fields[0][0] + "='" + fields[0][1] + "'";
   for (int i = 1; i < fields.length; i++) {
     query += ", " + fields[i][0] + "='" + fields[i][1] + "'";
   }
   if (!whereClause.isEmpty()) {
     query += " WHERE " + whereClause;
   }
   Statement st = con.createStatement();
   return (st.executeUpdate(query) != 0);
 }
 /**
  * Method that selects and specific <tt>field</tt> on a <tt>table</tt> according to if present a
  * <tt>whereClause</tt>.
  *
  * @param fields <tt>String</tt> array which should contain the fields to be SELECTED.
  * @param table The table to be selected.
  * @param whereClause Should the SELECT use a where clause, it should be in the format <b>ID = 1
  *     AND SecondID = 2</b> and so on, regular SQL operations apply.
  * @return A <tt>ResultSet</tt> containing the result of the SELECT
  * @throws SQLException
  */
 public static ResultSet select(String[] fields, String table, String whereClause)
     throws SQLException {
   init();
   Connection con = pool.getConnection();
   String query = "SELECT " + fields[0];
   for (int i = 1; i < fields.length; i++) {
     query += ", " + fields[i];
   }
   query += " FROM " + table;
   if (!whereClause.isEmpty()) {
     query += " WHERE " + whereClause;
   }
   Statement st = con.createStatement();
   System.out.println(query);
   return st.executeQuery(query);
 }
 /**
  * Method that does a INSERT INTO <tt>table</tt> VALUES (<tt>values</tt>)
  *
  * @param fields Array of strings containing the key pairs {{COLUMN, VALUE},{COLUMN, VALUE}} to be
  *     inserted.
  * @param table Table where the values should be inserted into.
  * @return <b>True</b> if successful.
  * @throws SQLException
  */
 public static boolean insert(String[][] fields, String table) throws SQLException {
   init();
   Connection con = pool.getConnection();
   String query = "INSERT INTO " + table + "";
   String columns = " (" + fields[0][0] + "";
   String values = " ('" + fields[0][1] + "'";
   for (int i = 1; i < fields.length; i++) {
     columns += ", " + fields[i][0];
     values += ", '" + fields[i][1] + "'";
   }
   columns += ")";
   values += ")";
   query += columns + " VALUES" + values;
   Statement st = con.createStatement();
   System.out.println(query);
   return (st.executeUpdate(query) != 0);
 }
 /**
  * Method that does a INSERT INTO <tt>table</tt> VALUES (<tt>values</tt>) and returns the new
  * generated key for the values inserted.
  *
  * @param fields Array of strings containing the key pairs {{COLUMN, VALUE},{COLUMN, VALUE}} to be
  *     inserted.
  * @param table Table where the values should be inserted into.
  * @return a ResultSet containing the generated keys.
  * @throws SQLException
  */
 public static int insertAndGetKey(String[][] fields, String table) throws SQLException {
   init();
   Connection con = pool.getConnection();
   String query = "INSERT INTO `" + table + "`";
   String columns = "(`" + fields[0][0] + "`";
   String values = " (" + fields[0][1] + "";
   for (int i = 1; i < fields.length; i++) {
     columns += ", `" + fields[i][0] + "`";
     values += "," + fields[i][1] + "";
   }
   columns += ")";
   values += ")";
   query += columns + " VALUES" + values;
   PreparedStatement st = con.prepareStatement(query, Statement.RETURN_GENERATED_KEYS);
   st.executeUpdate();
   ResultSet rs = st.getGeneratedKeys();
   rs.next();
   return rs.getInt(1);
 }
 /**
  * Method that initiates a Transaction and returns the open connection.
  *
  * @return Connection
  * @throws SQLException
  */
 public static Connection initTransaction() throws SQLException {
   init();
   Connection con = pool.getConnection();
   con.setAutoCommit(false);
   return con;
 }