Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在StringBuilder中附加星号*?_Java_Sql_Special Characters_Stringbuilder - Fatal编程技术网

Java 如何在StringBuilder中附加星号*?

Java 如何在StringBuilder中附加星号*?,java,sql,special-characters,stringbuilder,Java,Sql,Special Characters,Stringbuilder,我正在为sql数据库编写一个程序,需要基于所选列构建一个select查询。如果未选择任何列,我希望使用select*from语法。如何将*附加到StringBuilder ArrayList<String> columns; StringBuilder queryBuilder = new StringBuilder("select "); ... if (columns == null || columns.size() == 0) { queryBuilder.ap

我正在为sql数据库编写一个程序,需要基于所选列构建一个
select
查询。如果未选择任何列,我希望使用
select*from
语法。如何将*附加到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);
ArrayList列;
StringBuilder queryBuilder=新建StringBuilder(“选择”);
... 
if(columns==null | | columns.size()==0){
append(Character.toString((char)42));
}否则{
for(字符串名称:列){
queryBuilder.append(名称);
queryBuilder.append(“,”);
}
}
setLength(queryBuilder.length()-2);
queryBuilder.append(“from”);
append(tableName);
我也试过
(“*”)
(“\*”
(“\\*”)
(“*”)
((char)42)
。我从StringBuilder获得的输出是
selectfromtablename

这应该可以做到:

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);
或者更好的方法是,使用类似或的东西,为您完成
的工作,而不是在最后附加额外的
“,”


如果您使用的是Java 7或更早版本,那么我建议您使用Apache Commons,它将为您连接列名。

谢谢,我忘记了底部的那一行。。。我还将循环替换为
queryBuilder.append(String.join(“,”,columns))并且它现在工作得完美无瑕。