有下面两个例子
1,
protected static StringBuffer getSQL_MYDATA(){
StringBuffer sql = new StringBuffer();
sql.append("INSERT INTO MYDATA  ");
sql.append("SELECT  ");
...// 很长
return sql;
}private void insertMYDATA() throws Exception {
  StringBuffer sql = getSQL_MYDATA();
  // 数据库操作
}2,
private void insertMYDATA() throws Exception {
  StringBuffer sql = new StringBuffer();
sql.append("INSERT INTO MYDATA  ");
sql.append("SELECT  ");
...
// 很长
  // 数据库操作
}请问,1,2哪个性能更好些,哪种写法更好?

解决方案 »

  1.   

    从性能来看,个人觉得应该是第二种好些,少了一次方法调用如果SQL语句是一样的话,建议做过类成员变量,将SQL语句赋值给该变量,这样如果多次使用该SQL的话性能会好些。
      

  2.   

    再求助,如果写成这样呢
    3,
    protected static String sql_MYDATA=
      "INSERT INTO MYDATA "+
      "SELECT "+
    ...// 很长
    ;private void insertMYDATA() throws Exception {
    String sql = sql_MYDATA;
    // 数据库操作
    }
      

  3.   

    第3个相比第2个更为通用一点,那个性能好取决于insertMYDATA()被调用的次数。如果insertMYDATA()只被调用一次则第2个性能好,因为String相加比用StringBuffer构造消耗更多时间。反之,如果insertMYDATA()只被调用多次则第3个性能好,应为String相加的操作只执行一次,且sql_MYDATA存在于常量池,减少了许多垃圾回收时间。
      

  4.   

    感觉String上的优化效果很有限吧,何况不是据说String+String性能不是想象的那么差么?
      

  5.   

    我的方案是在类中写下如下代码:
    protected static String sql_MYDATA;
    static{
    StringBuffer sql = new StringBuffer();
    sql.append("INSERT INTO MYDATA  ");
    sql.append("SELECT  ");

    sql_MYDATA = sql.toString();
    }
      

  6.   

    =============================================== 
    byronly() ( ) 信誉:100    Blog   加为好友  2007-6-11 17:31:50  得分: 0  
       
    楼上的说说理由,3不是被做成静态的变量了吗
    =================================================因为字符串直接相加要比StringBuffer的append性能差