2016-11-17 5 views
1

列の値を取得するSQL Serverにバッチインサートを実行しようとしていますcsvファイル。java.sql.BatchUpdateException:nvarcharデータ型をdatetimeデータ型に変換すると、範囲外の値が返される

これはcsvファイルの各行を処理していますが、私はどちらか取得しています

nvarchar型が数値

に変換することができない方法です - または -

dateTimeの例外


コード:

for (int i = 0; i < count; i++) { 
      Object val = columnVal[i]; 
      if (StringUtils.isEmptyOrWhitespaceOnly(val.toString())) { 
       System.out.println(val); 
       ps.setObject(i + 1, null); 
      } else { 
       System.out.println(val); 
       ps.setObject(i + 1, val); 
      } 

     } 
+0

私は値 –

答えて

1

SQL Serverのデータ型はDATETIMEDATETIME2DATEなどで、オブジェクトの値設定する場合は、次のデータ型のいずれかを使用します。

  • java.sql.dateを:日付部分のみが必要です
  • java.sql.timestamp:日付+時刻の部分が必要です
  • java.time Java 1.8+のクラスで、JDBC 4.2以降のJDBCドライバを使用しています。例えばjava.time.LocalDateTime

スタックオーバーフローの詳細については、this questionをご覧ください。


編集:

私は私が値を取得するには、オブジェクトの配列を使用する理由、すなわちcsvファイル、から来ている値の種類がわからないので、一般的な挿入を記述しようとしています

この場合、ISO 8601形式でフォーマットされたCSV使用日時/日時の値を要求する必要があります。 SQL Serverはdatetime形式の置換を変換できません。これは特に不可能です。米国の日時フォーマットはmm/dd/yyyyで、ほとんどの国のフォーマットは通常dd/mm/yyyyです。

T-SQL SET DATEFORMATを使用して明示的な日付形式を設定することはできますが、形式がどのようなものかを知る必要があり、SQL Serverもその形式をサポートする必要があります。


編集2:私はDD-MM-として日時書式をしようとしたとき

は、実際に私はこの問題に直面してバッチ挿入.amにできDD-MM-yyyy形式の午前のような日にしようとしましたyyyy hh.mm.ss。ロケールの変更が...それはその後、同じように簡単にmm-dd-yyyyとして解釈することができれば、その最初の形式では、この

を処理するために、どのような方法があり、それは簡単に破ることができました。

私のアドバイスを覚えておいてください:日付時刻をシリアル化するとき、常にISO8061形式を使用します。 YYYY-MM-DDThh:mm:ss[.mmm](TはリテラルT文字)またはYYYYMMDD[ hh:mm:ss[.mmm]]を使用する必要があります。 DATETIME - Supported String Literal Formats for datetimeを参照してください。

+0

を取得するには、オブジェクトの配列を使用し、なぜ実際に私はできDD-MM-yyyy形式の午前のような日で試してみました、私はすなわちcsvファイルから来ている値の種類がわからないので、一般的な挿入を記述しようとしていますバッチインサートの.amに直面する問題は、日時フォーマットをdd-mm-yyyy hh.mm.ssとして試してみました。これを処理する方法はありますか? –

+0

@vydyamsrikanth編集2を参照してください。 –

関連する問題