原以为 statement的executequery()会将所有结果返回。
比如
之前以为,执行到这里时,数据已经保存在变量rs中,如果数据量很大,会把内存撑爆;
经过最近的一次测试发现,其实rs中只保存少量数据(如10条),其他数据依旧只在数据库服务器中,
通过rs.next()少量数据取完后,才会从数据库取数据到本地;并且rs.next()速度非常快,多个线程处理时,从服务器获取数据的速度非常惊人,经测试,速度的瓶颈在于网络带宽。
应用该特点,可以实现单表数据的快速导出
比如
Statement stmt = null;
String query = "select * from tab1";
try {
stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(query);
之前以为,执行到这里时,数据已经保存在变量rs中,如果数据量很大,会把内存撑爆;
经过最近的一次测试发现,其实rs中只保存少量数据(如10条),其他数据依旧只在数据库服务器中,
通过rs.next()少量数据取完后,才会从数据库取数据到本地;并且rs.next()速度非常快,多个线程处理时,从服务器获取数据的速度非常惊人,经测试,速度的瓶颈在于网络带宽。
应用该特点,可以实现单表数据的快速导出
本文澄清了关于使用Java中的Statement的executeQuery()方法的一个常见误解。实际上,此方法并不会一次性加载所有查询结果到内存中,而是仅加载部分数据。通过ResultSet的next()方法可以按需加载更多数据,而其效率主要受限于网络带宽。
666

被折叠的 条评论
为什么被折叠?



