2010-10-06 80 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