Мое требование состоит в том, чтобы удалить данные из базы данных, но строки, которые мне нужно передать в запрос DELETE, генерируются динамически, поэтому я должен сначала собрать данные, а затем использовать их в цикле for, который будет отправлять запрос DELETE несколько раз.
Мои шаги до сих пор:
Сначала я отфильтровал список, чтобы собрать список необходимых элементов в переменную. Я получил ожидаемый результат:
List<String> newFilter = allProductNames.stream().filter(field -> field.startsWith("sample", 1)).collect(Collectors.toList());
System.out.println(newFilter)
Выход:
"sample1", "sample2", "sample3", "sample4"
Теперь я хочу использовать каждый из элементов для отправки запроса в базу данных Neo4j, используя запрос — DROP DATABASE <database_name> wait;, где <database_name> будет заменен каждым из моих собранных элементов. Таким образом, запросы будут выглядеть так:
DROP DATABASE sample1 wait;
DROP DATABASE sample2 wait;
DROP DATABASE sample3 wait;
DROP DATABASE sample4 wait;
DROP DATABASE sample5 wait;
Что сразу приходит мне на ум, так это то, что цикл for может помочь мне повторно отправить запрос, передав sample1 в первом запросе, sample2 во втором запросе... и так далее, но моя дилемма в том, что я теряюсь в том, как добиться этого.
Я пробовал что-то вроде этого, но это не сработает:
List<String> newFilter = allProductNames.stream().filter(field -> field.startsWith("sample", 1)).collect(Collectors.toList());
int filterSize = newFilter.size();
int i = 0;
String dropDatabase = "DROP DATABASE " + i + " wait;"; //i want to pass the element as a variable here
for (; i < filterSize ; i++) {
basePage.queryInputField.sendKeys(dropDatabase);
}
Что я пытался сделать в цикле, так это передать make i = sample1 при первом прогоне, i = sample2 при втором прогоне и так далее, но i — это int, и я считаю, что только int можно передать в условие, насколько мой маленький Знание Java.
Как я могу передать Stringsample1 в цикл при первом запуске, чтобы добиться этого - DROP DATABASE sample1 wait; и передать другие элементы в последующих запусках? Я открыт для любого другого подхода, который может помочь мне достичь этого.




Попробуй это:
for (String dbName : newFilter) {
String dropDatabase = "DROP DATABASE " + dbName + " wait;";
basePage.queryInputField.sendKeys(dropDatabase);
}
Это не работает, потому что вы не обновляете строку dropDatabase в любой момент цикла.
У вас есть два варианта: используйте a для каждого или a для обновления строки:
for (int i = 0; i < filterSize; i++) {
basePage.queryInputField.sendKeys("DROP DATABASE " + newFilter.get(i) + " wait;");
}
for (String database : newFilter) {
basePage.queryInputField.sendKeys("DROP DATABASE " + database + " wait;");
}
Или, если вы хотите разделить строку запроса, вы также можете использовать такой формат:
String format = "DROP DATABASE %s wait;";
for (String database : newFilter) {
basePage.queryInputField.sendKeys(String.format(format, database));
}
Почему бы вам не использовать ListIterator? Гораздо проще.