StringBuffer或HashMap
这是附加代码的最佳方式,也可以提高性能。
StringBuffer sql = new StringBuffer();
DBDatabase db = UTIL.getDatabase();
sql.append("SELECT I.FLDCODE, I.FLDDESCR, I.FLDWORKPHON FROM ");
sql.append(db.getSchema());
sql.append("TRNINSTR I, ");
sql.append(db.getSchema());
sql.append("TRNCRSIN C WHERE C.FLDCOURSE = ? AND C.FLDINSTRUCT = I.FLDCODE AND (I.FLDINACTIVE IS NULL OR I.FLDINACTIVE <> 'y') ORDER BY C.FLDSEQUENCE");
DBPreparedStatement stmt = new DBPreparedStatement(db, sql, "TrainPage.getInfoInstrList");
stmt.setString(1, courseType);
DBResultSet rs = stmt.executeQuery();
stmt.close();
答案 0 :(得分:6)
StringBuilder表现得更好。请记住,缓慢的部分是数据库访问而不是语句准备。
答案 1 :(得分:2)
您的问题不清楚(“附加代码”?“HashMap”?),但我会假设您在询问构建字符串的更有效方法是什么。
通常,StringBuilder比StringBuffer更有效,因为后者的方法是同步的,这只是线程限制对象的不必要的开销。
但是问题是使用StringBuilder是否比简单的String连接更有效。答案就是“它取决于”。
如果要进行大量单独的连接,那么StringBuilder通常会更快; e.g。
String s = "";
for (int i = 0; i < 1000; i++) {
s += "X";
}
如果你在一个表达式中进行所有连接,那么它可能没有区别:
String s = "Hi " + name + ". It is a might fine " + day + ".";
这是因为Java编译器会将其转换为创建StringBuilder并执行一系列append
调用的代码。
然而,这是一个轻微的过度简化。一方面,如果您的应用程序可以轻松计算最终String的长度,则可以通过为构建器分配具有正确初始容量的StringBuilder来获得更好的性能。另一方面,编译器将预先评估字符串文字的连接,所以
String s = "Hi " + "mom" + ". is a might fine " + "tuesday" + ".";
会比以下更快:
StringBuilder sb = new StringBuilder();
sb.append("Hi ");
sb.append("mom");
sb.append(". is a might fine ");
sb.append("tuesday");
sb.append(".");
String s = sb.toString();
但最重要的是,可能无关紧要。除非您进行大量的字符串构建,否则对应用程序整体性能的影响可能会很小。