JDBC,

Apps Script może łączyć się z zewnętrznymi bazami danych za pomocą Usługa JDBC – otoka standardu Technologia Java Database Connectivity Usługa JDBC obsługuje Google Cloud SQL for MySQL, MySQL i Microsoft SQL Bazy danych serwera i Oracle.

Aby zaktualizować zewnętrzną bazę danych za pomocą JDBC, Twój skrypt musi otworzyć połączenie do bazy danych, a potem wprowadzić zmiany, wysyłając instrukcje SQL.

Bazy danych Google Cloud SQL

Google Cloud SQL umożliwia tworzenie działających relacyjnych baz danych w chmurze Google. Pamiętaj, że Cloud SQL może powodować naliczanie opłat w zależności od użycia.

Aby utworzyć instancję Google Cloud SQL, wykonaj czynności opisane w Krótkie wprowadzenie do Cloud SQL.

Tworzę połączenia Google Cloud SQL

Istnieją 2 sposoby na nawiązanie połączenia z Google Cloud SQL baza danych przy użyciu usługi JDBC Apps Script:

Poniżej omówiono te metody. Obie metody są prawidłowe, ale druga metoda wymaga autoryzowania zestawu zakresów adresów IP na potrzeby dostępu do bazy danych.

Ta metoda tworzy połączenie z instancją MySQL w Google Cloud SQL przy użyciu interfejsu Jdbc.getCloudSqlConnection(url) . Adres URL bazy danych ma postać jdbc:google:mysql://subname, gdzie subname to nazwa połączenia instancji MySQL wymienionych na stronie Przegląd instancji Cloud SQL w Konsola Google Cloud.

Aby połączyć się z Cloud SQL SQL Server, zobacz Jdbc.getConnection(url).

Przy użyciu Jdbc.getConnection(url)

Aby korzystać z tej metody, musisz upoważnić określone Routing między domenami (CIDR) bez klasy Zakresy adresów IP, aby serwery Apps Script mogły łączyć się z bazą danych. Zanim uruchomisz skrypt, wykonaj te czynności:

  1. W instancji Google Cloud SQL autoryzuj zakresy adresów IP, pojedynczo z tego źródła danych.

  2. Skopiuj adres URL przypisany do Twojej bazy danych. powinien mieć formularz jdbc:mysql:subname.

Po autoryzacji tych zakresów adresów IP możesz utworzyć połączenia ze instancji Google Cloud SQL korzystającej z jednego z Jdbc.getConnection(url) oraz adres URL skopiowany powyżej.

Inne bazy danych

Jeśli masz już własną bazę danych MySQL, Microsoft SQL Server lub Oracle, i możesz się z nim połączyć przez usługę JDBC Apps Script.

Tworzenie innych połączeń z bazą danych

Tworzenie połączenia z bazą danych przy użyciu Apps Script usługa JDBC w ustawieniach bazy danych. musisz autoryzować zakresy adresów IP z tego źródła danych.

Gdy listy dozwolonych będą już dostępne, możesz utworzyć połączenie z bazą danych za pomocą jednej z Jdbc.getConnection(url) i adresu URL bazy danych.

Przykładowy kod

W przykładowym kodzie poniżej założono, że łączysz się z bazą danych Google Cloud SQL. i tworzy połączenia z bazą danych za pomocą Jdbc.getCloudSqlConnection(url) . W przypadku innych baz danych musisz użyć Jdbc.getConnection(url) do tworzenia połączeń z bazami danych.

Więcej informacji o metodach JDBC znajdziesz w dokumentacji Dokumentacja w języku Java dla JDBC.

Tworzenie bazy danych, użytkownika i tabeli

Większość programistów używa narzędzia wiersza poleceń MySQL, aby tworzenia baz danych, użytkowników i tabel. Możesz jednak zrobić to samo w Apps Script, jak pokazano poniżej. Warto utworzyć co najmniej jedną inny użytkownik, dzięki czemu skrypt nie zawsze musi łączyć się z bazą danych jako root

service/jdbc.gs
/**
 * Create a new database within a Cloud SQL instance.
 */
function createDatabase() {
  try {
    const conn = Jdbc.getCloudSqlConnection(instanceUrl, root, rootPwd);
    conn.createStatement().execute('CREATE DATABASE ' + db);
  } catch (err) {
    // TODO(developer) - Handle exception from the API
    console.log('Failed with an error %s', err.message);
  }
}

/**
 * Create a new user for your database with full privileges.
 */
function createUser() {
  try {
    const conn = Jdbc.getCloudSqlConnection(dbUrl, root, rootPwd);

    const stmt = conn.prepareStatement('CREATE USER ? IDENTIFIED BY ?');
    stmt.setString(1, user);
    stmt.setString(2, userPwd);
    stmt.execute();

    conn.createStatement().execute('GRANT ALL ON `%`.* TO ' + user);
  } catch (err) {
    // TODO(developer) - Handle exception from the API
    console.log('Failed with an error %s', err.message);
  }
}

