Почему это разделяет () сбой?

Это - что-то, что раздражает меня о MSSQL ( напыщенная речь на моем блоге ). Мне жаль, что MSSQL не поддерживал upsert.

@Dillie-O's код является хорошим путем в более старых версиях SQL (+1 голосование), но это все еще - в основном две операции IO (exists и затем update или insert)

существует немного лучший путь на это сообщение в основном:

--try an update
update tablename 
set field1 = 'new value',
    field2 = 'different value',
    ...
where idfield = 7

--insert if failed
if @@rowcount = 0 and @@error = 0
    insert into tablename 
           ( idfield, field1, field2, ... )
    values ( 7, 'value one', 'another value', ... )

Это уменьшает его до операций IO, если это - обновление, или два если вставка.

мс Sql2008 представляет merge из стандарта SQL:2003:

merge tablename as target
using (values ('new value', 'different value'))
    as source (field1, field2)
    on target.idfield = 7
when matched then
    update
    set field1 = source.field1,
        field2 = source.field2,
        ...
when not matched then
    insert ( idfield, field1, field2, ... )
    values ( 7,  source.field1, source.field2, ... )

Теперь это - действительно всего одна операция IO, но ужасный код:-(

5
задан etheros 31 October 2009 в 10:58
поделиться

3 ответа

split () принимает регулярное выражение (см. split (java.lang.String) ), а не строку-разделитель для разделения. Регулярное выражение «.» означает «любой одиночный символ» (см. regex ), поэтому оно будет разделено на все, что ничего не останется в вашем списке. Чтобы разделить на буквальную точку, используйте:

file.getName().split("\\.")// \. escapes . in regex \\ escapes \ in Java.String

В общем, вы можете использовать Pattern.quote (str) , чтобы получить регулярное выражение, которое буквально соответствует str . (предложено ramon )

file.getName().split(Pattern.quote("."))
21
ответ дан 18 December 2019 в 05:43
поделиться

Возможно, вам стоит перечитать api-doc для split (java.lang.String)

Строка, которую вы передать это регулярное выражение .

Попробуйте использовать

split("\\.")

. Вам нужна двойная обратная косая черта, потому что \. является недопустимым escape-символом в строке Java. Таким образом, вам нужно избежать самой обратной косой черты в строке javastring.

5
ответ дан 18 December 2019 в 05:43
поделиться

String.split () запрашивает регулярное выражение в своем параметре, а в регулярных выражениях - . будет соответствовать любому персонажу. Чтобы заставить его работать, вам нужно добавить \ , например:

System.out.println(file.getName().split("\\.").length);

Вам понадобится одна обратная косая черта, чтобы избежать точки, чтобы регулярное выражение знало, что вам нужна настоящая точка. Вам понадобится другая обратная косая черта, чтобы избежать первой обратной косой черты, т.е. чтобы сообщить Java, что вы хотите, чтобы внутри вашей строки была фактическая обратная косая черта.

Прочтите javadoc для String.split и регулярных выражений ] для получения дополнительной информации.

4
ответ дан 18 December 2019 в 05:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: