public QueryResultTable executeQueryForResult(String queryString) throws DataBaseException {
		// result object
		QueryResultTable queryResult = new QueryResultTable();

		// 2D arraylist for result table
		ArrayList<ArrayList<String>> resultTable = new ArrayList<ArrayList<String>>();
		// hashmap for header details
		LinkedHashMap<String, String> headers = new LinkedHashMap<String, String>();

		try {
			ResultSet rs = this.con.createStatement().executeQuery(queryString);
			int colSize = rs.getMetaData().getColumnCount();

			// setting header details.
			for (int i = 1; i <= colSize; i++) {
				ResultSetMetaData metadata = rs.getMetaData();
				headers.put(metadata.getColumnName(i), metadata.getColumnTypeName(i));
			}

			if (headers.size() < 1) {
				log.warn("No columns(ColSize: " + colSize + ") were obtained from query : " + queryString);
			}
			queryResult.setHeaderDetails(headers);
			ArrayList<String> rowData;
			while (rs.next()) {
				rowData = new ArrayList<String>();
				for (int i = 1; i <= colSize; i++) {
					rowData.add(String.valueOf(rs.getObject(i)));
				}
				resultTable.add(rowData);
			}

			if (resultTable.size() < 1) {
				log.warn("No results(Result Count: " + resultTable.size() + ") were obtained from query : "
						+ queryString);
			}

		} catch (SQLException e) {
			log.error("SQLException while executing query: '" + queryString + "'", e);
			throw new DataBaseException(e.getMessage(), e);
		} finally {
			try {
				con.close();
			} catch (SQLException e) {
				log.error("SQLException while closing connection", e);
				throw new DataBaseException(e.getMessage(), e);
			}
		}
		queryResult.setResultTable(resultTable);
		return queryResult;
	}