使用java api在postgres自定义类型字段中插入值
我的postgreSQL DB实例中有一个类型为“指定”。 我有一个名为“Prof”的表,其中有一列“designation”,类型为“designation”。 我想使用java在这个列中插入值 代码段:使用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:
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
而不是空字符串。