jdbc 塊提取方式

2022-07-03 19:21:12 字數 1471 閱讀 5275

最近使用jdbc方式查詢資料,儲存為csv檔案中。當然你可以在pl/sql中直接查出來,copy to excel就好了。但我想通過程式實現

1 @test

2 public void test() throwsioexception

63 }

64 }

65 66 csvwriter.flush();

67 }

68 catch(exception e)

69 72 finally

73 86 catch(exception e)

87 90 }

91 }

先讀取所有編號形成list,後遍歷這個list,先查出id再查詳細資料。這樣的資料csv檔案中大約8萬多條

一條條的來肯定慢,如果不按照編號,直接一次查出,資料是9萬多條。速度都很慢!!!

後來想提高下,至少要有個明顯的提公升呀。寫檔案這塊基本排除了,剩下的疑問就是resultset是否拿到了所有結果呢?

根據網上查到的資料和實際除錯,得出答案:resultset預設一次取10條資料,怪不得要慢,如果一次全部讀入記憶體再寫入檔案就一定很快了。

怎樣一次讀取所有資料呢?

sql改為讀取全部

2 "(needrepay_principal+needrepay_interest+needrepay_admifee+nvl(risk_amount,0)+nvl(servicefee,0)+nvl(parkingfee,0))needrepay_total,\n" +

3 "period_repay_amount \n" +

4 "from(\n" +

6 " where t.lr_requeststatus ='2' and t.creater='postloanouteraction'\n" +

7 " order by lr_id desc)req\n" +

8 "left join t_repay_plan rp\n" +

9 "on req.lr_id=rp.lr_id\n" +

10 "order by req.lr_id,curr_periods";

設定preparedstatement:

1 pre =con.preparestatement(sql);

2 pre.setfetchsize(100000);

3 result =pre.executequery();

4

主要是preparedstatement的 setfetchsize 方法,

後來發現resultset也有個setfetchsize 方法,也是可行的,只是這個時候resultset中已經有了10條記錄直到迴圈10次後,再次使用result.next()才去取100000,fetchsize才起作用

這樣設定後速度飛快!!!

JDBC連線方式大全

下面羅列了各種資料庫使用jdbc連線的方式,可以作為乙個手冊使用。1 oracle8 8i 9i資料庫 thin模式 class.forname oracle.jdbc.driver.oracledriver newinstance string url jdbc oracle thin local...

JDBC連線方式大全

下面羅列了各種資料庫使用jdbc連線的方式,可以作為乙個手冊使用。1 oracle8 8i 9i資料庫 thin模式 class.forname oracle.jdbc.driver.oracledriver newinstance string url jdbc oracle thin local...

JDBC連線的方式

下面羅列了各種資料庫使用jdbc連線的方式,可以作為乙個手冊使用。1 oracle8 8i 9i資料庫 thin模式 class.forname oracle.jdbc.driver.oracledriver newinstance string url jdbc oracle thin local...