2

我试图在我的一个 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

4 回答 4

4

您应该使用该Jdbc.newTimestamp方法来创建JdbcTimestamp对象,如文档中所述。

例子:

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);

希望能帮助到你 :)

于 2016-02-04T00:50:13.113 回答
1

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

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

现在使用设置对象:

stmt.setObject(3,stringDate);
于 2015-06-15T09:06:22.973 回答
0

我不是 Oracle 专家,但在过去,我实际上将当前时间计算推送到 Oracle/DB 中,而不是在应用层(此处为应用脚本)中执行此操作。Oracle(与其他数据库一样)具有“当前时间”计算宏/特殊功能。因此,如果您像这样重新编写 INSERT 语句 - 从 -

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

至 -

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

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

于 2012-10-08T12:05:00.557 回答
0

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

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

于 2013-01-24T00:54:53.877 回答