[jira] Closed: (DBUTILS-37) BeanListHandler#handle(ResultSet) is not optimal

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view

[jira] Closed: (DBUTILS-37) BeanListHandler#handle(ResultSet) is not optimal

JIRA jira@apache.org

     [ https://issues.apache.org/jira/browse/DBUTILS-37?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Henri Yandell closed DBUTILS-37.

       Resolution: Fixed
    Fix Version/s: 1.2

svn ci -m "Merging in Dab Fabulich's work on https://svn.apache.org/repos/asf/commons/sandbox/dbutils/bugfixing from -r741987:747723. Resolving DBUTILS-34 - DBUTILS-37 - DBUTILS-29 - DBUTILS-14 - DBUTILS-31 - DBUTILS-39 - DBUTILS-41 - DBUTILS-44 - DBUTILS-33 - DBUTILS-42 - DBUTILS-40"  

Sending        pom.xml
Sending        src/java/org/apache/commons/dbutils/BasicRowProcessor.java
Sending        src/java/org/apache/commons/dbutils/BeanProcessor.java
Sending        src/java/org/apache/commons/dbutils/QueryRunner.java
Adding         src/java/org/apache/commons/dbutils/handlers/AbstractListHandler.java
Sending        src/java/org/apache/commons/dbutils/handlers/ArrayListHandler.java
Sending        src/java/org/apache/commons/dbutils/handlers/BeanListHandler.java
Sending        src/java/org/apache/commons/dbutils/handlers/ColumnListHandler.java
Deleting       src/java/org/apache/commons/dbutils/handlers/GenericListHandler.java
Sending        src/java/org/apache/commons/dbutils/handlers/MapListHandler.java
Sending        src/test/org/apache/commons/dbutils/BaseTestCase.java
Adding         src/test/org/apache/commons/dbutils/QueryRunnerTest.java
Transmitting file data .........
Committed revision 747724.

> 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
>             Fix For: 1.2
>         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:
> {code}
>         PropertyDescriptor[] props = this.propertyDescriptors(type);
>         ResultSetMetaData rsmd = rs.getMetaData();
>         int[] columnToProperty = this.mapColumnsToProperties(rsmd, props);
> {code}
> 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:
> {code}
>     public Object handle(ResultSet rs) throws SQLException {
>         return this.convert.toBeanList(rs, type);
>     }
> {code}
> 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.