我正在使用 jdbc:odbc 网桥连接到 Access 数据库。然后我从数据库中选择大量数据(约 200 万行)。重启后我第一次运行代码非常慢,需要 6 多分钟才能检索数据。在随后的运行中,只需 1.5 分钟即可完成相同的操作。
这是我用来连接数据库的代码:
try {
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);
System.out.println("Connected to " + databaseName);
} catch (SQLException e) {
System.out.println("SQL Exception: " + e.toString());
} catch (ClassNotFoundException cE) {
System.out.println("Class Not Found Exception: " + cE.toString());
}
经过大量谷歌搜索后,我尝试添加参数,例如
selectMethod=cursor
READONLY=true
TYPE=FASTLOAD
据我所知,这些都没有影响。
然后我像这样选择数据:
String SQL = "SELECT ADDRESS_MODEL.ADDR_LINE_1, ADDRESS_MODEL.ADDR_LINE_2, LOCALITIES.NAME, ADDRESS_MODEL.SECONDARY_LOCALITY, TLANDS.NAME, ADDRESS_MODEL.POST_TOWN, ADDRESS_MODEL.COUNTY FROM ((ADDRESS_MODEL LEFT JOIN BUILDINGS ON ADDRESS_MODEL.BUILDING_ID = BUILDINGS.BUILDING_ID) LEFT JOIN LOCALITIES ON BUILDINGS.LOCALITY_ID = LOCALITIES.LOCALITY_ID) LEFT JOIN TLANDS ON BUILDINGS.TLAND_ID = TLANDS.TLAND_ID WHERE BUILDINGS.COUNTY_ID = " + county_ID;
PreparedStatement prest = con.prepareStatement(SQL);
ResultSet result = prest.executeQuery();
我尝试使用准备好的语句,但我不确定我做得对。
存储数据后,我关闭 ResultSet:
result.close();
稍后在程序中,我关闭连接如下:
try{
stmt.close();
con.close();
System.out.println("Connection to " + databaseName + " closed");
} catch (SQLException e) {
System.out.println("SQL Exception: " + e.toString());
}
不幸的是,我现在致力于同时使用 Java 和 Access。
有谁知道为什么它第一次变慢(或者更多为什么它在后续运行中更快)?另外,有什么一般的事情我可以做得更好以使其更快吗?
谢谢你的时间。