2010-06-20 12 views
7

Jedna z moich tabel ma typ kolumny jako inet. I kiedy próbuję wykonać operację wstawiania używając String jako typu dla kolumny inet, mówi się, że "kolumna" ip "jest typu inet, ale wyrażenie jest typu zmiennego:", co jest absolutnie ważnym wyjątkiem. Teraz moje pytanie brzmi: jak polecić jdbcTemplate, aby używał typu inet zamiast String. Próbuję coś takiego:JdbcTemplate i typ danych inet

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

Typ inet nie jest wymieniony w klasie typów, co mam przejść?

P.S. Używam PostgresSql w wersji 8.4.4.

Odpowiedz

3

Powinieneś użyć typer.OTHER, aby postgresql próbował wywnioskować odpowiedni typ.

Możesz dodać "stringtype = unspecified" do parametrów połączenia JDBC. To instruuje kierowcę, aby postgres spróbował wywnioskować odpowiedni typ.

Trzecią możliwością jest podklasa PGobject. W starszym sterowniku taka podklasa PGinet była dostarczana, ale najwyraźniej obsługa tego została z tego czy innego powodu zrzucona. Geometryczne typy wciąż są obecne, ale typy sieci nie są już w pakiecie sterowników, jak sądzę.

6

Jedną z możliwości jest dodanie operacji Płynny wokół zastępczego w SQL, np:

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

ta zamienia adres IP z tekstem do Inet po stronie serwera, a nie, więc wszelkie błędy Około źle sformatowany adres będzie musiał zostać zdekodowany z serwera ... lub po prostu go zweryfikować przed wstawieniem i nadzieją.

Powiązane problemy