public List<Object[]> getRows( ResultSet rset, int limit, ProgressMonitorListener monitor ) throws KettleDatabaseException { try { List<Object[]> result = new ArrayList<>(); boolean stop = false; int i = 0; if ( rset != null ) { if ( monitor != null && limit > 0 ) { monitor.beginTask( "Reading rows...", limit ); } while ( ( limit <= 0 || i < limit ) && !stop ) { Object[] row = getRow( rset ); if ( row != null ) { result.add( row ); i++; } else { stop = true; } if ( monitor != null && limit > 0 ) { monitor.worked( 1 ); } if ( monitor != null && monitor.isCanceled() ) { break; } } closeQuery( rset ); if ( monitor != null ) { monitor.done(); } } return result; } catch ( Exception e ) { throw new KettleDatabaseException( "Unable to get list of rows from ResultSet : ", e ); } }
时间: 2024-02-10 10:22:03 浏览: 74
set rs=conn.execute,set rs=server.createobject(“ADODB.recordset”)的性能对比
这段代码是一个Java方法,用于从数据库查询结果中获取数据行,并将其转换为一个包含Object数组的List列表。方法的输入参数包括一个ResultSet对象(数据库查询结果集)、一个限制获取数据行数量的整数limit,以及一个可选的进度监控器ProgressMonitorListener。方法的返回值是一个List<Object[]>类型的集合,其中每个元素都是一个Object类型的数组,表示一行数据。
方法首先创建一个空的ArrayList集合result,用于存储查询结果中的数据行。然后通过while循环依次获取ResultSet中的每一行数据,并将其转换为Object数组。如果获取到的数据行不为空,则将其添加到result集合中,并将计数器i加1。如果获取到的数据行为空,则停止循环。
在获取每一行数据之前,方法会检查进度监控器和数据行数量限制,如果需要进行进度监控,则调用monitor.beginTask()方法开始任务,并在每次获取到数据行后调用monitor.worked()方法更新任务进度。如果数据行数量达到了限制,或者进度监控器被取消,则停止循环。最后,方法调用closeQuery()方法关闭ResultSet对象,并返回result集合。如果在方法执行过程中捕获到异常,则将其包装为KettleDatabaseException异常并抛出。
阅读全文