/**
 * Create a new table in the database.
 */
function createTable() {
  try {
    const conn = Jdbc.getCloudSqlConnection(dbUrl, user, userPwd);
    conn.createStatement().execute('CREATE TABLE entries ' +
      '(guestName VARCHAR(255), content VARCHAR(255), ' +
      'entryID INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(entryID));');
  } catch (err) {
    // TODO(developer) - Handle exception from the API
    console.log('Failed with an error %s', err.message);
  }
}

Zapisz w bazie danych

Poniższe przykłady pokazują, jak zapisać w bazie danych pojedynczy rekord jako oraz grupę 500 rekordów. Grupowanie jest kluczowe w przypadku operacji zbiorczych.

Należy również pamiętać o użyciu instrukcji z parametrami, w których zmienne są oznaczone przez ?. Aby zapobiegać ataków typu wstrzykiwanie kodu SQL, instrukcje z parametrami, które pozwalają zmienić znaczenie wszystkich danych przekazywanych przez użytkownika.

service/jdbc.gs
/**
 * Write one row of data to a table.
 */
function writeOneRecord() {
  try {
    const conn = Jdbc.getCloudSqlConnection(dbUrl, user, userPwd);

    const stmt = conn.prepareStatement('INSERT INTO entries ' +
      '(guestName, content) values (?, ?)');
    stmt.setString(1, 'First Guest');
    stmt.setString(2, 'Hello, world');
    stmt.execute();
  } catch (err) {
    // TODO(developer) - Handle exception from the API
    console.log('Failed with an error %s', err.message);
  }
}

/**
 * Write 500 rows of data to a table in a single batch.
 */
function writeManyRecords() {
  try {
    const conn = Jdbc.getCloudSqlConnection(dbUrl, user, userPwd);
    conn.setAutoCommit(false);

    const start = new Date();
    const stmt = conn.prepareStatement('INSERT INTO entries ' +
      '(guestName, content) values (?, ?)');
    for (let i = 0; i < 500; i++) {
      stmt.setString(1, 'Name ' + i);
      stmt.setString(2, 'Hello, world ' + i);
      stmt.addBatch();
    }

    const batch = stmt.executeBatch();
    conn.commit();
    conn.close();

    const end = new Date();
    console.log('Time elapsed: %sms for %s rows.', end - start, batch.length);
  } catch (err) {
    // TODO(developer) - Handle exception from the API
    console.log('Failed with an error %s', err.message);
  }
}

Odczyt z bazy danych

Ten przykład pokazuje, jak odczytać dużą liczbę rekordów z w bazie danych, w razie potrzeby zapętlaj zestaw wyników.

service/jdbc.gs
/**
 * Read up to 1000 rows of data from the table and log them.
 */
function readFromTable() {
  try {
    const conn = Jdbc.getCloudSqlConnection(dbUrl, user, userPwd);
    const start = new Date();
    const stmt = conn.createStatement();
    stmt.setMaxRows(1000);
    const results = stmt.executeQuery('SELECT * FROM entries');
    const numCols = results.getMetaData().getColumnCount();

    while (results.next()) {
      let rowString = '';
      for (let col = 0; col < numCols; col++) {
        rowString += results.getString(col + 1) + '\t';
      }
      console.log(rowString);
    }

    results.close();
    stmt.close();

    const end = new Date();
    console.log('Time elapsed: %sms', end - start);
  } catch (err) {
    // TODO(developer) - Handle exception from the API
    console.log('Failed with an error %s', err.message);
  }
}

Zamykanie połączeń

Połączenia JDBC są zamykane automatycznie po zakończeniu wykonywania skryptu. (Zachowaj w pamiętaj, że pojedynczy element google.script.run liczy się jako pełne wykonanie, nawet jeśli strona usługi HTML, która utworzyła tag nadal otwarte).

Jeśli jednak połączenie, stwierdzenie lub zestaw wyników są już gotowe, przed zakończeniem skryptu warto zamknąć je ręcznie, wywołując metodę JdbcConnection.close() JdbcStatement.close(), lub JdbcResultSet.close().

Wyświetlam okno alertu lub promptu powoduje także zakończenie wszystkich otwartych połączeń JDBC. Inny przykładowy interfejs użytkownika takich jak niestandardowe menu czy okna dialogowe i paski boczne z niestandardowymi nie.

Google, Google Workspace oraz powiązane znaki i logotypy są znakami towarowymi Google LLC, Wszystkie inne nazwy firm i produktów są znakami towarowymi odpowiednich podmiotów. z którymi są powiązane.