2010-06-20 3 views
7

L'une de mes tables contient le type de colonne inet. Et quand j'essaie d'effectuer une opération d'insertion en utilisant String comme type pour une colonne inet, on dit que "column" ip "est de type inet mais l'expression est de type character variant:", ce qui est une exception parfaitement valide. Maintenant, ma question est comment puis-je demander à jdbcTemplate d'utiliser le type inet au lieu de String. J'essaie quelque chose comme:JdbcTemplate et type de données inet

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

Le type inet ne figure pas dans la classe Types, que dois-je passer?

P.S. J'utilise PostgresSql version 8.4.4.

Répondre

3

Vous devez utiliser Typer.OTHER pour permettre à postgresql de déduire le bon type.

Vous pouvez ajouter "stringtype = unspecified" aux paramètres de connexion JDBC. Cela demande au pilote de laisser postgres essayer de déduire le bon type.

Une troisième possibilité est de sous-classer PGobject. Dans un pilote plus ancien, une telle sous-classe était fournie par PGinet, mais apparemment le support pour cela a été abandonné pour une raison ou une autre. Les types géométriques sont toujours présents, mais les types de réseaux ne sont plus dans le package de pilotes, je pense.

6

Une possibilité est d'ajouter une opération de coulée dans l'espace réservé dans votre sql, par exemple:

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

Cette convertit l'adresse IP du texte INET au lieu côté serveur, de sorte que toute erreur sur un mal formaté l'adresse devra être décodée du serveur ... ou juste la valider avant de l'insérer et espérer.

Questions connexes