LoginSignup
0
0

More than 5 years have passed since last update.

H2 database でCSVデータをロードする。

Posted at

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」にすること
・改行コードはどちらもよい。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0