2011-03-03 45 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中刪除&符號。
  • 保存集合中該任意表的每一行。

然後,該集合中的每個項目,

  • 選擇三個從 __MOTHER_ISSUE_TABLE_7通過ISSUE_ID列。
  • 使用這三列中的值更新該集合中的值。

既然你說你只是存儲串更新GUI,那麼你幾乎肯定需要改變這樣的:

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

返回正是你mdbrecognition對象,以便做需要它工作。如果你這樣做,你會看到一個驚人的加速。

+0

感謝您的回覆。你明白了我想要做的,謝謝你讓它更清晰。我不想更新數據庫中的任何字段,只需獲取值並將其添加到集合中即可。就這樣說,如果你希望你更歡迎給我一些具體的例子,我會讀一些關於SQL UPDATE語句的內容。 –

+0

@Emil:我只是在猜測UPDATE;你是唯一知道那個mdbRecognition對象用於什麼的人。 –

+0

噢,對不起,很抱歉。 mdbRecognition對象僅用於存儲一串字符串值,以顯示在GUI中。所以我需要做的是獲取字符串,並將這些字符串用作mdbRecognition setMethods上的參數。 –

1

更好地重寫第一個查詢,在那裏加入母題表。