如何在 StringBuilder 中附加星号 *?
How to append star character * in StringBuilder?
我正在为 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)
但是 none 这些工作。我从 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
or Collectors#joining
的东西,它将为您完成 for
的工作,而不是在最后附加额外的 ", "
。
如果您使用的是 Java 7 或更早版本,那么我建议使用 Apache Commons 中的 StringUtils#join
,它将为您执行列名称的连接。
我正在为 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)
但是 none 这些工作。我从 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
or Collectors#joining
的东西,它将为您完成 for
的工作,而不是在最后附加额外的 ", "
。
如果您使用的是 Java 7 或更早版本,那么我建议使用 Apache Commons 中的 StringUtils#join
,它将为您执行列名称的连接。