Google Workspace Apps Script JDBC 数据库操作指南
本文介绍如何使用 Google Workspace 中的 Apps Script 通过 JDBC 连接 Cloud SQL 数据库,并执行常见的数据库操作。我们将详细解析代码示例,帮助开发者理解如何在 Apps Script 环境中高效地管理数据库。
准备工作
在开始之前,您需要准备以下信息:
- Cloud SQL 实例连接名称
- 数据库 root 用户密码
- 要创建的数据库用户名和密码
- 数据库名称
这些信息将用于建立与 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行,并逐行打印结果。注意最后要关闭结果集和语句对象以释放资源。
最佳实践
- 连接管理:始终在完成后关闭数据库连接,避免资源泄漏。
- 错误处理:使用 try-catch 块捕获并处理可能的异常。
- 性能优化:对于批量操作,使用批处理和事务可以提高性能。
- 安全性:使用预处理语句防止 SQL 注入攻击。
- 资源限制:查询时设置合理的行数限制,避免内存问题。
通过本文介绍的方法,您可以在 Apps Script 中高效地管理 Cloud SQL 数据库,执行各种数据库操作。这些技术可以应用于各种场景,如数据收集、报表生成、自动化数据处理等。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考