【发布时间】:2014-10-27 03:26:16
【问题描述】:
我有一个使用以下命令编译的 scala 文件:
scalac -cp ".:*" AcmeTrigger.scala
在包含.scala 文件的目录中,我有一些.jar 文件,其中包含我正在使用的电子邮件和短信服务的API。这里没有问题。
当有人修改数据库中的表时,scala 文件本质上会发送文本消息和电子邮件。我使用以下命令启动数据库:
java -cp ".:*" -jar h2-1.4.182.jar
基本上告诉它使用目录中的.class 和.jar 文件并将它们添加到类路径中。我已经做了很多变化。不带 .class,带“.:*”和完全键入的名称。不管我做什么,H2 都不认识这个类。
所以在这个数据库中有一个操作将数据库连接到一个类:
CREATE TRIGGER ALERT AFTER INSERT ON "event"
FOR EACH ROW CALL "AcmeTrigger"
当我运行它时,我收到一个错误,指出它找不到类:
Error creating or initializing trigger "ALERT" object, class "AcmeTrigger", cause: "org.h2.message.DbException: Class ""AcmeTrigger"" not found [90086-182]"
我不认为错误出在查询语法中,而是我使用类路径的方式,并希望有更多 Java/Scala 经验的人可以在这里帮助我。我尝试了许多启动 .jar 文件的变体,但似乎没有任何帮助。
【问题讨论】:
-
你的 jar 是在运行 H2 本身,还是通过 JDBC 或其他方式连接到另一个进程?
-
@ChrisMartin .jar 包含一个扩展 org.h2.api.Trigger 的类“AcmeTrigger”。根据 H2 文档,您指出每次运行我在上面发布的 SQL 语句时都应该调用该文件。 SQL 语句返回在类路径中找不到该类。
-
Cannot call trigger in H2 DB 的可能重复项
-
@ChrisMartin 不幸的是,那里的答案只是声明将类添加到类路径中,但这似乎不起作用。我不确定我是否错误地使用了类路径,因为在使用 -verbose 时,我从来没有看到我的类被 H2 加载。
-
啊,抱歉,我没有注意到您在哪里包含了用于启动 H2 的命令。