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 autoryzowaniu tych zakresów adresów IP możesz tworzyć połączenia z instancją Google Cloud SQL za pomocą jednej z metod Jdbc.getConnection(url) i adresu URL skopiowanego 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 te listy dozwoleń zostaną utworzone, możesz utworzyć połączenie z bazą danych, używając jednej z metod 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

Przykłady poniżej pokazują, jak zapisać w bazie danych pojedynczy rekord oraz partię 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);
  }
}

Czytanie z bazy danych

Ten przykład pokazuje, jak odczytać dużą liczbę rekordów z bazy danych, wykonując w razie potrzeby pętlę na zbiorze 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 wiesz już, że masz już za sobą połączenie, instrukcję lub zestaw wyników, 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 i powiązane znaki oraz 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.