JDBC

Apps Script kann über die JDBC-Dienst, ein Wrapper um den Standarddienst Java-Datenbankkonnektivitätstechnologie. Der JDBC-Dienst unterstützt Google Cloud SQL for MySQL, MySQL, Microsoft SQL Server- und Oracle-Datenbanken.

Zum Aktualisieren einer externen Datenbank mit JDBC muss das Skript eine Verbindung öffnen in die Datenbank ein und nehmen dann Änderungen durch Senden von SQL-Anweisungen vor.

Google Cloud SQL-Datenbanken

Mit Google Cloud SQL können Sie relationale Datenbanken erstellen, in der Google-Cloud. Beachten Sie, dass Cloud SQL können je nach Nutzung Gebühren anfallen.

Sie können eine Google Cloud SQL-Instanz erstellen, indem Sie die Schritte ausführen, die in der Cloud SQL-Kurzanleitung

Google Cloud SQL-Verbindungen erstellen

Es gibt zwei Möglichkeiten, eine Verbindung zu Google Cloud SQL herzustellen. mithilfe des JDBC-Dienstes von Apps Script:

Diese Methoden werden im Folgenden erläutert. Beide sind gültig, aber die zweite Methode erfordert, dass Sie eine Reihe von IP-Bereichen für den Zugriff auf Ihre Datenbank autorisieren.

Diese Methode erstellt eine Verbindung zu einer Google Cloud SQL-MySQL-Instanz über die Methode Jdbc.getCloudSqlConnection(url) . Die Datenbank-URL hat das Format jdbc:google:mysql://subname, wobei subname der Name der MySQL-Instanzverbindung ist. die auf der Seite Übersicht der Cloud SQL-Instanz im Google Cloud Console:

Informationen zum Herstellen einer Verbindung zu Cloud SQL SQL Server finden Sie unter Jdbc.getConnection(url).

Jdbc.getConnection(url) verwenden

Um diese Methode verwenden zu können, müssen Sie bestimmte Classless Inter-Domain Routing (CIDR) IP-Adressbereiche, damit die Apps Script-Server eine Verbindung zu Ihrer Datenbank herstellen können. Führen Sie die folgenden Schritte aus, bevor Sie das Skript ausführen:

  1. In Ihrer Google Cloud SQL-Instanz IP-Bereiche autorisieren, eines nach dem anderen aus dieser Datenquelle.

  2. Kopieren Sie die URL, die Ihrer Datenbank zugewiesen wurde. sollte es die Formular jdbc:mysql:subname.

Nachdem Sie diese IP-Bereiche autorisiert haben, können Sie Verbindungen zu Ihrem Google Cloud SQL-Instanz mit einer der Jdbc.getConnection(url) und die URL, die Sie oben kopiert haben.

Andere Datenbanken

Wenn Sie bereits eine eigene MySQL-, Microsoft SQL Server- oder Oracle-Datenbank haben, können Sie über den JDBC-Dienst von Apps Script eine Verbindung zu ihr herstellen.

Andere Datenbankverbindungen erstellen

So stellen Sie mit Apps Script eine Datenbankverbindung her: JDBC-Dienst in Ihren Datenbankeinstellungen müssen Sie IP-Bereiche aus dieser Datenquelle autorisieren.

Sobald diese Zulassungslisten vorhanden sind, können Sie eine Verbindung zur Datenbank erstellen mit einer der Jdbc.getConnection(url) und die URL Ihrer Datenbank.

Beispielcode

Im Beispielcode unten wird davon ausgegangen, dass Sie eine Verbindung zu einer Google Cloud SQL-Datenbank herstellen. und stellt Datenbankverbindungen mit der Jdbc.getCloudSqlConnection(url) . Für andere Datenbanken müssen Sie die Methode Jdbc.getConnection(url) Methode zum Erstellen von Datenbankverbindungen.

Weitere Informationen zu den JDBC-Methoden finden Sie in der Java-Dokumentation für JDBC

Datenbank, Nutzer und Tabelle erstellen

Die meisten Entwickler verwenden die MySQL-Befehlszeilentool Datenbanken, Nutzer und Tabellen erstellen. Sie können aber auch in Apps Script, wie unten zu sehen. Es empfiehlt sich, mindestens ein damit Ihr Skript nicht immer eine Verbindung zur Datenbank herstellen muss, 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);
  }
}

In die Datenbank schreiben

Die folgenden Beispiele zeigen, wie ein einzelner Datensatz als sowie einen Batch mit 500 Datensätzen. Batchverarbeitung ist bei Bulk-Vorgängen unerlässlich.

Beachten Sie auch die Verwendung von parametrisierten Anweisungen, in denen die Variablen gekennzeichnet durch ?. Um dies zu verhindern, SQL-Injection-Angriffe verwenden, sollten Sie parametrisierte Anweisungen, um alle vom Nutzer bereitgestellten Daten zu maskieren.

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);
  }
}

Aus der Datenbank lesen

Dieses Beispiel zeigt, wie eine große Anzahl von Datensätzen aus der und bei Bedarf den Ergebnissatz mit einer Schleife durchlaufen.

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);
  }
}

Verbindungen schließen

JDBC-Verbindungen werden automatisch geschlossen, wenn die Ausführung eines Skripts abgeschlossen ist. (Behalten im dass ein einzelner google.script.run -Aufruf zählt als vollständige Ausführung, selbst wenn die HTML-Service-Seite, die den bleibt geöffnet.)

Wenn Sie wissen, dass Sie mit einer Verbindung, Anweisung oder Ergebnismenge vor dem Skript hinzu, sollten Sie sie manuell schließen, indem Sie JdbcConnection.close(), JdbcStatement.close() oder JdbcResultSet.close()

Anzeige einer Warnung oder eines Eingabeaufforderungsdialogfelds beendet außerdem alle offenen JDBC-Verbindungen. Auf der anderen Seite wird jedoch die Benutzeroberfläche benutzerdefinierte Menüs oder Dialogfelder und Seitenleisten mit benutzerdefinierten nicht.

Google, Google Workspace und zugehörige Marken und Logos sind Marken von Google LLC Alle anderen Firmen- und Produktnamen sind Marken der Unternehmen. mit denen sie in Verbindung stehen.