public void put(Iterable<Address> addresses) { try { List<String> addressValues = new ArrayList<String>(BATCH_SIZE); for (Address address : addresses) { addressValues.add( "(" + cleanEscapeQuote(address.getId()) + ", 'POINT (" + address.getLon() + " " + address.getLat() + ")', " + cleanEscapeQuote(address.getCountry()) + "," + cleanEscapeQuote(address.getPostcode()) + "," + cleanEscapeQuote(address.getA1()) + "," + cleanEscapeQuote(address.getA2()) + "," + cleanEscapeQuote(address.getA3()) + "," + cleanEscapeQuote(address.getStreet()) + "," + cleanEscapeQuote(address.getHouse()) + ")"); if (addressValues.size() >= BATCH_SIZE) { execute( "INSERT INTO address (id, point, country, postcode, a1, a2, a3, street, house) VALUES " + StringUtils.join(addressValues, ", ")); addressValues.clear(); } } if (!addressValues.isEmpty()) { execute( "INSERT INTO address (id, point, country, postcode, a1, a2, a3, street, house) VALUES " + StringUtils.join(addressValues, ", ")); } } catch (SQLException e) { throw new RuntimeException("Could not insert address into repository!", e); } }