Access 데이터베이스의 3 개 테이블에서 2 백만 행 또는 100MB의 텍스트를 읽습니다. 나는 다음과 같은 SELECT 문을 사용하여 :이 잠시 동안 (약 2 분)을 복용했다 그래서 더 빨리 만들 수있는 방법을 찾았다SQL PreparedStatement의 문제점은 무엇입니까?
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);
. 나는 준비된 진술에 대해 읽고 그것을 만들기로 결정했다. 다양한 나는 이것을 함께 넣어 자습서 다음은
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 분 이상 소요됩니다. 나는 좋은 구글을 가졌지 만 내가 잘못하고있는 것을 발견 할 수 없다. 준비된 진술은 나의 특별한 문제에 적절하지 않습니까?
가 얼마나 오래 쿼리가 걸립니까 SQL 주입을 방지하는 것입니다 사용하는 주요 인자? – JamesB
특정 권장 사항은 없지만 더 나은 JDBC 드라이버를 얻는 방법을 조사하는 것이 좋습니다. –
@JamesB 거의 문자 그대로 시간이 없습니다. 1 초도 남지 않았습니다. – Russell