Вот как я решил это в своем приложении. В идеале вы должны использовать StringBuilder вместо использования + для строк.
String inParenthesis = "(?";
for(int i = 1;i < myList.size();i++) {
inParenthesis += ", ?";
}
inParenthesis += ")";
try(PreparedStatement statement = SQLite.connection.prepareStatement(
String.format("UPDATE table SET value='WINNER' WHERE startTime=? AND name=? AND traderIdx=? AND someValue IN %s", inParenthesis))) {
int x = 1;
statement.setLong(x++, race.startTime);
statement.setString(x++, race.name);
statement.setInt(x++, traderIdx);
for(String str : race.betFair.winners) {
statement.setString(x++, str);
}
int effected = statement.executeUpdate();
}
Использование переменной типа x выше вместо конкретных чисел помогает много, если вы решите изменить запрос позже.
Чтобы проверить строковое значение (не имя свойства) для RegEx, вы должны использовать ключевое слово "pattern"
:
{
"type": "object",
"properties": {
"progBinaryName": {
"type": "string",
"pattern": "^[A-Za-z0-9 -_]+_Prog\\.(exe|EXE)$"
}
}
}
P.S. - если вы хотите, чтобы шаблон соответствовал клавише для свойства (а не значения), вы должны использовать "patternProperties"
(это похоже на "properties"
, но клавиша - RegEx).
Синтаксис вашей схемы JSON неверен. Измените
"patternProperties": {
"progBinaryName": "^[A-Za-z0-9 -_]+_Prog\\.(exe|EXE)$"
}
на
"patternProperties": {
"^[A-Za-z0-9 -_]+_Prog\\.(exe|EXE)$": {}
}