1 package search.db;
2 
3 import util.ConnectionUtil;
4 import util.SearchUtil;
5 import util.TableOperations;
6 import chemaxon.jchem.db.JChemSearch;
7 import chemaxon.sss.SearchConstants;
8 import chemaxon.sss.formula.FormulaSearch;
9 import chemaxon.sss.search.JChemSearchOptions;
10import chemaxon.util.ConnectionHandler;
11
12/**
13 * Example code for searching in database.
14 * 
15 * @author JChem Base team, ChemAxon Ltd.
16 */
17public final class DatabaseSearchExample {
18
19    private static final String TABLE_NAME = "demo";
20
21    private ConnectionHandler connHandler;
22
23    public static void main(String[] args) {
24        try {
25            new DatabaseSearchExample().run();
26        } catch (Exception e) {
27            e.printStackTrace();
28        }
29    }
30
31    private void run() throws Exception {
32        connHandler = ConnectionUtil.connectToDB();
33        try {
34            TableOperations.setupMoleculeTable(connHandler, TABLE_NAME);
35            runSearches();
36        } finally {
37            ConnectionUtil.closeConnection(connHandler);
38        }
39    }
40
41    private void runSearches() {
42
43        // Initialize a JChemSearch object and search options
44        JChemSearch jcs = new JChemSearch();
45        jcs.setConnectionHandler(connHandler);
46        jcs.setStructureTable(TABLE_NAME);
47        String queryStructure = "CCNCC";
48        jcs.setQueryStructure(queryStructure);
49        JChemSearchOptions searchOpts = new JChemSearchOptions(SearchConstants.SUBSTRUCTURE);
50        jcs.setSearchOptions(searchOpts);
51
52        System.out.println("Searching: " + queryStructure);
53        // Execute search and print results
54        search(jcs);    // --> several hits
55
56        // Change N to N+ in the query and re-run search
57        queryStructure = "CC[N+]CC";
58        jcs.setQueryStructure(queryStructure);
59        System.out.println("Searching: " + queryStructure);
60        search(jcs);    // --> only a few hits
61
62        // Change search options to ignore charges
63        searchOpts.setChargeMatching(SearchConstants.CHARGE_MATCHING_IGNORE);
64        System.out.println("Searching: " + queryStructure + " with charge ignore");
65        jcs.setSearchOptions(searchOpts);
66        search(jcs);    // --> several hits again
67
68        // Note: you can also use getSearchOptions():
69        // jcs.getSearchOptions().setChargeMatching(...);
70
71        searchOpts.setFormulaSearchType(FormulaSearch.SUBFORMULA);
72        searchOpts.setFormulaSearchQuery("C10N1");
73        System.out.println("Searching: " + queryStructure
74                + " with charge ignore and formula query");
75        jcs.setSearchOptions(searchOpts);
76        search(jcs);
77
78    }
79
80    /**
81     * Runs the database search and lists results.
82     */
83    private void search(JChemSearch jcs) {
84        try {
85            jcs.run();
86            int[] results = jcs.getResults();
87            SearchUtil.printSearchResults(results);
88        } catch (Exception e) {
89            System.err.println("Unexpected error during DB search!");
90            e.printStackTrace();
91        }
92    }
93
94}
95