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

时间:2017-03-29 06:42:43

标签: java postgresql

我的postgreSQL数据库实例中有一个类型为'names'。 我有一个名为'Prof'的表,其中有一个名为'names'的列''。 我想使用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: ""

请帮助解决语法问题,我无法弄清楚如何最好地处理这个问题。

2 个答案:

答案 0 :(得分:1)

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

https://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html#setObject(int,%20java.lang.Object)

看一下setObject()和getObject()。

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

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

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

还有一个教程:https://docs.oracle.com/javase/tutorial/jdbc/basics/sqlcustommapping.html

答案 1 :(得分:0)

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

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

或者

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

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

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