Accessデータベースの3つのテーブルから最大200万行、おそらく100MBのテキストから大量のデータを読み取っています。次のSELECTステートメントを使用していました。
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=" + databaseLocation + databaseName +";selectMethod=cursor; READONLY=true; TYPE=FASTLOAD";
con = DriverManager.getConnection(url);
String SQL = "SELECT ADDRESS_MODEL.ADDR_LINE_1, ADDRESS_MODEL.ADDR_LINE_2, LOCALITIES.NAME, ADDRESS_MODEL.SECONDARY_LOCALITY, ADDRESS_MODEL.POST_TOWN, ADDRESS_MODEL.COUNTY, BUILDINGS.ED_ID FROM (ADDRESS_MODEL LEFT JOIN BUILDINGS ON ADDRESS_MODEL.BUILDING_ID = BUILDINGS.BUILDING_ID) LEFT JOIN LOCALITIES ON BUILDINGS.LOCALITY_ID = LOCALITIES.LOCALITY_ID WHERE BUILDINGS.COUNTY_ID = " + county_ID;
Statement stmt = con.createStatement();
ResultSet result = stmt.executeQuery(SQL);
これにはしばらく(約2分)かかっていたので、もっと速くする方法を探しました。プリペアドステートメントについて読んで、作ってみることにしました。さまざまなチュートリアルに従って、これをまとめました。
String SQL = "SELECT ADDRESS_MODEL.ADDR_LINE_1, ADDRESS_MODEL.ADDR_LINE_2, LOCALITIES.NAME, ADDRESS_MODEL.SECONDARY_LOCALITY, ADDRESS_MODEL.POST_TOWN, ADDRESS_MODEL.COUNTY, BUILDINGS.ED_ID FROM (ADDRESS_MODEL LEFT JOIN BUILDINGS ON ADDRESS_MODEL.BUILDING_ID = BUILDINGS.BUILDING_ID) LEFT JOIN LOCALITIES ON BUILDINGS.LOCALITY_ID = LOCALITIES.LOCALITY_ID WHERE BUILDINGS.COUNTY_ID = ?";
PreparedStatement prest = con.prepareStatement(SQL);
prest.setString(1, county_ID);
ResultSet result = prest.executeQuery();
それでも動作しますが、現在は15分以上かかります。私は良いグーグルを持っていましたが、私が間違っていることを見つけることができないようです。プリペアドステートメントは私の特定の問題に適切ではありませんか?