如何注册自定义类型到类型的映射



我想向JDBC注册一个自定义类型,这样当我在PreparedStatement中调用setObject时,它可以自动识别这种类型,并知道如何将类型序列化为SQL数据。

我从本教程中得到了一些线索https://docs.oracle.com/javase/tutorial/jdbc/basics/sqlcustommapping.html#implementing_sqldata,但仍有几点我不清楚:

  1. 我想注册的是org.locationtech.jts.geom.Polygon,这是第三方库中的一种类型,所以实现SQLData对我来说似乎不是一个好主意,因为我无法访问类源代码

  2. 在教程示例中,类型是按连接注册的,有没有任何方法可以全局注册此映射?

Postgres JDBC不支持SQLData,但您可以使用org.postgresql.util.PGobject。有几个参考实现,例如org.postgresql.geometric.PGpolygon。仍然需要注册每个连接。Imho这种方法对于postgres中的自定义类型没有任何意义。您应该实现从对象到字符串和从字符串到对象的对话,并在JDBC API中使用setString/getString方法。例如,对于自定义类型的字符串对create type string_pair AS (first text, second text);,Postgres字符串将为:"('string1', 'string2')"(不要忘记转义此字符串中的符号(。稍后您可以写入:"insert into ...(?::string_pair, ..."并通过preparedStmt.setString(1, convertToStr(myPair));设置值

最新更新