JdbcTemplate和inet数据类型

Ami*_*yal 9 postgresql jdbctemplate

我的一个表的列类型为inet.当我尝试使用String作为inet列的类型执行插入操作时,它表示"column"ip"属于inet类型,但表达式的类型为字符变化:",这是完全有效的异常.现在,我的问题是如何指示jdbcTemplate使用inet类型而不是String.我正在尝试这样的事情:

MapSqlParameterSource params = new MapSqlParameterSource();
params.addValue("ip",new SqlParameterValue(Types.??, conn.getIPAddress()));
Run Code Online (Sandbox Code Playgroud)

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

PS我正在使用PostgresSql版本8.4.4.

ara*_*nid 8

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

insert into t(ip) values(?::inet)
Run Code Online (Sandbox Code Playgroud)

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


Pet*_*ans 3

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

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

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