Хотя мне нравятся регулярные выражения в целом, для такого рода токенизации, зависящей от состояния, я считаю, что простой синтаксический анализатор (который в этом случае намного проще, чем это может сделать звук), вероятно, является более чистым решением, в частности с относится к ремонтопригодности, например:
String input = "foo,bar,c;qual=\"baz,blurb\",d;junk=\"quux,syzygy\"";
List<String> result = new ArrayList<String>();
int start = 0;
boolean inQuotes = false;
for (int current = 0; current < input.length(); current++) {
if (input.charAt(current) == '\"') inQuotes = !inQuotes; // toggle state
boolean atLastChar = (current == input.length() - 1);
if(atLastChar) result.add(input.substring(start));
else if (input.charAt(current) == ',' && !inQuotes) {
result.add(input.substring(start, current));
start = current + 1;
}
}
Если вы не заботитесь о сохранении запятых внутри кавычек, вы можете упростить этот подход (без обработки начального индекса, no последнего символа особый случай), заменив запятые в кавычках на что-то еще, а затем разделив запятыми:
String input = "foo,bar,c;qual=\"baz,blurb\",d;junk=\"quux,syzygy\"";
StringBuilder builder = new StringBuilder(input);
boolean inQuotes = false;
for (int currentIndex = 0; currentIndex < builder.length(); currentIndex++) {
char currentChar = builder.charAt(currentIndex);
if (currentChar == '\"') inQuotes = !inQuotes; // toggle state
if (currentChar == ',' && inQuotes) {
builder.setCharAt(currentIndex, ';'); // or '♡', and replace later
}
}
List<String> result = Arrays.asList(builder.toString().split(","));
Я не совсем понимаю ваш вопрос, но если вы хотите обновить несколько строк в таблице на основе данных в других таблицах, да, это возможно, если вы хотите обновить несколько строк в нескольких разных таблицах, что будет возможно только с помощью хранимой процедуры или чего-то подобного.