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

📄 basicrowprocessor.java

📁 实现了从Google
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* * $Header: /home/cvs/jakarta-commons/dbutils/src/java/org/apache/commons/dbutils/BasicRowProcessor.java,v 1.5 2003/11/11 00:53:19 dgraham Exp $ * $Revision: 1.5 $ * $Date: 2003/11/11 00:53:19 $ *  * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 2002-2003 The Apache Software Foundation.  All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in *    the documentation and/or other materials provided with the *    distribution. * * 3. The end-user documentation included with the redistribution, if *    any, must include the following acknowledgement: *       "This product includes software developed by the *        Apache Software Foundation (http://www.apache.org/)." *    Alternately, this acknowledgement may appear in the software itself, *    if and wherever such third-party acknowledgements normally appear. * * 4. The names "The Jakarta Project", "Commons", and "Apache Software *    Foundation" must not be used to endorse or promote products derived *    from this software without prior written permission. For written *    permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" *    nor may "Apache" appear in their names without prior written *    permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation.  For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * */package org.apache.commons.dbutils;import java.beans.BeanInfo;import java.beans.IntrospectionException;import java.beans.Introspector;import java.beans.PropertyDescriptor;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;/** * Basic implementation of the <code>RowProcessor</code> interface. * This class is a thread-safe Singleton. *  * @see RowProcessor *  * @author Henri Yandell * @author Juozas Baliuka * @author David Graham * @author Yoav Shapira */public class BasicRowProcessor implements RowProcessor {    /**     * Set a bean's primitive properties to these defaults when SQL NULL      * is returned.  These are the same as the defaults that ResultSet get*      * methods return in the event of a NULL column.     */    private static final Map primitiveDefaults = new HashMap();    static {        primitiveDefaults.put(Integer.TYPE, new Integer(0));        primitiveDefaults.put(Short.TYPE, new Short((short) 0));        primitiveDefaults.put(Byte.TYPE, new Byte((byte) 0));        primitiveDefaults.put(Float.TYPE, new Float(0));        primitiveDefaults.put(Double.TYPE, new Double(0));        primitiveDefaults.put(Long.TYPE, new Long(0));        primitiveDefaults.put(Boolean.TYPE, Boolean.FALSE);        primitiveDefaults.put(Character.TYPE, new Character('\u0000'));    }    /**     * Special array index that indicates there is no bean property that     * matches a column from a ResultSet.     */    private static final int PROPERTY_NOT_FOUND = -1;    /**     * The Singleton instance of this class.     */    private static final BasicRowProcessor instance = new BasicRowProcessor();    /**     * Returns the Singleton instance of this class.     *     * @return The single instance of this class.     */    public static BasicRowProcessor instance() {        return instance;    }    /**     * Protected constructor for BasicRowProcessor subclasses only.     */    protected BasicRowProcessor() {        super();    }    /**     * Convert a <code>ResultSet</code> row into an <code>Object[]</code>.     * This implementation copies column values into the array in the same      * order they're returned from the <code>ResultSet</code>.  Array elements     * will be set to <code>null</code> if the column was SQL NULL.     *     * @see org.apache.commons.dbutils.RowProcessor#toArray(java.sql.ResultSet)     */    public Object[] toArray(ResultSet rs) throws SQLException {        ResultSetMetaData meta = rs.getMetaData();        int cols = meta.getColumnCount();        Object[] result = new Object[cols];        for (int i = 0; i < cols; i++) {            result[i] = rs.getObject(i + 1);        }        return result;    }    /**     * Convert a <code>ResultSet</code> row into a JavaBean.  This      * implementation uses reflection and <code>BeanInfo</code> classes to      * match column names to bean property names.  Properties are matched to      * columns based on several factors:     * <br/>     * <ol>     *     <li>     *     The class has a writable property with the same name as a column.     *     The name comparison is case insensitive.     *     </li>     *      *     <li>     *     The property's set method parameter type matches the column      *     type. If the data types do not match, the setter will not be called.     *     </li>     * </ol>     *      * <p>     * Primitive bean properties are set to their defaults when SQL NULL is     * returned from the <code>ResultSet</code>.  Numeric fields are set to 0     * and booleans are set to false.  Object bean properties are set to      * <code>null</code> when SQL NULL is returned.  This is the same behavior     * as the <code>ResultSet</code> get* methods.     * </p>     *      * @see org.apache.commons.dbutils.RowProcessor#toBean(java.sql.ResultSet, java.lang.Class)     */    public Object toBean(ResultSet rs, Class type) throws SQLException {        PropertyDescriptor[] props = this.propertyDescriptors(type);        ResultSetMetaData rsmd = rs.getMetaData();        int[] columnToProperty = this.mapColumnsToProperties(rsmd, props);        int cols = rsmd.getColumnCount();        return this.createBean(rs, type, props, columnToProperty, cols);    }    /**     * Convert a <code>ResultSet</code> into a <code>List</code> of JavaBeans.       * This implementation uses reflection and <code>BeanInfo</code> classes to      * match column names to bean property names. Properties are matched to      * columns based on several factors:     * <br/>     * <ol>     *     <li>     *     The class has a writable property with the same name as a column.     *     The name comparison is case insensitive.     *     </li>     *      *     <li>     *     The property's set method parameter type matches the column      *     type. If the data types do not match, the setter will not be called.     *     </li>     * </ol>     *      * <p>     * Primitive bean properties are set to their defaults when SQL NULL is     * returned from the <code>ResultSet</code>.  Numeric fields are set to 0     * and booleans are set to false.  Object bean properties are set to      * <code>null</code> when SQL NULL is returned.  This is the same behavior     * as the <code>ResultSet</code> get* methods.     * </p>     *      * @see org.apache.commons.dbutils.RowProcessor#toBeanList(java.sql.ResultSet, java.lang.Class)     */    public List toBeanList(ResultSet rs, Class type) throws SQLException {        List results = new ArrayList();        if (!rs.next()) {            return results;        }        PropertyDescriptor[] props = this.propertyDescriptors(type);        ResultSetMetaData rsmd = rs.getMetaData();        int[] columnToProperty = this.mapColumnsToProperties(rsmd, props);        int cols = rsmd.getColumnCount();        do {            results.add(this.createBean(rs, type, props, columnToProperty, cols));        } while (rs.next());        return results;    }    /**     * Creates a new object and initializes its fields from the ResultSet.     *     * @param rs The result set     * @param type The bean type (the return type of the object)     * @param props The property descriptors     * @param columnToProperty The column indices in the result set     * @param cols The number of columns     * @return An initialized object.     * @throws SQLException If a database error occurs     */    private Object createBean(        ResultSet rs,        Class type,        PropertyDescriptor[] props,        int[] columnToProperty,        int cols)        throws SQLException {

⌨️ 快捷键说明

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