今天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 ");
新聞熱點
疑難解答