⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rowsetdynaclass.java

📁 apache beanutils开源项目源码
💻 JAVA
字号:
/* * Copyright 2001-2004 The Apache Software Foundation. *  * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at *  *      http://www.apache.org/licenses/LICENSE-2.0 *  * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.commons.beanutils;import java.io.Serializable;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;/** * <p>Implementation of {@link DynaClass} that creates an in-memory collection * of {@link DynaBean}s representing the results of an SQL query.  Once the * {@link DynaClass} instance has been created, the JDBC <code>ResultSet</code> * and <code>Statement</code> on which it is based can be closed, and the * underlying <code>Connection</code> can be returned to its connection pool * (if you are using one).</p> * * <p>The normal usage pattern is something like:</p> * <pre> *   Connection conn = ...;  // Acquire connection from pool *   Statement stmt = conn.createStatement(); *   ResultSet rs = stmt.executeQuery("SELECT ..."); *   RowSetDynaClass rsdc = new RowSetDynaClass(rs); *   rs.close(); *   stmt.close(); *   ...;                    // Return connection to pool *   List rows = rsdc.getRows(); *   ...;                   // Process the rows as desired * </pre> * * <p>Each column in the result set will be represented as a {@link DynaBean} * property of the corresponding name (optionally forced to lower case * for portability).  There will be one {@link DynaBean} in the * <code>List</code> returned by <code>getRows()</code> for each * row in the original <code>ResultSet</code>.</p> * * <p>In general, instances of {@link RowSetDynaClass} can be serialized * and deserialized, which will automatically include the list of * {@link DynaBean}s representing the data content.  The only exception * to this rule would be when the underlying property values that were * copied from the <code>ResultSet</code> originally cannot themselves * be serialized.  Therefore, a {@link RowSetDynaClass} makes a very * convenient mechanism for transporting data sets to remote Java-based * application components.</p> * * @author Craig R. McClanahan * @version $Revision: 1.9 $ $Date: 2004/02/28 13:18:34 $ */public class RowSetDynaClass extends JDBCDynaClass implements DynaClass, Serializable {    // ----------------------------------------------------- Instance variables        /**     * <p>Limits the size of the returned list.  The call to      * <code>getRows()</code> will return at most limit number of rows.     * If less than or equal to 0, does not limit the size of the result.     */    protected int limit = -1;    /**     * <p>The list of {@link DynaBean}s representing the contents of     * the original <code>ResultSet</code> on which this     * {@link RowSetDynaClass} was based.</p>     */    protected List rows = new ArrayList();    // ----------------------------------------------------------- Constructors    /**     * <p>Construct a new {@link RowSetDynaClass} for the specified     * <code>ResultSet</code>.  The property names corresponding     * to column names in the result set will be lower cased.</p>     *     * @param resultSet The result set to be wrapped     *     * @exception NullPointerException if <code>resultSet</code>     *  is <code>null</code>     * @exception SQLException if the metadata for this result set     *  cannot be introspected     */    public RowSetDynaClass(ResultSet resultSet) throws SQLException {        this(resultSet, true, -1);    }    /**     * <p>Construct a new {@link RowSetDynaClass} for the specified     * <code>ResultSet</code>.  The property names corresponding     * to column names in the result set will be lower cased.</p>     *      * If <code>limit</code> is not less than 0, max <code>limit</code>     * number of rows will be copied into the list.      *     * @param resultSet The result set to be wrapped     * @param limit The maximum for the size of the result.      *     * @exception NullPointerException if <code>resultSet</code>     *  is <code>null</code>     * @exception SQLException if the metadata for this result set     *  cannot be introspected     */    public RowSetDynaClass(ResultSet resultSet, int limit) throws SQLException {        this(resultSet, true, limit);    }    /**     * <p>Construct a new {@link RowSetDynaClass} for the specified     * <code>ResultSet</code>.  The property names corresponding     * to the column names in the result set will be lower cased or not,     * depending on the specified <code>lowerCase</code> value.</p>     *     * If <code>limit</code> is not less than 0, max <code>limit</code>     * number of rows will be copied into the resultset.      *     *     * @param resultSet The result set to be wrapped     * @param lowerCase Should property names be lower cased?     *     * @exception NullPointerException if <code>resultSet</code>     *  is <code>null</code>     * @exception SQLException if the metadata for this result set     *  cannot be introspected     */    public RowSetDynaClass(ResultSet resultSet, boolean lowerCase)                                                    throws SQLException {        this(resultSet, lowerCase, -1);    }	    /**     * <p>Construct a new {@link RowSetDynaClass} for the specified     * <code>ResultSet</code>.  The property names corresponding     * to the column names in the result set will be lower cased or not,     * depending on the specified <code>lowerCase</code> value.</p>     *     * <p><strong>WARNING</strong> - If you specify <code>false</code>     * for <code>lowerCase</code>, the returned property names will     * exactly match the column names returned by your JDBC driver.     * Because different drivers might return column names in different     * cases, the property names seen by your application will vary     * depending on which JDBC driver you are using.</p>     *     * @param resultSet The result set to be wrapped     * @param lowerCase Should property names be lower cased?     *     * @exception NullPointerException if <code>resultSet</code>     *  is <code>null</code>     * @exception SQLException if the metadata for this result set     *  cannot be introspected     */    public RowSetDynaClass(ResultSet resultSet, boolean lowerCase, int limit)                                                            throws SQLException {        if (resultSet == null) {            throw new NullPointerException();        }        this.lowerCase = lowerCase;        this.limit = limit;        introspect(resultSet);        copy(resultSet);    }    /**     * <p>Return a <code>List</code> containing the {@link DynaBean}s that     * represent the contents of each <code>Row</code> from the     * <code>ResultSet</code> that was the basis of this     * {@link RowSetDynaClass} instance.  These {@link DynaBean}s are     * disconnected from the database itself, so there is no problem with     * modifying the contents of the list, or the values of the properties     * of these {@link DynaBean}s.  However, it is the application's     * responsibility to persist any such changes back to the database,     * if it so desires.</p>     */    public List getRows() {        return (this.rows);    }    // ------------------------------------------------------ Protected Methods    /**     * <p>Copy the column values for each row in the specified     * <code>ResultSet</code> into a newly created {@link DynaBean}, and add     * this bean to the list of {@link DynaBean}s that will later by     * returned by a call to <code>getRows()</code>.</p>     *     * @param resultSet The <code>ResultSet</code> whose data is to be     *  copied     *     * @exception SQLException if an error is encountered copying the data     */    protected void copy(ResultSet resultSet) throws SQLException {        int cnt = 0;        while (resultSet.next() && (limit < 0  || cnt++ < limit) ) {	            DynaBean bean = createDynaBean();            for (int i = 0; i < properties.length; i++) {                String name = properties[i].getName();                bean.set(name, resultSet.getObject(name));            }            rows.add(bean);        }    }    /**     * <p>Create and return a new {@link DynaBean} instance to be used for     * representing a row in the underlying result set.</p>     */    protected DynaBean createDynaBean() {        return (new BasicDynaBean(this));    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -