我正在尝试在 Derby 中插入用户定义类型( UDT )的值,如下所示:
statement.execute("CREATE TYPE NUMBER_INTERNAL_ID EXTERNAL NAME 'com.test.Id' LANGUAGE JAVA");
statement = connection.createStatement();
statement.execute("INSERT INTO test_table (table_id) VALUES (123123)");
该表已经像这样创建(UDT的使用不是一个选择,因为它被设置为镜像这种类型的真实数据库。
CREATE TABLE table test_table (table_id NUMBER_INTERNAL_ID NOT NULL)
运行代码时出现以下错误:
SQLSyntaxErrorException: Cannot convert types 'INTEGER' to '"APP"."NUMBER_INTERNAL_ID"'.
如何投射/更改类型以使其兼容?转换/投射方法似乎不起作用。
答案 0 :(得分:1)
我认为你不能使用CAST,没有。
我非常确定您需要将用户定义的类型与可以创建该类型实例的用户定义函数相结合。
不幸的是,没有很多很好的例子。 CREATE TYPE文档暗示了它:https://db.apache.org/derby/docs/10.11/ref/rrefsqljcreatetype.html当它说:
You can use factory functions to construct UDTs.
您可以在本文中看到一个完整的示例,说明这一切是如何结合在一起的:http://www.javacodegeeks.com/2013/10/java-user-defined-types-udt-in-java-db.html
看起来Derby文档在这里可以进一步改进。