2016-05-24 1 views
0
DataSet dataSet = datacontext.query() 
    .from(table) 
    .select(colNameArr) 
    .where(frstCol).eq(dynamicval1).and("").eq("").or("").eq("")....etc 
    .execute(); 

Cela peut-il être réalisé ?, Puis-je déterminer dynamiquement la contrainte, en commençant par() ou()? si oui, comment pouvons-nous le faire?apache metamodel queryConstraints

+0

quelqu'un peut me guider pour le faire ... !! – peaceUser

Répondre

1

Exemple de clauses SELECT dynamiques et où:

// Prepare a data context based on plain old Java objects 
    List<TableDataProvider<?>> tableDataProviders = new ArrayList<TableDataProvider<?>>(); 
    SimpleTableDef tableDef1 = new SimpleTableDef("snippetTableName1", new String[] {"id", "name"}); 
    tableDataProviders.add(new ArrayTableDataProvider(tableDef1, 
      new ArrayList<Object[]>())); 
    PojoDataContext dataContext = new PojoDataContext("snippetSchemaName", tableDataProviders); 

    // Add some rows 
    dataContext.executeUpdate(new UpdateScript() { 

     public void run(UpdateCallback callback) { 
      callback.insertInto("snippetTableName1").value("id", "id1").value("name", "name1").execute(); 
      callback.insertInto("snippetTableName1").value("id", "id2").value("name", "name2").execute(); 
     } 
    }); 

    // Prepare dynamic query 
    String[] selectArray = new String[2]; 
    selectArray[0] = "id"; 
    selectArray[1] = "name"; 

    Map<String, Object> whereClauses = new HashMap<String, Object>(); 
    whereClauses.put("id", "id1"); 
    whereClauses.put("name", "name1"); 

    SatisfiedSelectBuilder<?> queryBuilder = dataContext.query().from("snippetTableName1").select(selectArray); 
    SatisfiedWhereBuilder<?> whereBuilder = null; 

    int i = 0; 
    for (Map.Entry<String, Object> whereClause: whereClauses.entrySet()) { 
     if (i == 0) { 
      whereBuilder = queryBuilder.where(whereClause.getKey()).eq(whereClause.getValue()); 
     } else { 
      whereBuilder = whereBuilder.and(whereClause.getKey()).eq(whereClause.getValue()); 
     } 
     i++; 
    } 

    DataSet dataSet = whereBuilder.execute(); 

    while (dataSet.next()) { 
     Row row = dataSet.getRow(); 
     System.out.println("Row: " + row); 
    } 
+0

Salut Tomas, dynamique ce que je veux dire est, aucun contrôle sur "snippetTableName1", nouvelle chaîne [] {"id", "nom"}, chaîne [] {.....}. Dans ce cas! .. – peaceUser

+0

Désolé, mais je ne comprends pas ce que vous voulez dire. Peut-être montrer un cas d'utilisation, qu'est-ce que vous voulez réaliser et qu'est-ce qui vous empêche d'atteindre cela ... – TomaszGuzialek

+0

aujourd'hui je n'ai que l'ID, et le nom, tmrw, il peut changer à 100 de colonnes, comment le gérer ... ! dois-je changer manuellement les codes tout le temps? – peaceUser