Skip to content

Instantly share code, notes, and snippets.

@chibat
Last active December 28, 2015 10:09
Show Gist options
  • Save chibat/7484281 to your computer and use it in GitHub Desktop.
Save chibat/7484281 to your computer and use it in GitHub Desktop.
h2database tips

h2database tips

SQLスクリプトの実行

h2database でコマンドラインからスクリプトファイルの実行例。 エラーになったSQLで処理が中止され、次のSQLは実行されない。

java org.h2.tools.RunScript -url jdbc:h2:~/test -driver org.h2.Driver -user sa -password sa -script ~/script.sql

org.h2.tools.Shell

テーブル指定でカラムの確認

SHOW COLUMNS FROM <テーブル名>

Oracle への linked table で NegativeArraySizeException が発生してしまう件

Oracleへの linked table を作成した場合 Clobカラムのデータ登録で NegativeArraySizeException が発生してしまう。配列を -1 で作成しようとしてしまうらしい。

h2 の org.h2.value.ValueLobDb クラスを以下のように修正。

package org.h2.value;

    :
    :

public class ValueLobDb extends Value implements Value.ValueClob, Value.ValueBlob {

    :
    :

    @Override
    public void set(PreparedStatement prep, int parameterIndex) throws SQLException {
        long p = getPrecision();
        if (p > Integer.MAX_VALUE || p <= 0) {
            p = -1;
        }
        if (type == Value.BLOB) {
            prep.setBinaryStream(parameterIndex, getInputStream(), (int) p);
        } else if (type == Value.CLOB && p < 1L) { // chibat ADD
            prep.setBinaryStream(parameterIndex, getInputStream(), Integer.MAX_VALUE); // chibat ADD
        } else {
            prep.setCharacterStream(parameterIndex, getReader(), (int) p);
        }
    }

    :
    :
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment