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

📄 resultsetdynaclass.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.sql.ResultSet;import java.sql.SQLException;import java.util.HashMap;import java.util.Iterator;/** * <p>Implementation of <code>DynaClass</code> for DynaBeans that wrap the * <code>java.sql.Row</code> objects of a <code>java.sql.ResultSet</code>. * The normal usage pattern is something like:</p> * <pre> *   ResultSet rs = ...; *   ResultSetDynaClass rsdc = new ResultSetDynaClass(rs); *   Iterator rows = rsdc.iterator(); *   while (rows.hasNext())  { *     DynaBean row = (DynaBean) rows.next(); *     ... process this row ... *   } *   rs.close(); * </pre> * * <p>Each column in the result set will be represented as a DynaBean * property of the corresponding name (optionally forced to lower case * for portability).</p> * * <p><strong>WARNING</strong> - Any {@link DynaBean} instance returned by * this class, or from the <code>Iterator</code> returned by the * <code>iterator()</code> method, is directly linked to the row that the * underlying result set is currently positioned at.  This has the following * implications:</p> * <ul> * <li>Once you retrieve a different {@link DynaBean} instance, you should *     no longer use any previous instance.</li> * <li>Changing the position of the underlying result set will change the *     data that the {@link DynaBean} references.</li> * <li>Once the underlying result set is closed, the {@link DynaBean} *     instance may no longer be used.</li> * </ul> * * <p>Any database data that you wish to utilize outside the context of the * current row of an open result set must be copied.  For example, you could * use the following code to create standalone copies of the information in * a result set:</p> * <pre> *   ArrayList results = new ArrayList(); // To hold copied list *   ResultSetDynaClass rsdc = ...; *   DynaProperty properties[] = rsdc.getDynaProperties(); *   BasicDynaClass bdc = *     new BasicDynaClass("foo", BasicDynaBean.class, *                        rsdc.getDynaProperties()); *   Iterator rows = rsdc.iterator(); *   while (rows.hasNext()) { *     DynaBean oldRow = (DynaBean) rows.next(); *     DynaBean newRow = bdc.newInstance(); *     PropertyUtils.copyProperties(newRow, oldRow); *     results.add(newRow); *   } * </pre> * * @author Craig R. McClanahan * @version $Revision: 1.15 $ $Date: 2004/02/28 13:18:33 $ */public class ResultSetDynaClass extends JDBCDynaClass implements DynaClass {    // ----------------------------------------------------------- Constructors    /**     * <p>Construct a new ResultSetDynaClass 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 ResultSetDynaClass(ResultSet resultSet) throws SQLException {        this(resultSet, true);    }    /**     * <p>Construct a new ResultSetDynaClass 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 ResultSetDynaClass(ResultSet resultSet, boolean lowerCase)        throws SQLException {        if (resultSet == null) {            throw new NullPointerException();        }        this.resultSet = resultSet;        this.lowerCase = lowerCase;        introspect(resultSet);    }    // ----------------------------------------------------- Instance Variables    /**     * <p>The <code>ResultSet</code> we are wrapping.</p>     */    protected ResultSet resultSet = null;    // --------------------------------------------------------- Public Methods    /**     * <p>Return an <code>Iterator</code> of {@link DynaBean} instances for     * each row of the wrapped <code>ResultSet</code>, in "forward" order.     * Unless the underlying result set supports scrolling, this method     * should be called only once.</p>     */    public Iterator iterator() {        return (new ResultSetIterator(this));    }    // -------------------------------------------------------- Package Methods    /**     * <p>Return the result set we are wrapping.</p>     */    ResultSet getResultSet() {        return (this.resultSet);    }    // ------------------------------------------------------ Protected Methods        /**     * <p>Loads the class of the given name which by default uses the class loader used      * to load this library.     * Dervations of this class could implement alternative class loading policies such as     * using custom ClassLoader or using the Threads's context class loader etc.     * </p>     */            protected Class loadClass(String className) throws SQLException {        try {            return getClass().getClassLoader().loadClass(className);        }         catch (Exception e) {            throw new SQLException("Cannot load column class '" +                                   className + "': " + e);        }    }}

⌨️ 快捷键说明

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