2010-06-20 51 views
7

我的一个表的列类型为inet。当我尝试使用String作为inet列的类型执行插入操作时,它说“列”ip“是inet类型的,但表达式的类型是character varying:”,这是完全有效的异常。 现在,我的问题是我如何指示jdbcTemplate使用inet类型而不是String。我正在尝试类似于:JdbcTemplate和inet数据类型

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

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

P.S.我正在使用PostgresSql 8.4.4版。

回答

3

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

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

第三种可能性是PGobject的子类。在较老的驱动程序中,提供了这样一个子类PGinet,但显然由于某种原因,对此的支持已经下降。几何类型仍然存在,但我认为网络类型不再在驱动程序包中。

6

一种可能性是在SQL周围添加占位符转换操作,如:

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

此IP地址从文本转换为INET服务器端,而不是,所以关于严重,格式化任何错误地址将不得不从服务器解码...或者在插入和希望之前验证它。