    public Contact insert(Contact contact) throws SaveException {
        final String query = "INSERT INTO Contact (Contact_Name "
                + "Contact_Zip_Code, Contact_City, Contact_Street, Contact_Street_Number, "
                + "Contact_Shortcut, Contact_Phone, Contact_Fax, Contact_Mobile, Contact_Email) "
                + "VALUES (:name, :zipCode, :city, :street, :streetNumber, "
                + ":shortcut, :phone, :fax, :mobile, :email);";
        try (Connection con = DatabaseFactory.getConnection()) {
            try (NamedParameterStatement stmt = NamedParameterStatement.fromConnection(con, query)) {
                stmt.setParameter("name", contact.getName());
                stmt.setParameter("zipCode", contact.getPostCode());
                stmt.setParameter("city", contact.getCity());
                stmt.setParameter("street", contact.getStreet());
                stmt.setParameter("streetNumber", contact.getStreetNo());
                stmt.setParameter("shortcut", contact.getShortcut().orNull());
                stmt.setParameter("phone", contact.getPhone().orNull());
                stmt.setParameter("fax", contact.getFax().orNull());
                stmt.setParameter("mobile", contact.getMobile().orNull());
                stmt.setParameter("email", contact.getEmail().orNull());
                int affectedRows = stmt.executeUpdate();
                if (affectedRows != 1) {
                    throw new SaveException();
                }
                try (ResultSet generatedKeys = stmt.getGeneratedKeys()) {
                    if (generatedKeys.next()) {
                        int id = generatedKeys.getInt(1);
                        Contact inserted = new Contact(id, contact.getName(), contact.getStreet(),
                                contact.getStreetNo(), contact.getPostCode(), contact.getCity());
                        inserted.setShortcut(contact.getShortcut().orNull());
                        inserted.setPhone(contact.getPhone().orNull());
                        inserted.setFax(contact.getFax().orNull());
                        inserted.setMobile(contact.getMobile().orNull());
                        inserted.setEmail(contact.getEmail().orNull());
                        return inserted;
                    }
                    else {
                        throw new SaveException("Could not retrieve generated ID.");
                    }
                }
            }
        }
        catch (SQLException | DatabaseException e) {
            throw new SaveException(e);
        }
    }

    public Contact insert(Contact contact) throws SaveException {
        final String query = "INSERT INTO Contact (Contact_Name, "
                + "Contact_Zip_Code, Contact_City, Contact_Street, Contact_Street_Number, "
                + "Contact_Shortcut, Contact_Phone, Contact_Fax, Contact_Mobile, Contact_Email) "
                + "VALUES (:name, :zipCode, :city, :street, :streetNumber, "
                + ":shortcut, :phone, :fax, :mobile, :email);";
        try (Connection con = DatabaseFactory.getConnection()) {
            try (NamedParameterStatement stmt = NamedParameterStatement.fromConnection(con, query)) {
                stmt.setParameter("name", contact.getName());
                stmt.setParameter("zipCode", contact.getPostCode());
                stmt.setParameter("city", contact.getCity());
                stmt.setParameter("street", contact.getStreet());
                stmt.setParameter("streetNumber", contact.getStreetNo());
                stmt.setParameter("shortcut", contact.getShortcut().orNull());
                stmt.setParameter("phone", contact.getPhone().orNull());
                stmt.setParameter("fax", contact.getFax().orNull());
                stmt.setParameter("mobile", contact.getMobile().orNull());
                stmt.setParameter("email", contact.getEmail().orNull());
                int affectedRows = stmt.executeUpdate();
                if (affectedRows != 1) {
                    throw new SaveException();
                }
                try (ResultSet generatedKeys = stmt.getGeneratedKeys()) {
                    if (generatedKeys.next()) {
                        int id = generatedKeys.getInt(1);
                        Contact inserted = new Contact(id, contact.getName(), contact.getStreet(),
                                contact.getStreetNo(), contact.getPostCode(), contact.getCity());
                        inserted.setShortcut(contact.getShortcut().orNull());
                        inserted.setPhone(contact.getPhone().orNull());
                        inserted.setFax(contact.getFax().orNull());
                        inserted.setMobile(contact.getMobile().orNull());
                        inserted.setEmail(contact.getEmail().orNull());
                        return inserted;
                    }
                    else {
                        throw new SaveException("Could not retrieve generated ID.");
                    }
                }
            }
        }
        catch (SQLException | DatabaseException e) {
            throw new SaveException(e);
        }
    }
