[英]ArrayList or Hashset
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?
通常,您会希望使用ArrayList
作为查询参数-因为顺序很重要。 当您只有一个参数(如此处所示)时,这不是问题-但我绝对会使用一个列表来保持一致性。
至于使用StringBuffer
,这里没有显示您正在使用sql
做什么。 如果您不追加任何其他内容,则可以使用简单的String
...,但不会将其添加到ArrayList
,因为它是查询本身,而不是查询参数 。
最后,我建议使用泛型,例如
ArrayList<Long> queryParameters = new ArrayList<Long>();
至于性能,请考虑:
使用StringBuilder(而不是StringBuffer)是不同步的,也不是问题,因为您正在为每个请求创建一个新的StringBuilder()。 如果与每个请求使用的语句相同,则应为全局声明的最终String。
正如Jon所建议的,将ArrayList与Generics一起使用。 queryParams用作用于查询数据库的QueryService实现的一部分。 看起来,这是一个预编译的sql查询,查询参数的顺序在运行时很重要。 HashSet不保证顺序。
更高效:
sql.append("SELECT A.FLDREC_NUM, ");
sql.append("@CHARDATE(A.FLDDATE), ");
......
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.