技術をかじる猫

適当に気になった技術や言語、思ったこと考えた事など。

ちょっとだけ書いたメモ(2)

昨日の続き。

テーブルの形を知らずに Insert だけぶち込むのは、INSERT 文をむりくり生成してやればできなく無いのだけど、その場合文字列とか日付型とか、利用者側が型を意識しなくてはならず、扱いがめんどい。
というか TSV 作るときは、値だけあってればいちいちダブルクォートとか色々やりたくないと思うのだ。

なら、INSERT を行う前に、動的にスキーマをぶっこ抜く必要があって、まだ実行してないけどこんな感じでいけそう?(間違ってたらそのうち直す)

// connection は java.sql.Connection
DatabaseMetaData metaData = connection.getMetaData();
try (ResultSet rs = metaData.getColumns(null, schemaName, tableName, "%")) {
    while (rs.next()) {
        rs.getString("COLUMN_NAME");
        rs.getInt("TYPE_NAME");
        rs.getInt("COLUMN_SIZE");
    }
}

と言うような事が以下から読めた。

docs.oracle.com

ちなみに、TYPE_NAME で拾ってこれるのが整数なのだけど、java.sql.Types 内に整数定義が存在してるので、switch なり == なりで型を拾えるらしい。
これで型を拾って型変換コンバータに食わせればいいっぽいかな?

よく Java の O/R マッパー関連が、テーブル定義を引っこ抜いてる臭い挙動をしてたので、あるんだろうなーと思って探したら案の定あった系。
要するに誰かの出来るものは、だいたいの場合、探せば見つかる。

見つからないのは特許系のアルゴリズム(苦笑