gpt4 book ai didi

java - 如何在 StringBuilder 中追加星号 * ?

转载 作者:行者123 更新时间:2023-11-30 03:24:42 24 4
gpt4 key购买 nike

我正在为 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);

我还尝试了 ("*") ("\*") ("\\*") (' *') ((char)42) 但这些都不起作用。我从 StringBuilder 获得的输出是 select from tableName

最佳答案

这应该可以做到:

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 的它将为您连接列名。

关于java - 如何在 StringBuilder 中追加星号 * ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30547809/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com