private static Map saveSites(ExchSite3[] sites, int siteType, int sourceID, Connection c) throws SQLException { PreparedStatement insert = null; PreparedStatement delete = null; try { insert = c.prepareStatement( "insert into dat_customer_sites (site_id, site_type, source_id, internal_name, display_name) " + "values (?, ?, ?, ?, ?)"); delete = c.prepareStatement("delete from dat_customer_sites where site_id = ?"); Map siteIDs = new HashMap(sites.length * 2 + 1); for (int i = 0; i < sites.length; i++) { ExchSite3 site = sites[i]; int siteID = queryLookupSiteId(sourceID, site.getInternalName(), siteType, c); if (siteID == 0) { // if we couldn't find an existing siteID, grab the next one from the sequence siteID = getNextFromSequence("seq_site_id", c); } else { // if there is an existing siteID, delete it so we can insert the changes delete.setInt(1, siteID); int deleted = delete.executeUpdate(); if (deleted != 1) { throw new SQLException("Delete for siteID " + siteID + " returned " + deleted); } } siteIDs.put(site.getInternalName(), siteID); insert.setInt(1, siteID); insert.setInt(2, siteType); insert.setInt(3, sourceID); insert.setString( 4, DirectoryUtils.truncateString(site.getInternalName(), DB_SITE_INTERNALNAME_LENGTH)); insert.setString( 5, DirectoryUtils.truncateString(site.getDisplayName(), DB_SITE_DISPLAYNAME_LENGTH)); insert.executeUpdate(); } return siteIDs; } finally { if (delete != null) { delete.close(); } if (insert != null) { insert.close(); } } }