How to copy resultset into object?

后端 未结 2 619
渐次进展
渐次进展 2021-01-26 13:36

I am using the following to add retrieved values to the class. all values will be added to attributes of the class but I am using compisition ( have an object of class in the cl

相关标签:
2条回答
  • 2021-01-26 14:01

    The BeanProcessor.toBean works like this:

    Convert a ResultSet row into a JavaBean. This implementation uses reflection and BeanInfo classes to match column names to bean property names. Properties are matched to columns based on several factors:

    • The class has a writable property with the same name as a column. The name comparison is case insensitive.
    • The column type can be converted to the property's set method parameter type with a ResultSet.get* method. If the conversion fails (ie. the property was an int and the column was a Timestamp) an SQLException is thrown.

    Primitive bean properties are set to their defaults when SQL NULL is returned from the ResultSet. Numeric fields are set to 0 and booleans are set to false. Object bean properties are set to null when SQL NULL is returned. This is the same behavior as the ResultSet get* methods.

    May be the address is not a writable property. Pls do check it.

    0 讨论(0)
  • 2021-01-26 14:06
     public static Object copyFromResultSet(Class clazz, ResultSet resultSet)
    {
        ArrayList objectArrayList = new ArrayList(1);
        try
        {
            Object object = clazz.newInstance();
            objectArrayList.add(object);
            copyFromResultSet(objectArrayList, resultSet);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        return objectArrayList.get(0);
    }     
    

    then:

    public static void copyFromResultSet(ArrayList<Object> objectArrayList, ResultSet resultSet)
    {
        ArrayList arrayList = null;
        try
        {
            if (objectArrayList != null)
            {
                int objectArrayList_len = objectArrayList.size();
                int objectArrayList_index = 0;
                java.beans.BeanInfo toBeanInfo[] = new java.beans.BeanInfo[objectArrayList_len];
    
                Vector<Method> objectMethodVector[] = new Vector[objectArrayList_len];
                Vector<Type> objectTypeVector[] = new Vector[objectArrayList_len];
                int totalMethod[] = new int[objectArrayList_len];
                int[][] indexes = new int[objectArrayList_len][];
    
                for (objectArrayList_index = 0; objectArrayList_index < objectArrayList_len; objectArrayList_index++)
                {
                    toBeanInfo[objectArrayList_index] = java.beans.Introspector.getBeanInfo(objectArrayList.get(objectArrayList_index).getClass());
                }
                if (objectArrayList_len > 0 && resultSet != null)
                {
                    Method method = null;
                    Type type[] = null;
                    int cols = 0;
                    String colName = null;
                    for (objectArrayList_index = 0; objectArrayList_index < objectArrayList_len; objectArrayList_index++)
                    {
                        //toBeanInfo[objectArrayList_index]=java.beans.Introspector.getBeanInfo(objectArrayList.get(objectArrayList_index).getClass());
                        java.beans.PropertyDescriptor toPropertyDescriptor[] = toBeanInfo[objectArrayList_index].getPropertyDescriptors();
                        int toPropertyDescriptor_length = toPropertyDescriptor.length;
                        method = null;
                        type = null;
    
                        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
    
                        cols = resultSetMetaData.getColumnCount();
                        colName = null;
    
                        Vector<Method> methodVector = new Vector(cols);
                        Vector<Type> typeVector = new Vector(cols);
    
                        indexes[objectArrayList_index] = new int[cols];
                        totalMethod[objectArrayList_index] = -1;
                        for (int i = 1; i <= cols; i++)
                        {
                            colName = resultSetMetaData.getColumnName(i);
                            for (int j = 0; j < toPropertyDescriptor_length; j++)
                            {
                                if (toPropertyDescriptor[j].getName().equalsIgnoreCase(colName))
                                {
                                    totalMethod[objectArrayList_index]++;
                                    method = toPropertyDescriptor[j].getWriteMethod();
                                    type = method.getGenericParameterTypes();
                                    methodVector.add(method);
                                    typeVector.add(type[0]);
                                    indexes[objectArrayList_index][totalMethod[objectArrayList_index]] = i;
                                    break;
                                }
                            }
                        }
                        objectMethodVector[objectArrayList_index] = (methodVector);
                        objectTypeVector[objectArrayList_index] = (typeVector);
                    }
    
                    if (resultSet.next())
                    {
                        arrayList = new ArrayList();
                        for (objectArrayList_index = 0; objectArrayList_index < objectArrayList_len; objectArrayList_index++)
                        {
                            for (int i = 0; i <= totalMethod[objectArrayList_index]; i++)
                            {
                                //System.out.println(objectMethodVector[objectArrayList_index].get(i));
                                objectMethodVector[objectArrayList_index].get(i).invoke(objectArrayList.get(objectArrayList_index), getObject(indexes[objectArrayList_index][i], objectTypeVector[objectArrayList_index].get(i), resultSet));
                            }
                            arrayList.add(objectArrayList.get(objectArrayList_index));
                        }
                    }
                    while (resultSet.next())
                    {
                        for (objectArrayList_index = 0; objectArrayList_index < objectArrayList_len; objectArrayList_index++)
                        {
                            for (int i = 0; i <= totalMethod[objectArrayList_index]; i++)
                            {
                                objectMethodVector[objectArrayList_index].get(i).invoke(objectArrayList.get(objectArrayList_index), getObject(indexes[objectArrayList_index][i], objectTypeVector[objectArrayList_index].get(i), resultSet));
                            }
                            arrayList.add(objectArrayList.get(objectArrayList_index));
                        }
                    }
                }
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    } 
    

    just copy paste this code call method copyFromResultSet(class, ResultSet ) pass two perameters first is class name and second is resultset.

    i am sure this is working properlly

    0 讨论(0)
提交回复
热议问题