@Override
    public MethodResult ExecuteNonQuery(String rawSql) {
        MethodResult res = new MethodResult();
        Connection conn = null;
        try {
            if ((conn = this.getConnection()) != null) {
                Statement statement = conn.createStatement();
                if (DEBUG) {
                    qlog.log(rawSql);
                }
                statement.executeUpdate(rawSql);

                if (rawSql.toLowerCase().contains("insert")) {
                    res.addValue("id", this.getLastInsertRowId(statement));
                }

                statement.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
            res.setException(SQL_EXCEPTION);
        } catch (NullPointerException e) {
            e.printStackTrace();
            res.setException(ARGUMENT_EXCEPTION);
        } catch (Exception e) {
            e.printStackTrace();
            res.setException(INTERNAL_EXCEPTION);
        } finally {
            MethodResult closeRes = closeConnection(conn);
            if (!closeRes.isSuccessful()) {
                res.setException(closeRes.getException());
            }
        }

        return res;
    }