StringBuffer 或 StringBuilder 用于我的查询
StringBuffer or StringBuilder for my query
我知道第一个是同步的,第二个是不同步的,响应时间更快。
我正在使用 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 是否合适的评论)。
只要你有像这样的一系列步骤,你在其中创建一个局部变量,然后永远不会将对它的引用传递给任何其他方法,而且你永远不会 return 它,你可以确定只有当前线程可以访问它。
(通常,如果您将某些内容传递给另一个线程,您会意识到这就是您正在做的事情。)
sSubQry
属于saveData
方法作用域,所以可以放心使用StringBuilder
.
StringBuffer
在 class 实例成员可以被不同线程共享时可能有用。
我知道第一个是同步的,第二个是不同步的,响应时间更快。
我正在使用 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 是否合适的评论)。
只要你有像这样的一系列步骤,你在其中创建一个局部变量,然后永远不会将对它的引用传递给任何其他方法,而且你永远不会 return 它,你可以确定只有当前线程可以访问它。
(通常,如果您将某些内容传递给另一个线程,您会意识到这就是您正在做的事情。)
sSubQry
属于saveData
方法作用域,所以可以放心使用StringBuilder
.
StringBuffer
在 class 实例成员可以被不同线程共享时可能有用。