@Override
	public Iterable<Borrower> findBorrowers(SearchFilter filter) {
		Statement stmt = null;
		List<Borrower> borrowers = new LinkedList<Borrower>();
		try {
			stmt = con.createStatement();
			String constraints = "";
			for (String attributeName : filter.getAttributeNames()) {
				if (attributeName.equals("IssuerID")) {
					constraints += attributeName + " = " + "'"
							+ filter.getValueForAttribute(attributeName) + "'"
							+ " AND ";
				} else {
					constraints += attributeName + " LIKE " + "'%"
							+ filter.getValueForAttribute(attributeName) + "%'"
							+ " AND ";
				}
			}
			constraints = constraints.substring(0, constraints.length() - 5);
			ResultSet results = stmt
					.executeQuery("Select * from Borrower where " + constraints);
			while (results.next()) {
				String borrowerID = results.getString("IssuerID");
				String forename = results.getString("Forename");
				String surname = results.getString("Surname");
				String email = results.getString("Email");
				borrowers.add(factory.createBorrower(borrowerID, surname,
						forename, email));
			}
			return borrowers;
		} catch (SQLException e) {
			e.printStackTrace();
			return borrowers;
		} finally {
			if (stmt != null) {
				try {
					stmt.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
	}