2011-03-03 4 views
0

실행 속도를 높이고 싶지 않은 추악한 코드 조각이 있습니다. setMotherTableValues ​​() 메서드를 추가 할 때까지 제대로 작동했습니다. 지금은 약 48,000 번 정도 마더 보드 검색을하고 있으며 프로그램을 죽이는 중입니다. 이것을 향상시킬 방법이 있습니까? 데이터베이스의 컬럼을 변경할 권한이 없습니다.MS Access SQL 쿼리 최적화

public void populateMdbRecognitions(ArrayList<MdbRecognition> recognitions, String genid, 
     String issueid, String issueexpression, String issuedetails, 
     String tablename) throws SQLException { 
    ResultSet rs = statement.executeQuery("SELECT `" + genid + "`, `" + issueid + "`, `" 
      + issueexpression + "`, `" + issuedetails + "` FROM " + tablename); 
    while (rs.next()) { 
     String gen_id = removeAmpsFromGenId(rs.getString(genid)); 
     String issue_id = rs.getString(issueid); 
     String issue_details = rs.getString(issuedetails); 
     String issue_expression = rs.getString(issueexpression); 
     MdbRecognition recognition = new MdbRecognition(gen_id, issue_id, 
       issue_details, issue_expression, tablename); 
     recognitions.add(recognition); 
    } 
    for (MdbRecognition mdbRecognition : recognitions){ 
     setMotherTableValues(mdbRecognition); 
    } 

} 

public void setMotherTableValues(MdbRecognition mdbRecognition) throws SQLException { 
    ResultSet rs = statement.executeQuery("SELECT `mandatory?`, category, subcategory FROM __MOTHER_ISSUE_TABLE_7 WHERE issue_id ='" + mdbRecognition.getIssueId()+"'"); 
    while (rs.next()){ 
     mdbRecognition.setMandatory(rs.getString("mandatory?").trim()); 
     mdbRecognition.setCategory(rs.getString("category").trim()); 
     mdbRecognition.setSubcategory(rs.getString("subcategory").trim()); 
    } 
} 

답변

1

이게 뭐지?

  • 임의의 테이블에서 모든 행을 선택하십시오.
  • gen_id에서 앰퍼샌드를 제거하십시오.
  • 해당 임의 테이블의 모든 행을 컬렉션에 저장하십시오.

그런 다음, 그 컬렉션의 각 항목 ISSUE_ID에 의해 __MOTHER_ISSUE_TABLE_7에서

  • 선택 세 개의 열합니다.
  • 해당 세 개의 열의 값으로 해당 컬렉션의 값을 업데이트하십시오.

당신은 단지 당신이 거의 확실이 변경해야하는 GUI를 업데이트 할 문자열을 저장하고 말 이후 :

ResultSet rs = statement.executeQuery("SELECT `" + genid + "`, `" + issueid + "`, `" 
     + issueexpression + "`, `" + issuedetails + "` FROM " + tablename); 

이 mdbrecognition 객체가 수행하기 위해 필요로 정확히 복원하기 일. 그렇게한다면 숨이 빨라지는 속도가 빨라진다.

+0

답장을 보내 주셔서 감사합니다. 내가하려는 일을 정정 해 줬어. 분명하게 해줘서 고마워. 데이터베이스의 필드를 업데이트하지 않고 값을 가져 와서 컬렉션에 추가하고 싶습니다. 그렇게 말하면, SQL UPDATE 문에 대해 약간의 내용을 읽을 것입니다. –

+0

@Emil : 저는 단지 업데이트에 대해서 추측하고 있습니다. 당신은 그 mdbRecognition 객체가 사용되는 것을 아는 유일한 사람입니다. –

+0

아, 너무 불분명해서 죄송합니다. mdbRecognition 객체는 GUI에 표시 할 일련의 String 값을 저장하는 데만 사용됩니다. 그래서 내가해야 할 일은 문자열을 가져 와서 그 문자열을 mdbRecognition setMethods의 인자로 사용하는 것입니다. –

1

첫 번째 쿼리를 다시 작성하고 거기에있는 이슈 테이블에 참여하는 것이 좋습니다.