我正在为sql数据库编写程序,需要根据选定的列构建reset
查询。如果没有选择列,我想使用select
语法。如何将*附加到StringBuilder?
select * from
我还尝试了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);
("*")
("\*")
("\\*")
('*')
,但这些都没有奏效。我从StringBuilder获得的输出是((char)42)
答案 0 :(得分:2)
这应该这样做:
module Main where
data Inner = Inner { x :: Int , y :: Double } deriving (Read,Show)
data Outer = Outer { inner :: Inner } deriving (Read,Show)
parseOuter :: Outer
parseOuter = read "Outer { inner = Inner { x = 4.3 , y = 4.5 } }"
main = do
print parseOuter
--output : *** Exception: Prelude.read: no parse
你遇到的问题是这一行:
queryBuilder.append('*');
它会影响整个queryBuilder.setLength(queryBuilder.length() - 2);
,尽管它只附加了单个字符或所有列名,但它只会影响列名的连接。将此行移至此处:
StringBuilder
或者甚至更好,使用StringJoiner
或Collectors#joining
之类的内容为您完成} 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);
的工作,而不是追加额外的for
。< / p>
如果您使用的是Java 7或之前的版本,那么我建议您使用Apache Commons中的StringUtils#join
来为您添加列名。