2010-12-29 15 views
1

SQL Server 2008データベースにDATETIMEという列のテーブルがあります。挿入される日付は、挿入時にNOWを使用できるという意味でのタイムスタンプではありません。日付は挿入の少し前に生成され、私はこの値を保持したいと思います。SQL Server 2008 datetime列JDBC挿入の問題

Datetimesはyyyy-mm-dd hh:mm:ss.[fff...]という形式の文字列としてシリアル化されてから、挿入される前にJDBCタイムスタンプオブジェクトに変換されます。

私はSQL Serverとに実行している問題は、それが挿入される前にTIMESTAMPに値を変換し、これで文句を言うことです:

com.microsoft.sqlserver.jdbc.SQLServerException: 
Cannot insert an explicit value into a timestamp column. 
Use INSERT with a column list to exclude the timestamp column, 
or insert a DEFAULT into the timestamp column. 

どのように私はちょうど、変換なしでDATETIMEカラムに挿入することができます?

ありがとうございました。

+1

テーブルにタイムスタンプタイプの列がないことを確認してください。それらは、SQLサーバーのエラーメッセージのように、Javaではなくタイムスタンプになります。 - スキーマ – Mark

+0

を100%表示します。その質問は既に答えられました。 setStringはsetTimestampではなく、必要なものです。私は、各JDBCドライバがdatetimesをさまざまな方法で処理すると思います。 – Max

答えて

4

SQL ServerのTIMESTAMPデータ型は、日付のようなデータ型ではありません。これは、データ一貫性を助けるために使用されるサーバー生成値です。日時データを格納する場合は、TIMESTAMPデータ型を使用しないでください。

したがって、JDBCタイムスタンプオブジェクトに変換しないでください。データは文字列値として挿入できます。指定する形式は大丈夫ですが、fff...は3桁で、SQL ServerのDATETIMEデータ型では3桁を超えないようにしてください。

+0

そのため、私はタイムスタンプ変換(setTimestampがMySQL DATETIME型で動作するので混乱します)が必要ないことを知っているので、私は混乱しました。代わりにsetString()が機能します。ありがとう! – Max

+1

SQL Server TIMESTAMPは混乱しています。良いニュースは非推奨です。これはROWVERSIONキーワードに置き換えられ、混乱が少なくなります。 – bobs

+0

私が最も混乱していたのは、jdbcでのdatetimeサポートの欠如です。 Date、Time、Timestampのいずれかを取得しますが、Datetimeは取得しません。 setStringはDatetimeを設定する明白な方法ではありません。 – Max

0

ここでタイムスタンプがSQL Serverオンラインブックからの引用だと列が定義されている場合:

SQL Serverのtimestampデータ型は時間や日付を行うに 何もしています。 SQL サーバーのタイムスタンプは、 の でデータの変更が行われた の相対シーケンスを示すバイナリ番号 です。タイムスタンプデータタイプ は、最初は のSQL Server回復アルゴリズムをサポートするために実装されました。タイムスタンプ値は 行が修正されるたびに変化するため

なおさらなる状態は、キー、特に一次 キーのタイムスタンプ 列を使用しないでください。

+1

私はそれがタイムスタンプとしてではなく日時として定義されていると言いました。 – Max