10

我的一张表的列类型为 inet。当我尝试使用 String 作为 inet 列的类型执行插入操作时,它说“列“ip”的类型是 inet,但表达式的类型是字符变化:”,这是完全有效的例外。现在,我的问题是如何指示 jdbcTemplate 使用 inet 类型而不是 String。我正在尝试类似的东西:

MapSqlParameterSource params = new MapSqlParameterSource();
params.addValue("ip",new SqlParameterValue(Types.??, conn.getIPAddress()));

inet 类型未列​​在 Types 类中,我应该通过什么?

PS 我使用的是 PostgresSql 版本 8.4.4。

4

2 回答 2

10

一种可能性是在 sql 中的占位符周围添加强制转换操作,例如:

insert into t(ip) values(?::inet)

这会将 IP 地址从文本转换为 inet 服务器端,因此任何有关格式错误的地址的错误都必须从服务器解码......或者只是在插入之前验证它并希望。

于 2010-06-20T21:45:27.000 回答
3

您应该使用 Typer.OTHER 让 postgresql 尝试推断正确的类型。

您可以将“stringtype=unspecified”添加到 JDBC 连接参数。这指示驱动程序让 postgres 尝试推断正确的类型。

第三种可能性是对 PGobject 进行子类化。在较旧的驱动程序中,提供了这样的子类 PGinet,但显然出于某种原因放弃了对此的支持。我认为几何类型仍然存在,但网络类型不再包含在驱动程序包中。

于 2010-06-20T19:42:49.200 回答