我正在尝试在我的一个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() );
答案 0 :(得分:3)
您应该使用Jdbc.newTimestamp
方法创建JdbcTimestamp
对象,documented。
示例:
var date_insert = new Date();
var jdbc_timestamp = Jdbc.newTimestamp(date_insert.getTime());
...
stmt.setTimestamp(x, jdbc_timestamp);
同样的原则适用于JdbcDate
和JdbcTime
。
在你的情况下:
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);