2015-10-19 30 views
0

我知道第一个是同步的,后面的一个是非同步的,响应时间更快。StringBuffer或StringBuilder用于我的查询

我使用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()) 
{ 
.. 
} 
} 
+0

建议不要使用SQL查询追加。你为什么需要这样做? – Siyual

+0

@Siyual我的查询太长了 –

+0

检查['PreparedStatement'](http://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html) – sam

回答

1

这一切正在一个线程中完成,所以是的,一个StringBuilder是没问题(但请参阅关于以这种方式构建SQL是否合适的评论)。

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

(通常情况下,如果你的东西传递到另一个线程,你就会知道,这是你在做什么。)

1

sSubQry属于saveData方法的范围,所以你可以放心地使用StringBuilder

StringBuffer可能有用,当一个类实例成员可以由不同的线程共享。

相关问题