@Override
	protected List<Fingerprint> get(String constraint) {
		List<Fingerprint> res = new ArrayList<Fingerprint>();
		
		String sql = getSelectSQL();
		if (constraint != null && constraint.length() > 0) sql += " WHERE " + constraint;
		String order = getOrder();
		if (order != null && order.length() > 0) sql += " ORDER BY " + order;
		
		
		log.finest(sql);
		ResultSet rs = null;
		Statement stat = null;
		try {
			stat = db.getConnection().createStatement();
			rs = stat.executeQuery(sql);
			boolean first = true;
			while(!rs.isAfterLast()) {
				/*
				 * only advance cursor the first time, because the reading vector homes (WiFiReadingVectorHome#parseResultRow(), ...)
				 * do advance the cursor one row to far to know whether there are all reading of that type fetched.
				 * If we advance the cursor one more time here, we miss one row.
				 * Unfortunately we can't go one row back (would be a cleaner solution) because the SQLite driver does only support forward cursors
				 */
				
				if(first) {
					if(!rs.next()) {
						//empty result set
						break;
					}
					first = false;
				}

				res.add(parseResultRow(rs));
			}
		} catch (SQLException e) {
			log.log(Level.SEVERE, "get failed: " + e.getMessage(), e);
		} finally {
			try {
				if (rs != null) rs.close();
				if (stat != null) stat.close();
			} catch (SQLException es) {
				log.log(Level.WARNING, "failed to close ResultSet: " + es.getMessage(), es);
			}
		}
		
		return res;
	}