我的查询的StringBuffer或StringBuilder

时间:2015-10-19 15:21:03

标签: sql string optimization stringbuilder stringbuffer

我理解第一个是同步的,后一个是不同步的,响应时间更快。

我正在使用StringBuffer附加SQL查询。转移到StringBuilder可以加快速度(我的问题尤其是关于SQL )?

建议在SQl查询追加附近使用StringBuilder吗?

我当前的代码

public boolean saveData (Connection conn,MyObject) throws SQLException {
..
PreparedStatement pstmt = null;
ResultSet rs = null;
try{
StringBuffer sSubQry = new StringBuffer();                      
sSubQry.append (" select ID, STATEID, TYPEID, LANGID, SEQ, ");
sSubQry.append (" SECTIONSEQ, CODE, NAME, INPUTNAME, ");
sSubQry.append (" .., .., ..,");
sSubQry.append (" .., .., ..,");
..
..
pstmt = conn.prepareStatement(sSubQry.toString());
rs = pstmt.executeQuery();
while (rs.next ())
 {
 ..
 }
}

将其转移到StringBuilder有任何+ve-ve效果

public boolean saveData (Connection conn,MyObject) throws SQLException {
..
PreparedStatement pstmt = null;
ResultSet rs = null;
try{
StringBuilder sSubQry = new StringBuilder();                        
sSubQry.append (" select ID, STATEID, TYPEID, LANGID, SEQ, ");
sSubQry.append (" SECTIONSEQ, CODE, NAME, INPUTNAME, ");
sSubQry.append (" .., .., ..,");
sSubQry.append (" .., .., ..,");
..
pstmt = conn.prepareStatement(sSubQry.toString());
rs = pstmt.executeQuery();
while (rs.next ())
 {
 ..
 }
}

2 个答案:

答案 0 :(得分:2)

这一切都是在一个线程中完成的,所以是的,StringBuilder很好(但是看看它是否适合以这种方式构造SQL)。

每当你有一系列这样的步骤,你创建一个局部变量,然后永远不会将对它的引用传递给任何其他方法,并且你永远不会返回它,你可以确定只有当前线程可以访问它

(通常情况下,如果您将某些内容传递给其他主题,您就会意识到这就是您正在做的事情。)

答案 1 :(得分:2)

sSubQry属于saveData方法范围,因此您可以安全地使用StringBuilder

当类实例成员可以由不同的线程共享时,

StringBuffer可能很有用。