code: public List<GroovyRowResult> executeInsert(String sql, String[] keyColumnNames) throws SQLException {
          Connection connection = createConnection();
          Statement statement = null;
          try {
              statement = getStatement(connection, sql);
              this.updateCount = statement.executeUpdate(sql, keyColumnNames);
              ResultSet keys = statement.getGeneratedKeys();
              return asList(sql, keys);
          } catch (SQLException e) {
              LOG.warning("Failed to execute: " + sql + " because: " + e.getMessage());
              throw e;
          } finally {
              closeResources(connection, statement);
          }
      }
docs: Executes the given SQL statement (typically an INSERT statement).
  This variant allows you to receive the values of any auto-generated columns,
  such as an autoincrement ID field (or fields) when you know the column name(s) of the ID field(s).
  <p>
  This method supports named and named ordinal parameters by supplying such
  parameters in the <code>params</code> array. See the class Javadoc for more details.
  
  @param sql            The SQL statement to execute
  @param keyColumnNames an array of column names indicating the columns that should be returned from the
  inserted row or rows (some drivers may be case sensitive, e.g. may require uppercase names)
  @return A list of the auto-generated row results for each inserted row (typically auto-generated keys)
  @throws SQLException if a database access error occurs
  @since 2.3.2