2010-10-06 62 views
0

我正確地認爲,對於具有n個USERS的數據庫,以下代碼至少導致與數據庫的n次交互?減少數據庫I/O操作

Statement stmt = con.createStatement(); 
ResultSet srs = stmt.executeQuery(
    "SELECT FAVOURITE_COLOR FROM USERS"); 
while (srs.next()) { 
     //performSomeAction on srs.getString("FAVOURITE_COLOR"); 
} 

難道那麼也有可能提取所有用戶FAVOURITE_COLOR與數據庫1 I/O互動? 如果是這樣的話,如果用戶太多,會在程序中造成內存溢出?

回答

2

您的示例代碼執行單個往返數據庫。

在一個簡單的實現中,executeQuery將等待從數據庫中檢索整個數據集。然後,對next的每次呼叫都會立即移至下一行。

1

爲什麼你不能一次得到所有最喜歡的彩色記錄?

ResultSet srs = stmt.executeQuery(
    "SELECT USERID, FAVOURITE_COLOR FROM USERS"); 

其實經過進一步的思考,這取決於您所談論的平臺和/或DBMS。您可能需要提供更多信息才能獲得智能答案。有些平臺會一次獲取所有行,讓您循環瀏覽它們,有些平臺只會在您移動它們時拉動行。

+0

因此,根據createStatement實現,executeQuery調用可能會導致內存溢出。是否還有方法可以分析代碼,並且可以自動將查詢拆分爲塊? (爲了清楚起見,是查詢總是檢索數據?或者你會說它是select查詢然後呢?) – KeyboardDrummer 2010-10-06 17:07:01

+0

我想你說的是JAVA特定的,我想的更一般。我不是一個JDBC或JAVA的人,你可能想用更多的語言/平臺/數據庫類型信息來標記你的問題 – Roadie57 2010-10-06 17:20:08