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

這可以實現嗎?,我可以動態地決定約束,從()或()開始嗎?如果是的話,我們該怎麼做呢?動態SELECT和WHERE子句的apache metamodel queryConstraints

+0

任何人都可以指導我做...! – peaceUser

回答

1

例子:

// 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

嗨托馬斯,動態我的意思是,不控制「snippetTableName1」,新的字符串[] {「id」,「名稱」},絃樂[] {.....}。在這種情況下! – peaceUser

+0

對不起,但我不明白你的意思。也許顯示一些用例,你想實現什麼,以及什麼阻止你實現... – TomaszGuzialek

+0

今天我只有id和name,tmrw,它可以更改爲100列,如何處理它... !我是否必須始終手動更改代碼?.. !! – peaceUser

相關問題