Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建具有相同名称但不具有相同签名的别名_Java_H2 - Fatal编程技术网

Java 创建具有相同名称但不具有相同签名的别名

Java 创建具有相同名称但不具有相同签名的别名,java,h2,Java,H2,为了在Junit测试中使用H2数据库而不是调用Oracle,我在H2上创建别名以模拟Oracle兼容性时遇到了障碍: 我首先声明了日期到字符转换的to_char的别名:works fine create alias TO_CHAR as$$java.lang.String toChar(java.util.Date,String格式)引发异常{…}$$ 然后我尝试为数字到字符转换声明一个to_char别名:现在h2不接受它: 将别名创建为\u CHAR as$$ java.lang.Strin

为了在Junit测试中使用H2数据库而不是调用Oracle,我在H2上创建别名以模拟Oracle兼容性时遇到了障碍:

  • 我首先声明了日期到字符转换的to_char的别名:works fine

    create alias TO_CHAR as$$java.lang.String toChar(java.util.Date,String格式)引发异常{…}$$

  • 然后我尝试为数字到字符转换声明一个to_char别名:现在h2不接受它:
    将别名创建为\u CHAR as$$
    java.lang.String toChar(java.lang.Number值){
    ...
    }$$;

它将被拒绝,并显示以下错误消息:

org.h2.jdbc.JdbcSQLException:函数别名“TO_CHAR”已存在;SQL语句: 将别名创建为_CHAR as$$

java.lang.String toChar(java.lang.Number值){ 返回java.lang.String.valueOf(值); }$$

我还尝试在1个块中声明2个函数,如:

将别名创建为_CHAR as$$

java.lang.String toChar(int值){ ... }

字符串toChar(java.util.Date,字符串格式)抛出 例外情况{ ... } $$;

在本例中,没有错误,但只考虑声明的firest方法

那么,有没有办法声明两个别名具有相同的名称但签名不相同?

至于,因为

H2确实支持。但是,有一个限制,因为不支持将此类函数声明为源代码

您需要按如下方式声明该方法:

CREATE ALIAS YOUR_METHOD FOR "acme.Function.yourMethod";
该限制记录如下:

CREATE ALIAS YOUR_METHOD FOR "acme.Function.yourMethod";
方法重载
如果类已经编译并包含在类路径中,则可以将多个方法绑定到SQL函数。每个Java方法必须有不同数量的参数。将函数声明为源代码时不支持方法重载。

“多个方法可能绑定到一个SQL函数”,因此我希望为“acme.function.yourMethod”、“acme.function.yourMethodOverload1”创建ALIAS YOUR_方法;Java支持方法重载,所以我认为您不需要传递两个Java方法。也许最好问一个新问题。在java中,可以使用相同数量的参数重载,例如
foo(inta,intb)
foo(stringa,stringb)
。H2似乎不支持这一点,也不支持
foo(对象a、对象b)
。但是,H2确实有一个可用于此目的的“值”类。