H2DBエラー
H2DBをTomcatで使用し始めて、DBコネクションを取得しようとしたときに下のようなエラーが出ました。
org.h2.jdbc.JdbcSQLNonTransientConnectionException: 接続が壊れています: "java.net.SocketTimeoutException: > connect timed out: localhost"
Connection is broken: "java.net.SocketTimeoutException: connect timed out: localhost" [90067-200]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:622)
at org.h2.message.DbException.getJdbcSQLException(DbException.java:429)
at org.h2.message.DbException.get(DbException.java:194)
at org.h2.engine.SessionRemote.connectServer(SessionRemote.java:439)
at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:321)
at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:173)
at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:152)
at org.h2.Driver.connect(Driver.java:69)
考えられる原因は、以下の通りです。
- H2DBをサーバーモードで使用していない
- URLの指定方法がおかしい
実際のコードは下のようなものです。
try {
Class.forName("org.h2.Driver");
con = DriverManager.getConnection("jdbc:h2:tcp://localhost/~/database");
Statement stmt = con.createStatement();
stmt.execute(SQLConst.CREATE_USER_TBL);
stmt.execute(SQLConst.CREATE_ITEM_TBL);
stmt.execute(SQLConst.CREATE_ITEM_TYPE_TBL);
} catch (SQLException e) {
e.printStackTrace();
System.exit(-1);
} catch (Exception e) {
e.printStackTrace();
System.exit(-1);
}
解決
ちょっと特殊な解決方法でしたが、シンプルにH2DBをサーバーで起動してやれば大丈夫でした。
具体的な手順は以下の通りです。
H2DBのサーバーを起動する
H2をインストールしたディレクトリにある、「h2.bat」もしくは「h2.sh」を起動すればOK
もしくは、Windowsの場合にウィンドウズボタンからのアプリケーション「H2Console」を起動して対象のDBファイルにアクセスすればOK