Я пытаюсь сгенерировать динамический запрос в java, мне нужно создать ту же таблицу Cos_Class_Allocation
, а также те же столбцы class_name = ? AND CLASS_ALLOCATION = ?
. Как я могу очистить свой код в циклах, которые я заметил, я объявляю alloc, но не вызывал его, есть ли лучший способ писать циклы, а также как удалить последнюю запятую из первого цикла foreach и, наконец, удалить последний «And "из второго цикла foreach.Создайте динамический запрос в java с помощью строкового построителя
мой запрос должен выглядеть следующим образом:
SELECT * FROM TRAFFIC_PROFILE
WHERE COS_MODEL = 'cos4' AND DIRECTION = 'Egress'
AND (PE_INGRESS_FLAG = 'Y' OR PE_EGRESS_FLAG = 'Y')
and TRAFFIC_PROFILE_ID IN (
select distinct (C1.Traffic_PROFILE_ID) from Cos_Class_Allocation C1,
Cos_Class_Allocation C2, Cos_Class_Allocation C3,
Cos_Class_Allocation C4, Cos_Class_Allocation C5, Cos_Class_Allocation C6
where c1.class_name = ? AND c1.CLASS_ALLOCATION = ?
and c2.class_name = ? AND c2.CLASS_ALLOCATION = ?
and c3.class_name = ? AND c3.CLASS_ALLOCATION = ?
and c4.class_name = ? AND c4.CLASS_ALLOCATION = ?
and c5.class_name = ? AND c5.CLASS_ALLOCATION = ?
and c6.class_name = ? AND c6.CLASS_ALLOCATION = ?
and C1.TRAFFIC_PROFILE_ID = c2.TRAFFIC_PROFILE_ID
and C1.TRAFFIC_PROFILE_ID = c3.TRAFFIC_PROFILE_ID
and C1.TRAFFIC_PROFILE_ID = c4.TRAFFIC_PROFILE_ID
and C1.TRAFFIC_PROFILE_ID = c5.TRAFFIC_PROFILE_ID
and C1.TRAFFIC_PROFILE_ID = c6.TRAFFIC_PROFILE_ID) ;
код:
private String buildTrafficProfileByCosClassAllocationQuery(TrafficProfileExtension.CosModel cosModel, Direction direction, List<ClassOfServiceAllocation> cosAllocation, RouterType routerType){
StringBuilder builder = new StringBuilder();
builder.append(queryByDirectionRouterTypeAndCosClassAllocation);
builder.append(buildRouterQuery(routerType));
builder.append("and TRAFFIC_PROFILE_ID IN (select distinct (C1.Traffic_PROFILE_ID) from ");
// builder.append(buildCosModelQuery(cosModel));
int i = 1;
for(ClassOfServiceAllocation alloc : cosAllocation){
builder.append(" Cos_Class_Allocation c" + i++ +",");
}
builder.append(" where " );
int n = 1;
int a =1;
for(ClassOfServiceAllocation alloc : cosAllocation){
builder.append("c" + n++ + ".class_name = ? AND c" + a++ + ".CLASS_ALLOCATION = ? AND ");
}
int tp = 2;
for(ClassOfServiceAllocation alloc : cosAllocation){
builder.append("and C1.TRAFFIC_PROFILE_ID = c" + tp++ + ".TRAFFIC_PROFILE_ID ");
}
return builder.toString();
}
это ниже выход: (У меня есть дополнительный AND
и дополнительное после последней таблицы comma
)
SELECT * FROM TRAFFIC_PROFILE
WHERE COS_MODEL = ? AND DIRECTION = ?
AND (PE_INGRESS_FLAG = 'Y' OR PE_EGRESS_FLAG = 'Y')
and TRAFFIC_PROFILE_ID IN (
select distinct (C1.Traffic_PROFILE_ID)
from Cos_Class_Allocation c1, Cos_Class_Allocation c2,
Cos_Class_Allocation c3, Cos_Class_Allocation c4,
Cos_Class_Allocation c5, Cos_Class_Allocation c6,
where c1.class_name = ? AND c1.CLASS_ALLOCATION = ?
AND c2.class_name = ? AND c2.CLASS_ALLOCATION = ?
AND c3.class_name = ? AND c3.CLASS_ALLOCATION = ?
AND c4.class_name = ? AND c4.CLASS_ALLOCATION = ?
AND c5.class_name = ? AND c5.CLASS_ALLOCATION = ?
AND c6.class_name = ? AND c6.CLASS_ALLOCATION = ?
AND and C1.TRAFFIC_PROFILE_ID = c2.TRAFFIC_PROFILE_ID
and C1.TRAFFIC_PROFILE_ID = c3.TRAFFIC_PROFILE_ID
and C1.TRAFFIC_PROFILE_ID = c4.TRAFFIC_PROFILE_ID
and C1.TRAFFIC_PROFILE_ID = c5.TRAFFIC_PROFILE_ID
and C1.TRAFFIC_PROFILE_ID = c6.TRAFFIC_PROFILE_ID
Не могли бы вы высказать свой код. –
только что опубликовал код – Gio
Вызывает ли приведенный выше код правильную строку? Если это так, вы должны перейти в CodeReview.stackexchange –