2015-10-19 53 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可能有用,當一個類實例成員可以由不同的線程共享。

相關問題