谷歌应用程序脚本使用jdbc将日期插入表

时间:2012-10-08 05:44:48

标签: google-apps-script

我正在尝试在我的一个Oracle表中插入日期,我尝试使用setTimestamp,setDate甚至setObject,但这些方法都不起作用。任何人都知道插入日期值的正确方法是什么?

var stmt = conn.prepareStatement("insert into blob_table (filename,blob_field,date_insert) values (?,?,?)");
var date_insert=new Date();

stmt.setString(1, mess.getAttachments()[0].getName());
stmt.setBytes(2, mess.getAttachments()[0].getBytes());
//stmt.setTimestamp(3,(JdbcTimestamp)date_insert.getTime);
stmt.setObject(3, date_insert);
//stmt.setDate(3,date_insert.getDate() );

4 个答案:

答案 0 :(得分:3)

您应该使用Jdbc.newTimestamp方法创建JdbcTimestamp对象,documented

示例:

var date_insert = new Date();
var jdbc_timestamp = Jdbc.newTimestamp(date_insert.getTime());
...
stmt.setTimestamp(x, jdbc_timestamp);

同样的原则适用于JdbcDateJdbcTime

在你的情况下:

var stmt = conn.prepareStatement("insert into blob_table (filename,blob_field,date_insert) values (?,?,?)");

var date_insert = new Date();
var timestamp = Jdbc.newTimestamp(date_insert.getTime());

stmt.setString(1, mess.getAttachments()[0].getName());
stmt.setBytes(2, mess.getAttachments()[0].getBytes());
stmt.setTimestamp(3, timestamp);

如果您需要处理特定的时区,可以使用其他方法。在这个例子中,我使用与我正在处理的电子表格相同的时区:

var ss = SpreadsheetApp.getActiveSpreadsheet();
var js_date = new Date();
var date_str = Utilities.formatDate(js_date, ss.getSpreadsheetTimeZone(), 'yyyy-MM-dd HH:mm:ss');
var timestamp = Jdbc.parseTimestamp(date_str);
stmt.setTimestamp(x, timestamp);

希望有所帮助:)

答案 1 :(得分:0)

我不是Oracle专家,但在过去,我实际上已将当前时间计算推送到Oracle / DB而不是在应用程序层中执行此操作(此处为Apps脚本)。 Oracle(与其他DB一样)具有“当前时间”计算宏/特殊功能。所以如果你像这样重写你的INSERT语句 - 来自 -

  

插入blob_table(filename,blob_field,date_insert)值   (?,?,?)

到 -

  

插入blob_table(filename,blob_field,date_insert)值   (?,?,的 CURRENT_TIMESTAMP

然后您不再需要从Apps脚本传递时间。您可以在Oracle文档上看到更多recipes格式和时区处理。这也将使您的代码更简单几行。

答案 2 :(得分:0)

我开发了一个库来处理JDBC数据库(和电子表格),并且可以轻松处理MySQL数据库中的日期/时间。您是否想尝试并告诉我它是否在Oracle中同样有效?

http://www.harryonline.net/scripts/objdb-storing-data-with-google-apps-script/482

答案 3 :(得分:0)

首先,通过以下方式将日期转换为字符串:

var stringDate=Utilities.formatDate(new Date(date_insert), "GMT+05:30", "yyyy-MM-dd h:mm:ss ");
Logger.log("stringdate  "+stringDate);

现在使用set object:

stmt.setObject(3,stringDate);