Google apps script google应用程序脚本使用jdbc将日期插入表

Google apps script google应用程序脚本使用jdbc将日期插入表,google-apps-script,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.ge

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

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

插入blob_表(文件名、blob_字段、插入日期)值 (?,?,?)

至-

插入blob_表(文件名、blob_字段、插入日期)值 (?,?,当前时间戳


然后,您不再需要从应用程序脚本中传入时间。您可以在Oracle文档中看到更多关于格式和时区处理的信息。这也将使您的代码简化几行

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

插入blob_表(文件名、blob_字段、插入日期)值 (?,?,?)

至-

插入blob_表(文件名、blob_字段、插入日期)值 (?,?,当前时间戳


然后,您不再需要从应用程序脚本中传入时间。您可以在Oracle文档中看到更多关于格式和时区处理的信息。这也将使您的代码简化几行

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


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


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

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

stmt.setObject(3,stringDate);

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

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

stmt.setObject(3,stringDate);

您应该使用
Jdbc.newTimestamp
方法创建
jdbtimestamp
对象,如下所示

例如:

var date_insert = new Date();
var jdbc_timestamp = Jdbc.newTimestamp(date_insert.getTime());
...
stmt.setTimestamp(x, jdbc_timestamp);
同样的原则也适用于
JdbcDate
jdbtime

就你而言:

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

希望有帮助:)

您应该使用
Jdbc.newTimestamp
方法创建
jdbtimestamp
对象,如下所示

例如:

var date_insert = new Date();
var jdbc_timestamp = Jdbc.newTimestamp(date_insert.getTime());
...
stmt.setTimestamp(x, jdbc_timestamp);
同样的原则也适用于
JdbcDate
jdbtime

就你而言:

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

希望有帮助:)

这只是一个示例,演示如何使用日期数据类型设置参数这只是一个示例,演示如何使用日期数据类型设置参数当没有可用的电子表格时(独立脚本),您可以使用“Session.getScriptTimeZone()”而不是“ss.getSpreadsheetTimeZone()”。当没有可用的电子表格时(独立脚本)您可以使用“Session.getScriptTimeZone()”而不是“ss.getSpreadsheetTimeZone()”。