今天girlfriend到公司交作业(还是培训期),她们的pm让她们在数据读取的使用FOR循环(如例test1),问之,为啥,说pm说了,这样好,还拿了一本pm给的Effective Java,说看了就明白,废话不多说,看之,原来就这样一条,如果在循环体外不需要继续使用的变量建议使用FOR循环,并且在for的第一部分初始化,这样一来循环结束以后就会自动回收,但是大家仔细思考一下,这地方能利用这条原则??,RESULTSET 是跟着statement走的,当你关闭statement,resultset会被关闭,使你使用FOR循环没有任何好处,相反,WHILE要更快,使用for是弄巧成拙.例子如下,大家也看到while要比for快将近3倍,记录为1000条左右.写这个例子,希望大家不要犯类似的错..... package jp.gibraltar.bnas.branch.accountclose.closecheck; 
import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Vector; 
import jp.gibraltar.util.DBUtil; import junit.framework.TestCase; 
/**  * @author sfluo  *   * TODO To change the template for this generated type comment go to Window -  * Preferences - Java - Code Style - Code Templates  */ public class CloseCheckInputActionTest extends TestCase { 
 public static void main(String[] args) {   junit.textui.TestRunner.run(CloseCheckInputActionTest.class);  } 
 /*   * @see TestCase#setUp()   */  protected void setUp() throws Exception {   super.setUp();  } 
 /*   * @see TestCase#tearDown()   */  protected void tearDown() throws Exception {   super.tearDown();  } 
 public final void testExecuteCheckInput() {   CloseCheckInputActionTest test = new CloseCheckInputActionTest();   System.out.println(System.currentTimeMillis());   test.test1();   System.out.println(System.currentTimeMillis());   test.test2();   System.out.println(System.currentTimeMillis());  } 
 void test1() { 
  Connection conn = DBUtil.getConnection();   Vector vs = new Vector(); 
  try {    Statement stmt = conn.createStatement();    for (ResultSet rs = stmt      .executeQuery("select * from accesslog_bnas "); rs.next();) { 
    vs.add(rs.getString(1)); 
   }    stmt.close();    conn.close();   } 
  catch (SQLException e) {    // TODO Auto-generated catch block    e.printStackTrace();   } 
 } 
 void test2() { 
  Connection conn = DBUtil.getConnection();   Vector vs = new Vector(); 
  try {    Statement stmt = conn.createStatement();    ResultSet rs = stmt.executeQuery("select * from accesslog_bnas ");    while (rs.next()) {     vs.add(rs.getString(1)); 
   } 
   stmt.close();    conn.close();   } catch (SQLException e) {    // TODO Auto-generated catch block    e.printStackTrace();   } 
 } } print 1100141162919 1100141174035 1100141178942
   
 
  |