使用 Google Apps Script、Google Cloud SQL 和 JDBC 存储日期

Posted

技术标签:

【中文标题】使用 Google Apps Script、Google Cloud SQL 和 JDBC 存储日期【英文标题】:Storing date with Google Apps Script, Google Cloud SQL and JDBC 【发布时间】:2014-05-08 04:21:20 【问题描述】:

好吧,这让我发疯了。我正在开发一个 Google Apps 脚本,该脚本将电子表格作为输入并将每一行写入 Google Cloud SQL 服务器,但由于某种原因,“日期”列会引发以下错误:

Invalid parameter for setObject type <?>

我一直在试图弄清楚它,我知道它与 JDBC / SQL 中的日期格式有关,听起来我需要从电子表格中转换日期——我猜这是一个字符串比如 '5/7/2014' (谷歌电子表格默认格式化日期的方式)——作为日期数据类型,但我不知道该怎么做。代码如下:

var conn = Jdbc.getCloudSqlConnection('mydb');
conn.setAutoCommit(false);
var stmt = conn.prepareStatement('INSERT INTO my_table (sale_date) values (?);');
stmt.setObject(1, date_variable); //In the Spreadsheet this would look like "5/7/2014"
stmt.addBatch();
var res = stmt.executeBatch();
conn.commit();
conn.close();

我是否需要编写一个函数来解析 Google 电子表格日期并将其转换为 SQL DATE 数据类型,如果需要,如何操作?似乎通过一个函数运行每个日期来转换它会使我的脚本变慢很多。

感谢您的帮助。

【问题讨论】:

【参考方案1】:

是的,您需要一个函数来在 javascript 日期和您的 sql 日期格式之间进行转换。 日期是气体中的字符串是不正确的。它们是日期。查看 date.getTime ,它为您提供整数(自 1970 年以来的毫秒数)或其他转换为新格式的方法。 一点都不慢。日期转换很快。谷歌了解如何将它转换为您的格式。

【讨论】:

谢谢齐格。我尝试使用 .getTime() 和 .getTime()/1000 将其转换为 Unix 时间,但出现此错误:Incorrect date value: '1398927600000' for column 'sale_date' at row 1 有什么想法吗? 您需要了解每种格式的工作原理。 js date.getTime() 自 1970 年以来为毫秒。每个 sql 系统也可以有自己的格式。你不能只是“投射”它们,你需要真正做数学。

以上是关于使用 Google Apps Script、Google Cloud SQL 和 JDBC 存储日期的主要内容,如果未能解决你的问题,请参考以下文章

将身份验证从一个 Google Apps Script webapp 传递到另一个 Google Apps Script webapp

使用 Google Apps Script、Google Cloud SQL 和 JDBC 存储日期

允许匿名访问 Google Apps Script Web 应用程序(Google Apps 帐户)

该脚本工作正常,但不在“google-apps-script”中

服务帐户可以调用 Google Apps Script Execution API 吗?

现在是不是必须使用 Google Play Signing for Instant Apps?