2010-06-20 15 views
7

Uno de mi tabla tiene el tipo de columna como inet. Y cuando trato de realizar una operación de inserción usando String como el tipo para la columna inet, está diciendo que "column" ip "es de tipo inet pero la expresión es de tipo character variando:", que es una excepción perfectamente válida. Ahora, mi pregunta es cómo le pido a jdbcTemplate que use el tipo de entrada en lugar de String. Estoy intentando algo como:Tipo de datos JdbcTemplate y inet

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

El tipo de entrada no está en la clase de Tipos, ¿qué debo pasar?

P.S. Estoy usando PostgresSql versión 8.4.4.

Respuesta

3

Debería usar Typer.OTHER para permitir que postgresql intente inferir el tipo correcto.

Puede agregar "stringtype = unspecified" a los parámetros de conexión JDBC. Esto le indica al conductor que deje que el postgres intente inferir el tipo correcto.

Una tercera posibilidad es la subclase PGobject. En un controlador anterior, se proporcionaba una subclase PGinet, pero aparentemente el soporte para esto se descartaba por una razón u otra. Los tipos geométricos todavía están presentes, pero los tipos de red ya no están en el paquete de controladores, creo.

6

Una posibilidad es añadir una operación de fundición alrededor del marcador de posición en su SQL, por ejemplo:

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

Esto convierte la dirección IP del texto a la INET de servidor en lugar, por lo que cualquier error de alrededor de un mal-formateado La dirección deberá decodificarse desde el servidor ... o simplemente validarla antes de insertarla y esperar.

Cuestiones relacionadas