H2数据库用户定义的java函数类未找到

Posted

技术标签:

【中文标题】H2数据库用户定义的java函数类未找到【英文标题】:H2 database User defined java function Class not found 【发布时间】:2013-09-19 13:33:08 【问题描述】:

当我创建一个别名用于在 H2 数据库中注册 java 函数时,它给出了找不到类的错误。我在 tcp 连接上运行 h2 数据库。

样本,

public class TimeFrame  
    public static void main(String... args) throws Exception 
        Class.forName("org.h2.Driver");
        Connection conn = DriverManager.getConnection("jdbc:h2:tcp://MYIP:9092/~/test", "sa", "");
        Statement stat = conn.createStatement();

        //Setup Table
        stat.execute("DROP TABLE IF EXISTS timeframe");
        stat.execute("CREATE TABLE timeframe (last_updated TIMESTAMP, ip int");
        stat.execute("CREATE ALIAS IF NOT EXISTS SLIDEWINDOW FOR \"h2TimeFrame.TimeFrame.slidewindow\" ");
    

这一切都在包名中:h2TimeFrame。进行测试,

从 org.h2.samples 包中获取示例类“Function”。您将如何通过 TCP 连接在服务器上运行此类。改变

  Connection conn = DriverManager.getConnection("jdbc:h2:~/test", "sa", "");

  Connection conn = DriverManager.getConnection("jdbc:h2:tcp://IPADDRESS:9092/~/test", "sa", "");

【问题讨论】:

从 org.h2.samples 包中获取示例类“Function”。您将如何通过 TCP 连接在服务器上运行此类。更改连接 conn = DriverManager.getConnection("jdbc:h2:~/test", "sa", ""); to Connection conn = DriverManager.getConnection("jdbc:h2:tcp://IPADDRESS:9092/~/test", "sa", ""); 【参考方案1】:

确保:

班级是public 方法是publicstatic

该类必须在数据库引擎的类路径中可用

来自H2 Docs:

引用方法时,该类必须已编译并包含在运行数据库的类路径中。仅支持静态 Java 方法;类和方法都必须是公共的

【讨论】:

是的。在这种情况下,“在数据库引擎的类路径中”意味着它必须在服务器的类路径中(在运行数据库服务器的进程/JVM中) declare the user defined function is defined as source code 可能更简单。这样它就会自动在服务器上可用。 @javadevil,我确实确定了你提到的 3 件事,它们也在文档中。但是,没有奏效。对于上面给出的示例类(TimeFrame),如果我在启动服务器(org.tools.server)时制作了一个可运行的jar并将其包含在类路径中,它应该工作吗?因为它不工作!我在这里错过了什么吗

以上是关于H2数据库用户定义的java函数类未找到的主要内容,如果未能解决你的问题,请参考以下文章

如何为 H2 数据库用户定义函数和存储过程指定 java 类版本?

类未找到异常 com.mysql.jdbc.driver [重复]

exec-maven-plugin 给出类未找到异常

Hazelcast 谓词/ SQL 查询类未找到

弹性4j + spring boot 2 + EndpointAutoConfiguration 类未找到异常

基于 Java 的 H2 数据库无法在 CLASSPATH 中找到项目