2015-05-30 4 views
1

Я пишу программу для базы данных sql и должен построить запрос select на основе выбранных столбцов. Если столбцы не выбраны, я хочу использовать синтаксис select * from. Как добавить * в StringBuilder?Как добавить символ звездочки * в StringBuilder?

ArrayList<String> columns; 
StringBuilder queryBuilder = new StringBuilder("select "); 

... 

if (columns == null || columns.size() == 0) { 
    queryBuilder.append(Character.toString ((char) 42)); 
} else { 
    for (String name : columns) { 
     queryBuilder.append(name); 
     queryBuilder.append(", "); 
    } 
} 
queryBuilder.setLength(queryBuilder.length() - 2); 
queryBuilder.append(" from "); 
queryBuilder.append(tableName); 

Я также попытался ("*")("\*")("\\*")('*')((char)42) но ни одна из этих работ. Выход я получаю от StringBuilder является select from tableName

ответ

2

Это следует сделать это:

queryBuilder.append('*'); 

проблема у вас есть с этой линией:

queryBuilder.setLength(queryBuilder.length() - 2); 

Это влияет на всю StringBuilder несмотря если он присоединил один символ или все имена столбцов, когда он должен влиять только на конкатенацию имен столбцов. Переместить эту строку здесь:

} else { 
    for (String name : columns) { 
     queryBuilder.append(name); 
     queryBuilder.append(", "); 
    } 
    queryBuilder.setLength(queryBuilder.length() - 2); 
} 
//queryBuilder.setLength(queryBuilder.length() - 2); 
queryBuilder.append(" from "); 
queryBuilder.append(tableName); 

Или еще лучше, использовать что-то вроде StringJoiner или Collectors#joining, который будет делать работу for для вас и не присоединяют дополнительные ", " в конце концов.

Если вы используете Java 7 или ранее, я рекомендую использовать StringUtils#join из Apache Commons, который будет выполнять объединение имен столбцов для вас.

+0

спасибо, я забыл про строку внизу ... Я также заменил цикл на 'queryBuilder.append (String.join (", ", columns)); и он работает безупречно сейчас. – Asalas77

+0

Добро пожаловать. –

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