在一个大集合中过滤获取其中部分数据是很常见的需求,我们可以通过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