2015-05-30 61 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); 

甚至更​​好,使用類似StringJoinerCollectors#joining,將做for的工作,爲您和到底要不要追加額外", "

如果您使用的是Java 7或之前的版本,那麼我建議使用Apache Commons中的StringUtils#join,它將爲您加入列名稱。

+0

謝謝,我忘了底部的一行...我也用'queryBuilder.append(String.join(「,」,columns))替換了循環;'現在它工作得非常完美。 – Asalas77

+0

不客氣。 –