1

プロジェクトで JUnit テストにH2 データベース ( v1.3.170 ) を使用しようとしていますが、奇妙な動作が発生しています。DB スキーマの初期化用のすべての SQL を含む 1 つの jar があります。

db_data.jar
  |--schema
        |--aliases.sql
        |--tables.sql
        |-- ...

クラスパスにこのjarがあります。しかし、以下のコードを実行すると、例外がスローされます [以下を参照]:

CallableStatement initCall = conn.prepareCall("RUNSCRIPT FROM 'classpath:schema/aliases.sql'");
initCall.execute();

スローされる例外:

Caused by: org.h2.jdbc.JdbcSQLException: IO Exception: "java.io.FileNotFoundException: resource /schema/aliases.sql"; "classpath:schema/aliases.sql"; SQL statement:
RUNSCRIPT FROM 'classpath:schema/aliases.sql' [90031-170]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:329)
    at org.h2.message.DbException.get(DbException.java:158)
    at org.h2.message.DbException.convertIOException(DbException.java:315)
    at org.h2.command.dml.ScriptBase.openInput(ScriptBase.java:162)
    at org.h2.command.dml.RunScriptCommand.update(RunScriptCommand.java:43)
    at org.h2.command.CommandContainer.update(CommandContainer.java:75)
    at org.h2.command.Command.executeUpdate(Command.java:230)
    at org.h2.server.TcpServerThread.process(TcpServerThread.java:333)
    at org.h2.server.TcpServerThread.run(TcpServerThread.java:149)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.io.FileNotFoundException: resource /schema/aliases.sql
    at org.h2.store.fs.FilePathDisk.newInputStream(FilePathDisk.java:285)
    at org.h2.store.fs.FileUtils.newInputStream(FileUtils.java:209)
    at org.h2.command.dml.ScriptBase.openInput(ScriptBase.java:160)
    ... 6 more

SQL ファイルのパスに をorg.h2.store.fs.FilePathDisk#newInputStream()明示的に追加していることがわかりました。/

public InputStream newInputStream() throws IOException {
    //...
    if (!fileName.startsWith("/")) {
        fileName = "/" + fileName;
    }
    //...
    return in;
}

上記の目的を教えてください。そして、例外に対処する方法は?

前もって感謝します!

4

2 に答える 2

2

サーバーモードを使用する場合、リソース (jar ファイル) はサーバー側にある必要があります。

于 2013-03-20T15:03:58.620 に答える
-1

ファイル参照を次のように変更してみてください。

classpath*:schema/aliases.sql
于 2013-03-06T08:38:15.647 に答える