ArrayList queryParms = new ArrayList();
StringBuffer sql = new StringBuffer();
sql.append(
"SELECT A.FLDREC_NUM, " +
"@CHARDATE(A.FLDDATE), " +
"T.FLDDESCR, @DEC(A.FLDLEVEL,3) " +
" FROM @SCHEMAALCOHOL A LEFT OUTER JOIN @SCHEMADRUGCAUS T " +
" ON A.FLDREASON = T.FLDCODE " +
" WHERE A.FLDEMPLOYEE = ? " +
" ORDER BY A.FLDDATE DESC"
);
queryParms.add(new Long(empRec));
我可以使用HashSet而不是上面的ArrayList,它在性能方面是否有意义?
查询的作用是什么,我们是否需要在StringBuffer中追加查询。为什么我不能直接添加到ArrayList?
答案 0 :(得分:1)
通常,您可能希望使用ArrayList
作为查询参数 - 因为顺序很重要。如果您只有一个参数(就像您在这里一样),这不是问题 - 但我肯定会使用列表来保持一致性。
至于使用StringBuffer
- 你还没有在这里展示你对sql
所做的事情。如果您没有附加任何其他内容,则可以使用简单的String
...但您不会将其添加到ArrayList
,因为它是查询本身,而不是查询参数
最后,我建议使用泛型,例如
ArrayList<Long> queryParameters = new ArrayList<Long>();
答案 1 :(得分:1)
至于表现,请考虑:
使用未同步但不是问题的StringBuilder(而不是StringBuffer),因为您正在为每个请求创建一个新的StringBuilder()。如果它是用于每个请求的相同语句,则它应该是全局声明的最终字符串。
根据Jon的建议,将ArrayList与Generics一起使用。 queryParams用作QueryService实现的一部分,用于查询DB。看起来,它是一个预编译的SQL查询,查询参数的顺序在运行时很重要。 HashSet不保证订单。
答案 2 :(得分:0)
效率更高:
sql.append("SELECT A.FLDREC_NUM, ");
sql.append("@CHARDATE(A.FLDDATE), ");
......