code: public List<List<Object>> executeInsert(String sql) throws SQLException {
          Connection connection = createConnection();
          Statement statement = null;
          try {
              statement = getStatement(connection, sql);
              this.updateCount = statement.executeUpdate(sql, Statement.RETURN_GENERATED_KEYS);
              ResultSet keys = statement.getGeneratedKeys();
              return calculateKeys(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).
  Use this variant when you want to receive the values of any
  auto-generated columns, such as an autoincrement ID field.
  See {@link #executeInsert(GString)} for more details.
  <p>
  Resource handling is performed automatically where appropriate.
  
  @param sql The SQL statement to execute
  @return A list of the auto-generated column values for each
  inserted row (typically auto-generated keys)
  @throws SQLException if a database access error occurs