Search code examples
sqldatabaseapiofbiz

Does Apache OFBiz delegator API support fetching list of records from database by limit or offset


Let's say we have to fetch only 5 records from a table but my where clause is matching 25k records in the database. So is there a way in ofbiz framework to just select 5 records rather than getting a list from the database and then taking just 5 from the list?

If the limit is not possible (since ofbiz API is database agnostic) what are my other alternatives?


Solution

  • I would suggest you take a look into this entity engine cookbook

    Essentially for getting limited set of rows from database you would do:

    // first get a list iterator
    productsELI = delegator.findListIteratorByCondition("Product", 
      new EntityExpr("productId", EntityOperator.NOT_EQUAL, null), 
                      UtilMisc.toList("productId"), null);
    
    // then get a partial list by count TO RETURN first 5 records
    productsELI.getPartialList(0, 5);
    
    // and finally just close the iterator
    productsELI.close();
    

    Also if you prefer to send direct SQL to your database then just do like this:

    // gets the helper (localmysql, localpostgres, etc.) for your entity group org.ofbiz
    String helperName = delegator.getGroupHelperName("org.ofbiz");
    SQLProcessor sqlproc = new SQLProcessor(helperName);
    sqlproc.prepareStatement("SELECT * FROM PARTY LMIT 0, 5");
    ResultSet rs1 = sqlproc.executeQuery();
    
    // and then get your data from ResultSet like regular JDBC