我的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: ""
请帮助解决语法问题,我无法弄清楚如何最好地处理这个问题。
答案 0 :(得分:1)
您可以使用setObject()和getObject()方法。
看一下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[]);
//-------------------------------------------------------------^
如果您有多个枚举,要设置多个,您可以使用循环来填充枚举。