2012-10-08 84 views
0

我想插入一個日期在我的Oracle表中,我試過使用setTimestamp,setDate甚至setObject但這些方法都沒有工作。任何人都知道什麼是插入日期值的正確方法?谷歌應用腳​​本插入日期到表使用jdbc

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

我不是一個Oracle專家,但在過去,我實際上已經被推當前時間計算到Oracle/DB,而不是在應用層(應用腳本這裏)這樣做。 Oracle(與其他DB一樣)具有「當前時間」計算宏/特殊功能。所以,如果你重新寫你的INSERT語句像這樣 - 從 -

INSERT INTO blob_table(文件名,blob_field,date_insert)值

爲(,,???) -

插入到blob_table(文件名,blob_field,date_insert)值 (?,?,CURRENT_TIMESTAMP

然後,您不再需要通過Apps腳本傳遞一段時間。您可以在格式和時區處理的Oracle文檔上看到更多recipes。這也會讓你的代碼更簡單一些。

+0

它只是一個樣本,以顯示如何設置日期數據類型 – pjsiong

0

首先轉換您的日期爲一個字符串通過以下方式:

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

使用參數這個。有用 – roop

1

您應該使用Jdbc.newTimestamp方法來創建一個JdbcTimestamp對象,如documented

實施例:

var js_date = 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); 

希望它能幫助:)

相關問題