在一個大集合中過濾獲取其中部分數據是很常見的需求,我們可以通過JoSQL查詢來實現。
舉例:
Query q = new Query();
q.parse("select * from ExchangeRate where fromCurrency = :fromCurrency and toCurrency = :toCurrency and fromDate <= :when and thruDate >= :when");
q.setVariable("fromCurrency", fromCurrency);
q.setVariable("toCurrency", toCurrency);
q.setVariable("when", date);
return q.execute(getAllExchangeRates()).getResults().get(0).getRate();
和SQL的查詢方式非常類似,這只是一個JoSQL最簡單的功能,在它的文檔裏http://josql.sourceforge.net/manual/examples.html中還可以看到Order,Grouping,Execute On等特性。
JoSQL(SQL for Java Objects)爲Java開發者提供運用SQL語句來操作Java對象集的能力.利用JoSQL可以像操作數據庫中的數據一樣對任何Java對象集進行查詢,排序,分組。比如要查找所有在2004年12月修改過的Html文件:
加個應用的例子:
List<String> names=new ArrayList<String>(); String[] n={"Burke", "Connor", "Frank", "Everett", "Albert", "George", "Harris", "David" }; Collections.addAll(names, n); Query q=new Query(); List<String> results = null; try { q.parse("select * from java.lang.String where length=5"); results = (List<String>)q.execute(names).getResults(); } catch (QueryParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (QueryExecutionException e) { // TODO Auto-generated catch block e.printStackTrace(); } for(String name:results) { System.out.println(name); }
補充:java.lang.NoClassDefFoundError: com/gentlyweb/utils/Getter
at org.josql.expressions.Accessor.init(Accessor.java:55)
at org.josql.expressions.SelectItemExpression.init(SelectItemExpression.java:71)
at org.josql.Query.initSelect(Query.java:2485)
at org.josql.Query.init(Query.java:2410)
at org.josql.Query.parse(Query.java:2337)
at jUnit.TestUnit2.testJoSQL02(TestUnit2.java:110)
at jUnit.TestUnit2.testUnit01(TestUnit2.java:134)
.............................................................
這是我在初學時遇到的問題 在網上翻閱了半天也沒找到答案,最終還是在一個英文帖子上找到了答案
原來在用JoSQL時除了需要JoSQL-2.0.jar還需要gentlyWEB-utils-1.1.jar