JDBC

O Apps Script pode se conectar a bancos de dados externos pela Serviço JDBC, um wrapper em torno do padrão Tecnologia Java Database Connectivity. O serviço JDBC oferece suporte a Google Cloud SQL para MySQL, MySQL, Microsoft SQL Server e bancos de dados Oracle.

Para atualizar um banco de dados externo com JDBC, o script precisa abrir uma conexão com o banco de dados e fazer alterações enviando instruções SQL.

Bancos de dados do Google Cloud SQL

O Google Cloud SQL permite criar bancos de dados relacionais que residem na nuvem do Google. Observe que o Cloud SQL poderá gerar cobranças com base no seu uso.

Você pode criar uma instância do Google Cloud SQL seguindo as etapas listadas no Guia de início rápido do Cloud SQL.

Como criar conexões do Google Cloud SQL

Há duas maneiras de estabelecer uma conexão com um banco de dados do Google Cloud SQL usando o serviço JDBC do Apps Script:

Esses métodos são explicados a seguir. Ambas são válidas, mas o segundo método exige que você autorize um conjunto de intervalos de IPs para acesso ao seu banco de dados.

Esse método cria uma conexão com uma instância MySQL do Google Cloud SQL usando a propriedade Jdbc.getCloudSqlConnection(url) . O URL do banco de dados tem o formato jdbc:google:mysql://subname, em que subname é o nome da conexão da instância do MySQL listado na página Visão geral da instância do Cloud SQL no console do Google Cloud.

Para se conectar ao Cloud SQL SQL Server, consulte Jdbc.getConnection(url).

Como usar Jdbc.getConnection(url)

Para usar esse método, você deve autorizar alguns Roteamento entre domínios sem classe (CIDR) intervalos de endereços IP para que os servidores do Apps Script se conectem ao seu banco de dados. Antes de executar o script, siga estas etapas:

  1. Na sua instância do Google Cloud SQL, autorize os intervalos de IP, uma de cada vez nesta fonte de dados.

  2. Copie o URL que foi atribuído ao seu banco de dados. ele deve ter formulário jdbc:mysql:subname.

Depois de autorizar esses intervalos de IP, você pode criar conexões com seus instância do Google Cloud SQL usando uma das Jdbc.getConnection(url) e o URL copiado acima.

Outros bancos de dados

Se você já tem um banco de dados MySQL, Microsoft SQL Server ou Oracle, você pode se conectar a ele pelo serviço JDBC do Apps Script.

Como criar outras conexões de banco de dados

Para criar uma conexão de banco de dados usando o Apps Script Serviço JDBC, nas configurações do banco de dados você precisa autorizar os intervalos de IP dessa fonte de dados.

Quando essas listas de permissões estiverem em vigor, será possível criar uma conexão com o banco de dados usando um dos Jdbc.getConnection(url) e o URL do seu banco de dados.

Código de amostra

O exemplo de código abaixo pressupõe que você está se conectando a um banco de dados Google Cloud SQL, e cria conexões de banco de dados usando o Jdbc.getCloudSqlConnection(url) . Para outros bancos de dados, use o método Jdbc.getConnection(url) para criar conexões de banco de dados.

Para mais informações sobre os métodos JDBC, consulte Documentação do Java para o JDBC

Criar um banco de dados, um usuário e uma tabela

A maioria dos desenvolvedores usa ferramenta de linha de comando MySQL para criar bancos de dados, usuários e tabelas. No entanto, é possível fazer o mesmo no Apps Script, como mostrado abaixo. É uma boa ideia criar pelo menos um outro usuário, para que seu script não precise sempre se conectar ao banco de dados como 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);
  }
}

Gravar no banco de dados

Os exemplos abaixo demonstram como gravar um único registro no banco de dados como bem como um lote de 500 registros. O agrupamento é vital para operações em massa.

Observe também o uso de instruções parametrizadas, em que as variáveis são indicado por ?. Para evitar ataques de injeção de SQL, use instruções parametrizadas para fazer o escape de todos os dados fornecidos pelo usuário.

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

Ler do banco de dados

Este exemplo demonstra como ler um grande número de registros do no banco de dados, repetindo o conjunto de resultados conforme necessário.

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

Como fechar conexões

As conexões JDBC são fechadas automaticamente quando a execução de um script termina. Uma única chamada de google.script.run é considerada uma execução completa, mesmo que a página de serviço HTML que fez a chamada permaneça aberta.

No entanto, se você sabe que concluiu uma conexão, instrução ou conjunto de resultados antes do final do script, é uma boa ideia fechá-los manualmente chamando JdbcConnection.close(), JdbcStatement.close(), ou JdbcResultSet.close().

Mostrando uma caixa de diálogo de alerta ou comando também encerra todas as conexões JDBC abertas. No entanto, outros tipos de interface elementos personalizados, como menus ou caixas de diálogo personalizados e barras laterais com ou conteúdo específico.

Google, Google Workspace e marcas e logotipos relacionados são marcas registradas da Google LLC. Todos os outros nomes de empresas e produtos são marcas registradas das empresas com que estão associados.