JDBC

Apps Script puede conectarse a bases de datos externas a través de la Servicio de JDBC, un wrapper del protocolo estándar Tecnología de conectividad de bases de datos de Java. El servicio de JDBC es compatible con Google Cloud SQL para MySQL, MySQL y Microsoft SQL. de bases de datos de SQL, SQL Server y Oracle.

Para actualizar una base de datos externa con JDBC, tu secuencia de comandos debe abrir una conexión a la base de datos y hacer cambios mediante el envío de instrucciones de SQL.

Bases de datos de Google Cloud SQL

Google Cloud SQL te permite crear bases de datos relacionales que se alojan en la nube de Google. Ten en cuenta que Cloud SQL podrían generar cargos en función del uso.

Puedes crear una instancia de Google Cloud SQL siguiendo los pasos que se enumeran en Guía de inicio rápido de Cloud SQL.

Crea conexiones de Google Cloud SQL

Existen dos formas de establecer una conexión con una instancia de Google Cloud SQL con el servicio JDBC de Apps Script:

Estos métodos se explican a continuación. Ambos son válidos, pero el segundo método requiere que autorices un conjunto de rangos de IP para acceder a tu base de datos.

Este método crea una conexión a una instancia de MySQL de Google Cloud SQL con Jdbc.getCloudSqlConnection(url). . La URL de la base de datos tiene el formato jdbc:google:mysql://subname, en el que subname es el nombre de la conexión con la instancia de MySQL. que se encuentra en la página Descripción general de la instancia de Cloud SQL Consola de Google Cloud.

Para conectarte a SQL Server de Cloud SQL, consulta Jdbc.getConnection(url).

Usa Jdbc.getConnection(url)

Para usar este método, debes autorizar ciertos Enrutamiento entre dominios sin clases (CIDR) Rangos de direcciones IP para que los servidores de Apps Script puedan conectarse a tu base de datos. Antes de ejecutar la secuencia de comandos, completa los siguientes pasos:

  1. En tu instancia de Google Cloud SQL, autorizar los rangos de IP una a la vez desde esta fuente de datos.

  2. Copia la URL que se asignó a tu base de datos. debería tener la formulario jdbc:mysql:subname.

Cuando hayas autorizado estos rangos de IP, podrás crear conexiones a tu instancia de Google Cloud SQL con uno de los Jdbc.getConnection(url) y la URL que copiaste antes.

Otras bases de datos

Si ya tienes tu propia base de datos MySQL, Microsoft SQL Server u Oracle, puedes conectarte a ella a través del servicio JDBC de Apps Script.

Crea otras conexiones de base de datos

Para crear una conexión de base de datos usando Apps Script Servicio de JDBC, en la configuración de tu base de datos debes autorizar rangos de IP de esta fuente de datos.

Una vez que se implementen estas listas, podrás crear una conexión a la base de datos mediante una de las Jdbc.getConnection(url) y la URL de tu base de datos.

Código de muestra

En el código de muestra que aparece a continuación, se supone que te conectas a una base de datos de Google Cloud SQL. y crea conexiones de bases de datos con el Jdbc.getCloudSqlConnection(url) . Para otras bases de datos, debes usar el Jdbc.getConnection(url) para crear conexiones de bases de datos.

Para obtener más información sobre los métodos de JDBC, consulta la Documentación de Java para JDBC.

Crea una base de datos, un usuario y una tabla

La mayoría de los desarrolladores usan Herramienta de línea de comandos de MySQL para crear bases de datos, usuarios y tablas. Sin embargo, es posible hacer lo mismo en Apps Script, como se muestra a continuación. Es una buena idea crear al menos una otro usuario, de modo que la secuencia de comandos no siempre tenga que conectarse a la base de datos 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);
  }
}

Escribe en la base de datos

Los siguientes ejemplos demuestran cómo escribir un registro único en la base de datos como y un lote de 500 registros. El procesamiento por lotes es vital para las operaciones masivas.

Ten en cuenta también el uso de instrucciones parametrizadas, en las que las variables se indicado por ? Para evitar Ataques de inyección de SQL, debes usar sentencias parametrizadas para escapar todos los datos proporcionados por el usuario.

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

Lee desde la base de datos

En este ejemplo, se demuestra cómo leer una gran cantidad de registros del y aplica un bucle al conjunto de resultados según sea necesario.

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

Cierra conexiones

Las conexiones de JDBC se cierran automáticamente cuando una secuencia de comandos termina de ejecutarse. (Mantener en Ten en cuenta que un solo google.script.run cuenta como una ejecución completa, incluso si la página de servicio HTML que hizo la la llamada permanezca abierta).

No obstante, si sabes que ya terminaste con una conexión, una declaración o un conjunto de resultados antes del final de la secuencia de comandos, se recomienda cerrarlos manualmente llamando JdbcConnection.close(), JdbcStatement.close(), o JdbcResultSet.close()

Mostrar un diálogo de alerta o instrucción también finaliza cualquier conexión de JDBC abierta. Sin embargo, otra IU de visualización como menús personalizados o diálogos y barras laterales con contenido, no lo hace.

Google, Google Workspace y las marcas y los logotipos relacionados son marcas de Google LLC Los demás nombres de productos y de empresas son marcas de las empresas con los que están asociados.