Implement a Native Query

Listing 3. The ContactDetailQuery class's match() method drives the query. Notice that the method is written in plain old Java, allowing us to create arbitrarily complex queries.

/*
 *  The ContactDetailQuery class performs the
 *  native query on the database
 */
import com.db4o.*;
import com.db4o.query.*;

public class ContactDetailQuery extends Predicate
{
  // Criteria static strings taken from BaseView
  private static final String NAME = "N";
  private static final String PHONE = "TEL";
  private static final String ORG = "ORG";
  private static final String EMAIL = "EMAIL";

  private String searchCriterion; 
    // Identifies which query
  private String searchString; 
    // String to search for

  // Constructor
  public ContactDetailQuery()
  {
  }

  public boolean match(ContactDetail _contactdetail)
  {
    // Search based on telephone
    if(searchCriterion.equals(PHONE))
  return((_contactdetail.getMobileTel().equals(
    searchString)) ||
    (_contactdetail.getHomeTel().equals(
      searchString)) ||
    (_contactdetail.getWorkTel().equals(
      searchString)) ||
    (_contactdetail.getFaxTel().equals(
      searchString)));

    // Search based on company
    if(searchCriterion.equals(ORG))
  return(_contactdetail.getCompany().equals(
    searchString));

    // Search Based on email
    if(searchCriterion.equals(EMAIL))
  return(_contactdetail.getEmail().equals(
    searchString));

    // Make NAME the default search criterion
    return((_contactdetail.getName().equals(
      searchString)) ||
  (_contactdetail.getSurname().equals(
    searchString)));
  }

  // Set the search criterion
  public void setSearchCriterion(
    String _searchCriterion)
  {  searchCriterion = _searchCriterion; }

  // Set the search string
  public void setSearchString(String _searchString)
  {  searchString = _searchString;  }
}