2017-11-27 21 views
0

IP 주소 (inet 데이터 유형)를 저장하는 postgres에 테이블이 있습니다. 나는 다음과 같이 질의하고 - 코드 조각 위Spring에서 SQL 캐스트를 제공하는 방법 JDBCTemplate?

NamedParameterJdbcTemplate namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(jdbcTemplate); 


    Map<String, Object> params = new HashedMap(); 
     Collection<Object> ipList = new LinkedList<>(); 
     ips.add("1.2.3.4"); 
     ips.add("5.6.7.8"); 

    namedParameterJdbcTemplate.query("select * from myTable source_ip in (:ipList)", 
      params, new RowMapper<Object>() { 
       @Nullable @Override public Object mapRow(ResultSet rs, int rowNum) throws SQLException { 
       System.out.println(rs.toString()); 
       return null; 
       } 
      }); 

나를 DB 내가 NamedParameterJdbcTemplate.class 소스 코드에보고 및 매개 변수의 데이터 형식을 지정하는 방법을 찾을 수 없습니다 No operator matches the given name and argument type(s). You might need to add explicit type casts.

을 예외 중 제공합니다.

아이디어가 있으십니까?

답변

0

지금까지 연장 된 메소드 getPreparedStatementCreatorNamedParameterJdbcTemplate에 확장하여 "?"변수에 sql 캐스트 변수를 추가했습니다. 준비된 명령문

0

에 난 당신이 매개 변수지도에 ipList을 추가 놓친 것 같아요 :

Map<String, Object> params = new HashedMap<>(); 
Collection<Object> ipList = new ArrayList<>(); 
ipList.add("1.2.3.4"); 
ipList.add("5.6.7.8"); 
params.put("ipList", ipList); 

하지만 난 사용하는 것이 좋습니다 :

MapSqlParameterSource params = new MapSqlParameterSource(); 
params.addValue("ipList", Arrays.asList("1.2.3.4", "5.6.7.8"));