使用java api在postgres自定义类型字段中插入值

使用java api在postgres自定义类型字段中插入值,java,postgresql,Java,Postgresql,我的postgreSQL DB实例中有一个类型为“指定”。 我有一个名为“Prof”的表,其中有一列“designation”,类型为“designation”。 我想使用java在这个列中插入值 代码段: insProf.setInt(1, id); insProf.setInt(2, univ_id); insProf.setString(3, desg); int rs_insProf = insProf.executeUpdate(); 输出错误: Enter designation:

我的postgreSQL DB实例中有一个类型为“指定”。 我有一个名为“Prof”的表,其中有一列“designation”,类型为“designation”。 我想使用java在这个列中插入值

代码段:

insProf.setInt(1, id);
insProf.setInt(2, univ_id);
insProf.setString(3, desg);
int rs_insProf = insProf.executeUpdate();
输出错误:

Enter designation: org.postgresql.util.PSQLException: ERROR: invalid input value for enum designation: ""
请帮助理解语法,我不知道如何最好地处理这个问题。

您可以使用setObject()和getObject()方法

看看setObject()和getObject()

根据文档,“如果对象属于实现接口SQLData的类,JDBC驱动程序应该调用方法SQLData.writeSQL将其写入SQL数据流。”

因此,您可以通过创建实现SQLData接口的自定义类来创建自己的类型

另外,不要忘记将自定义类型注册到驱动程序的类型映射中


还有一个教程:

要插入枚举,必须使用以下语法:

INSERT INTO Prof (id, unit_id, designation) VALUES(?, ?, {?, ?, ?});
//-------------------------------------------------------^-------^

您可以在类型指定的情况下使用数组,如下所示:

INSERT INTO Prof (id, unit_id, designation) VALUES(?, ?, ARRAY[?]::designation[]);
//-------------------------------------------------------------^


要设置多个,例如,如果您有多个枚举,您可以使用一个循环来填充枚举。

您的查询是什么样子的?我会尝试使用
insProf.setObject(3,desg,Types.OTHER)
您确定您的
指定
类型接受空字符串
'
?(它只接受它,如果你在定义中也列举了它)。您可能希望使用
NULL
而不是空字符串。