Google Workspace Apps Script JDBC 数据库操作指南

Google Workspace Apps Script JDBC 数据库操作指南

apps-script-samples Apps Script samples for Google Workspace products. apps-script-samples 项目地址: https://gitcode.com/gh_mirrors/ap/apps-script-samples

本文介绍如何使用 Google Workspace 中的 Apps Script 通过 JDBC 连接 Cloud SQL 数据库,并执行常见的数据库操作。我们将详细解析代码示例,帮助开发者理解如何在 Apps Script 环境中高效地管理数据库。

准备工作

在开始之前,您需要准备以下信息:

  1. Cloud SQL 实例连接名称
  2. 数据库 root 用户密码
  3. 要创建的数据库用户名和密码
  4. 数据库名称

这些信息将用于建立与 Cloud SQL 实例的连接。

数据库连接配置

首先,我们需要配置数据库连接参数:

const connectionName = 'Instance_connection_name';  // Cloud SQL实例连接名称
const rootPwd = 'root_password';                   // root用户密码
const user = 'user_name';                          // 新用户名
const userPwd = 'user_password';                   // 新用户密码
const db = 'database_name';                        // 数据库名称

const root = 'root';                               // root用户名
const instanceUrl = 'jdbc:google:mysql://' + connectionName;  // 实例URL
const dbUrl = instanceUrl + '/' + db;              // 数据库URL

数据库基础操作

创建数据库

function createDatabase() {
  try {
    const conn = Jdbc.getCloudSqlConnection(instanceUrl, root, rootPwd);
    conn.createStatement().execute('CREATE DATABASE ' + db);
  } catch (err) {
    console.log('Failed with an error %s', err.message);
  }
}

此函数使用 root 用户连接到 Cloud SQL 实例,并创建一个新的数据库。注意使用 try-catch 块来捕获可能的异常。

创建用户并授权

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) {
    console.log('Failed with an error %s', err.message);
  }
}

这个函数创建一个新用户并授予其对所有数据库的全部权限。使用预处理语句可以防止 SQL 注入攻击。

创建数据表

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) {
    console.log('Failed with an error %s', err.message);
  }
}

这里我们创建一个名为"entries"的表,包含三个字段:guestName、content 和自动递增的主键 entryID。

数据操作

写入单条记录

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) {
    console.log('Failed with an error %s', err.message);
  }
}

使用预处理语句插入单条记录,参数化查询提高了安全性。

批量写入多条记录

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) {
    console.log('Failed with an error %s', err.message);
  }
}

批量操作可以显著提高数据插入性能。我们关闭自动提交,使用批处理插入500条记录,然后手动提交事务。

读取数据

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) {
    console.log('Failed with an error %s', err.message);
  }
}

此函数查询表中的数据,限制返回1000行,并逐行打印结果。注意最后要关闭结果集和语句对象以释放资源。

最佳实践

  1. 连接管理:始终在完成后关闭数据库连接,避免资源泄漏。
  2. 错误处理:使用 try-catch 块捕获并处理可能的异常。
  3. 性能优化:对于批量操作,使用批处理和事务可以提高性能。
  4. 安全性:使用预处理语句防止 SQL 注入攻击。
  5. 资源限制:查询时设置合理的行数限制,避免内存问题。

通过本文介绍的方法,您可以在 Apps Script 中高效地管理 Cloud SQL 数据库,执行各种数据库操作。这些技术可以应用于各种场景,如数据收集、报表生成、自动化数据处理等。

apps-script-samples Apps Script samples for Google Workspace products. apps-script-samples 项目地址: https://gitcode.com/gh_mirrors/ap/apps-script-samples

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汤品琼Valerie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值