sql - 用于我的查询的 StringBuffer 或 StringBuilder

标签 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 ())
 {
 ..
 }
}

最佳答案

这一切都是在单个线程中完成的,所以是的,StringBuilder 就可以了(但是请参阅有关以这种方式构造 SQL 是否合适的评论)。

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

(通常,如果您将某些内容传递给另一个线程,您会意识到这就是您正在做的事情。)

关于sql - 用于我的查询的 StringBuffer 或 StringBuilder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33218160/

相关文章:

php - 字段列表中的列 'id' 使用 Eloquent 不明确

MySQL减去两个计数列

python - 使用 pandas 使用列中的值格式化字符串

optimization - 多类 Logistic 回归的学习曲线

python - 为什么 'True or False' 比 'False or True' 快?

haskell - 为什么这个 Haskell 表达式这么慢?

java - 使用单个 JDBC Statement 对象执行多个查询

mysql - SQL脚本创建用户时出现错误1133?

c - 如何打印出存储在二维数组中的字符串记录?

带新行的 JavaScript 字符串 - 但不使用\n