2015-03-07 1 views
0

мне нужно сделать строку для SQLite выбрать functionin формат:StringBuilder, исчезающие кавычки

... И value_data В ('FOX', 'Бартлетт')

где «FOX» и «BARTLETT» являются заполнителями для имен переменных 1+, все они окружены одинарной кавычкой и запятой. Вот мой код:

StringBuilder build = new StringBuilder(); 
build.append(") AND value_data IN ("); 
build.append("'" + values[0] + "'");   //guaranteed first value 
for(int l = 1; l < (values.length); l++){ 
    build.append(",'" + values[l] + "'"); //any number of values afte 
} 
build.append(")"); 

Но когда я распечатать build.toString(), я получаю это:

... И value_data IN ('FOX, Bartlett')

Внутренние одинарные кавычки, которые должны быть до и после запятой, исчезают. Я смотрел по всему Интернету (этот сайт и другие) для ответа, но не могу его найти. Почему эти кавычки исчезают и как я могу сделать строковое построение, как показано вверху?

+1

Ваш код верный. Вы уверены, что 'values' фактически содержит два элемента, а не одну строку, равную« FOX, BARTLETT »? – yole

+2

1. Тогда 'values ​​[0]' не содержит того, что вы думаете; ваши кавычки не исчезают, и ваш опубликованный код в порядке, но ваш массив значений был заполнен неправильно. 2. Как правило, вы не хотите создавать SQL-запросы таким образом. Хотя это может быть хорошо для вашей небольшой одноразовой программы, вы должны избегать строк перед созданием запроса. Гораздо лучше, однако, использовать ['PreparedStatement'] (http://software-security.sans.org/developer-how-to/fix-sql-injection-in-java-using-prepared-callable-statement). –

+0

Либо то, что упоминалось выше, либо вы используете старую версию своего кода, которая не имеет этих котировок ... (например, в старые времена использования Eclipse). – Augusto

ответ

1

Ваш код верный.

Я предлагаю использовать StringBuilder append() вместо конкатенации строк по соображениям производительности.

StringBuilder build = new StringBuilder(); 
build.append(") AND value_data IN ("); 
build.append("'").append(values[0]).append("'"); //guaranteed first value 
for (int l = 1; l < values.length; l++) { 
    build.append(",'").append(values[l]).append("'"); //any number of values after 
} 
build.append(')'); 

 Смежные вопросы

  • Нет связанных вопросов^_^