使用 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”中