Thursday, June 25, 2009

Weekly Source Code: LINQ for Java Part 2

I hope everybody had a nice week, even if the winter is upon us - freezing cold with rain etc. Time to get the blankets / heaters out.

Last week I introduced JoSQL, this week I continue to show a sample JoSQL query... we start off with a keep it simple (KISS) sample with some points to remember.

Sample Query:

The goal of this JoSQL query is to get a list of contracts that all have a given product:

List contracts = .... // here we get a list of contracts

Query q = new Query();
q.parse("select * from com.sales.Contract where productId = :p");
q.setVariable("p", 5);
QueryResults qr = q.execute(contracts);
List contractResult = qr.getResults ();
  1. All JoSQL classes are kept in the org.josql package, Eclipse IDE will import these nicely for you.
  2. We start by creating a Query object instance this is where our query starts.
  3. q.parse will check your query for any issues, an exception will occure if the query is incorrect. Note that we need to provide the full package location of our Contract class else JoSQL wouldn't find the class. This can cause a problem if you refactor your code, like move the Contract class to a different package location but don't update the JoSQL query.
  4. The following line we set the :p variable using setVariable method.
  5. We then execute the query and put the results into qr which is an instance of QueryResults.
  6. contractResult will contain the result.
JoSQL uses reflection so "productId" in the query is a getter method like "getProductId()" on the Contract class.

Friday, June 19, 2009

Weekly Source Code: LINQ for Java

Its been a long couple of weeks due to my current work load, working average 12 hours+ per day isn't fun. So I finally got some free time over a lunch break to continue with my weekly source code.

At work Java is our main programming language but its not so advance like C# (not to start a language war here!) one of them are LINQ but LINQ is also available in Java!


What Is LINQ?

Language Integrated Query (LINQ) was added to C# 3.0 / VB.Net 9.0 in MS Visual Studio.Net 2008. Its a query language part of the underline language for easy query of information like a database, online resources like a webservice or in our case collections (list, arrays, hashmaps etc). Different LINQ providers existing for collections, databases, Amazon, Facebook, Twitter, LDAP etc. Visit Wikipedia for more about LINQ.

Let's Meet: JoSQL

JoSQL is LINQ for Java that allow you to easily query collections (lists, arrays etc) using a SQL line syntax.

References

Disadvantages:

  • No compile time checking since the LINQ code will only be evaluated when query.parse() method get called at run-time.
  • You need to indicate the full package + class name in your query
  • If you wish to use "NOT IN" or "IN" in the WHERE clause then you need to override the toString() method of the class since it needs to know which field to use to do the comparison with.

I will write more JoSQL samples in the next weekly source code. Also my solution to the toString() problem.