如何使用JDBC和Google Apps脚本连接到特定的数据库



我正在尝试使用GAS和JDBC连接到Google Cloud MySQL 5.7实例。我能够运行以下没有错误:

var conn = Jdbc.getCloudSqlConnection("jdbc:google:mysql://my-instance-111111:us-central1:mydbname", user,userPwd)

但这并不能连接到特定的数据库,即当我运行时

var stmt = conn.createStatement();
var results = stmt.executeQuery('SELECT col FROM myTable;');

我得到Error Exception: No database selected

一种尝试修复的方法:

GAS文档表明我可以使用高级参数来包括DB名称,但当我运行var conn = Jdbc.getCloudSqlConnection("jdbc:google:mysql://my-instance-111111:us-central1:mydbname", user,userPwd,mydbname)时,

我得到Exception: The parameters (String,String,String,String) don't match the method signature for Jdbc.getCloudSqlConnection

我根据StackOverflow的一些帖子尝试过的getCloudSqlConnection语句的集合:

var conn = Jdbc.getCloudSqlConnection("jdbc:google:mysql://my-instance-111111:us-central1:mydbname/mydbname", user,userPwd)
var conn = Jdbc.getCloudSqlConnection("jdbc:google:mysql://my-instance-111111:us-central1:mydbname:3306/mydbname", user,userPwd)
var conn = Jdbc.getCloudSqlConnection("jdbc:google:mysql://my-instance-111111:us-central1:mydbname:3307/mydbname", user,userPwd)

对于上述声明,我还尝试用GC概述网页上提供的公共IP替换my-instance-111111:us-central1:mydbname。所有返回Exception: Failed to establish a database connection. Check connection string, username and password.

我使用的是用户root和相应的密码。我可以使用GAS中提供的用户和密码通过命令行输入DB,所以我不认为我提供了错误的用户和口令。

编辑:我回到了@AddonDepot提到的文档,意识到我需要传递一个对象,但我仍然无法完成这项工作。。。。

var obj = {
connectTimeoutSeconds: 15,
database: "mydbname",
instance: "my-instance-111111:us-central1:mydbname",
password: userPwd,
queryTimeoutSeconds: 15,
user: user   };

var conn = Jdbc.getCloudSqlConnection("jdbc:google:mysql://my-instance-111111:us-central1:mydbname", obj);

返回

Exception: The following connection properties are unsupported: database,instance,connectTimeoutSeconds,queryTimeoutSeconds.

我在创建对象时做错了什么吗?我猜不会,因为GAS识别userpassword。为什么它不能识别其他高级参数?

我们必须区分数据库系统实例(有时简称为数据库;我将使用实例(和其中的数据库。这意味着你可能有一个实例,但可能没有在其中创建任何数据库

你可以使用应用程序脚本在你的实例中创建一个新的数据库:

const connectionName = 'connection-name:for-your:instance'
const dbName = 'database'
const username = 'user'
const password = 'password'
function createDB() {
const conn = Jdbc.getCloudSqlConnection(`jdbc:google:mysql://${connectionName}`, username, password)
conn.createStatement().execute('CREATE DATABASE ' + dbName)
}

一旦你在你的实例中创建了数据库,你就可以使用它:

function useDB() {
const conn = Jdbc.getCloudSqlConnection(`jdbc:google:mysql://${connectionName}/${dbName}`, username, password)
// Use conn
}

参考文献

  • JDBC(谷歌应用程序脚本指南(

最新更新