SQLBuilder

This library provides a convenient query-by-criteria style SQL generator in the QueryBuilder. It allows out-of-order addition of elements, will map prepared statement binding values for elements (which is needed when doing outof order generation), etc.

Source code , Binary Distribution and javadocs are all available. It is presently BSD-style licensed.

Sample usage:


public List findEmployees(Map constraints) throws SQLException
{
    PreparedStatement stmt = null;
    Connection conn = null;
    try
    {
        QueryBuilder qb = QueryBuilder.select().all().from("employees e");
        Map bindings = new HashMap();
        if (constraints.containsKey("firstName"))
        {
            qb.where("e.first_name like {firstName}");
            bindings.put("firstName", "%" + constraints.get("firstName") + "%");
        }
        if (constraints.containsKey("lastName"))
        {
            qb.where("e.last_name like {lastName}");
            bindings.put("lastName", "%" + constraints.get("lastName") + "%");
        }
        if (constraints.containsKey("departmentName")
        {
            qb.leftOuterJoin("employees e", "departments d", 
                             "e.dept_id = d.id and d.name like {deptName}");
            bindings.put("deptName" "%" + constraints.get("departmentName") + "%");
        }
        Connection conn = // Obtain a connection;
        PreparedStatement stmt = conn.prepareStatement(qb.getQueryString());
        qb.bind(stmt, bindings);
        ResultSet results = stmt.executeQuery();

        List emps = new ArrayList();
        while (results.next())
        {
            emps.add(buildEmployee(ResultSet));
        }
        return Collections.unmodifiableList(emps);
    }
    finally
    {
        if (stmt != null) stmt.close();
        if (conn != null) conn.close();
    }
}