如何在StringBuilder中追加星号*?

时间:2015-05-30 15:16:35

标签: java sql special-characters stringbuilder

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

1 个答案:

答案 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

或者甚至更好,使用StringJoinerCollectors#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来为您添加列名。