H2データベースでCSVファイルをロードする。
末尾に,を付けないといけないという謎仕様はやめてほしい。
javaの配列でも末尾を,にしないとcheckstyleで怒られるのもほんと嫌い。
■テスト用テーブル生成
CREATE TABLE TEST_T (
ID CHAR (5)
, NAME VARCHAR(5)
, VAL NUMBER(5, 0)
, D1 DATE
, D2 DATE
, T1 TIMESTAMP
, T2 TIMESTAMP(3)
, T3 TIMESTAMP(6)
)
■CSVファイルの中身を確認する。
TEST_T SELECT * FROM CSVREAD('{CSVへのフルパス}')
■CSVファイルの中身をDBに登録する。
INSERT INTO TEST_T SELECT * FROM CSVREAD('{CSVへのフルパス}')
■データなし編
①末尾に「,」なし
[データ]
ID,NAME,VAL,D1,D2,T1,T2,T3
[結果]
列番号が一致しません。21002-199
②末尾に「,」あり
[データ]
ID,NAME,VAL,D1,D2,T1,T2,T3,
[結果]
正常終了 (ただしデータは入らず。)
③行を増やしてみる。
ID,NAME,VAL,D1,D2,T1,T2,T3,
,,,,,,,,
⇒すべてnullの状態で1件挿入された。
■データあり編
①末尾の「,」なし
[データ]
ID,NAME,VAL,D1,D2,T1,T2,T3,
ID,NAME,300,2019-04-01,2019-04-30,2019-04-01 23:59:59,2019-04-01 23:59:59,2019-04-01 23:59:59
[結果]
⇒正常終了
②末尾の「,」あり
[データ]
ID,NAME,VAL,D1,D2,T1,T2,T3,
ID,NAME,300,2019-04-01,2019-04-30,2019-04-01 23:59:59,2019-04-01 23:59:59,2019-04-01 23:59:59,
[結果]
⇒正常終了
③末尾に「,」いっぱいつける
[データ]
ID,NAME,VAL,D1,D2,T1,T2,T3,
ID,NAME,300,2019-04-01,2019-04-30,2019-04-01 23:59:59,2019-04-01 23:59:59,2019-04-01 23:59:59,,,,,
[結果]
⇒正常終了
■データ記載確認
①「"」で囲っても問題ないか。
[データ]
"ID","NAME","VAL","D1","D2","T1","T2","T3",""
"ID","NAME","300","2019-04-01","2019-04-30","2019-04-01 23:59:59","2019-04-01 23:59:59","2019-04-01 23:59:59"
[結果]
列番号が一致しません。
②ヘッダの最後の「""」を消してみる。
[データ]
"ID","NAME","VAL","D1","D2","T1","T2","T3",
"ID","NAME","300","2019-04-01","2019-04-30","2019-04-01 23:59:59","2019-04-01 23:59:59","2019-04-01 23:59:59"
[結果]
⇒正常終了
■CSVファイルの文字コード,改行コードの確認。
①SJIS, UTF-8
⇒ SJISはOK, UTF-8で文字化け
②CRLF, LF
⇒ どちらも問題なし。
■■■まとめ■■■
・1行目はヘッダ行としてスキップされる。
・1行目は末尾に「,」を付けないといけない。(★重要★)
・データ行には末尾の「,」の有無はどちらでも可
・データ行はいずれの型でも「"」の有無はどちらでも可。
・文字コードは「SJIS」にすること
・改行コードはどちらもよい。