问题描述
我正在尝试像这样在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"'.
如何转换/更改类型以使其兼容? 转换/投射方法似乎不起作用。
1楼
我认为您无法使用CAST,不会。
我很确定您需要将用户定义的类型与可以创建该类型的实例的用户定义的功能结合起来。
不幸的是,没有很多很好的例子。 CREATE TYPE文档提示了这一点: : ,它表示:
You can use factory functions to construct UDTs.
您可以在本文中看到一个完整的示例,说明这一切如何结合使用: :
当然,看起来Derby文档可以在此处得到进一步改进。