2

Oracle テーブルの 1 つに日付を挿入しようとしています。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);

と にも同じ原則が適用され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);

それが役に立てば幸い :)

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

set object を使用するようになりました:

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

JDBC データベース (およびスプレッドシート) で動作するライブラリを開発し、MySQL データベースで日付/時刻を簡単に処理できるようにしました。試してみて、Oracle でも同じように機能するか教えてください。

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

于 2013-01-24T00:54:53.877 に答える
0

私は Oracle の専門家ではありませんが、過去には、現在の時刻の計算をアプリケーション レイヤーで行うのではなく、実際に Oracle/DB にプッシュしていました (Apps Script here)。Oracle (他の DB と同様) には、「現在時刻」計算マクロ/特殊関数があります。したがって、INSERT ステートメントを次のように書き直すと - From -

blob_table に挿入 (filename,blob_field,date_insert) 値 (?,?,?)

に -

blob_table (filename,blob_field,date_insert) 値 (?,?, CURRENT_TIMESTAMP )に挿入します。

そうすれば、Apps Script から時間を渡す必要がなくなります。書式設定とタイムゾーンの処理を含むその他のレシピについては、Oracle ドキュメントを参照してください。これにより、コードが数行簡素化されます。

于 2012-10-08T12:05:00.557 に答える