减少数据库I / O操作

时间:2010-10-06 16:28:52

标签: database

我是否认为对于具有n个USERS的数据库,以下代码至少与数据库进行了n次交互?

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

那么是否也可以通过与数据库的1次I / O交互从所有用户中提取FAVOURITE_COLOR? 如果用户太多,那么如果这样可能会导致程序中的内存溢出?

2 个答案:

答案 0 :(得分:2)

您的示例代码执行往返数据库。

在一个简单的实现中,executeQuery将等待从数据库中检索整个数据集。然后,对next的每次调用都会立即移至下一行。

答案 1 :(得分:1)

为什么你不能一次获得所有喜爱的彩色唱片?

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

实际上经过进一步思考后,这取决于你所谈论的平台和/或DBMS。您可能需要提供更多有关智能答案的信息。有些平台会立即获取所有行,让您循环浏览它们,有些只会在移动时拉行。