[ https://issues.apache.org/jira/browse/DBUTILS-37?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Julien Aymé updated DBUTILS-37: ------------------------------- Attachment: OptimalBeanListHandler.java OptimalBeanListHandler.patch The new OptimalBeanListHandler class (whole file and patch). With the change I propose, the BeanListHandler#handleRow(ResultSet) method is never called anymore. So, any subclass of BeanListHandler which would override this method would not work properly anymore. In order to prevent this from happening, I preferred to create a new class (named OptimalBeanListHandler - created from BeanListHandler with svn copy), which would implements ResultSetHandler directly rather than extends GenericListHandler. > BeanListHandler#handle(ResultSet) is not optimal > ------------------------------------------------ > > Key: DBUTILS-37 > URL: https://issues.apache.org/jira/browse/DBUTILS-37 > Project: Commons DbUtils > Issue Type: Improvement > Reporter: Julien Aymé > Priority: Minor > Attachments: OptimalBeanListHandler.java, OptimalBeanListHandler.patch > > > I use the BeanListHandler for huge ResultSets (about 1000000 rows), and I > searched through the code to see if I could gain little time. > It appeared to me that the following code - in BeanProcessor.class - was > executed too many times: > PropertyDescriptor[] props = this.propertyDescriptors(type); > ResultSetMetaData rsmd = rs.getMetaData(); > int[] columnToProperty = this.mapColumnsToProperties(rsmd, props); > for the following reason. > Since BeanListHandler extends GenericListHandler, the method > #handle(ResultSet) calls #handleRow(ResultSet) for each row in the ResultSet, > which in the case of a BeanListHandler, calls RowProcessor#toBean(ResultSet, > Class), > which itself calls BeanProcessor#toBean(ResultSet, Class). > A very simple way to make the BeanListHandler#handle(ResultSet) method faster > is to override the GenericListHandler#handle(ResultSet) method by this code: > public Object handle(ResultSet rs) throws SQLException { > return this.convert.toBeanList(rs, type); > } > This way, the code I showed would be called only once, as it would not call > BeanProcessor#toBean(ResultSet, Class) for each row but > BeanProcessor#toBeanList(ResultSet, Class). -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]