0

以下を使用して、取得した値をクラスに追加しています。すべての値がクラスの属性に追加されますが、私はcompisitionを使用しており(クラスにクラスのオブジェクトがあります)、出力には何も表示されません。

class employee 
{
....
private Address address = new Address();
.....
}
 ...
Employee emp = new Employee();
        try {

            ps = con.prepareStatement("select * from employee,address "
                    + "WHERE employee.username = ? AND "
                    + "employee.ADD_ID = address.ID");

            ps.setString(1, username);
            ResultSet r = ps.executeQuery();
            if (r.next()) {

                BeanProcessor bp = new BeanProcessor();
                emp = bp.toBean(r,Employee.class);
                System.out.println("blockkkk:"+emp.getAddress().getBlock());  
                                            //output of above line is blockkkk:null
            }

            con.close();
            ps.close();
        } catch (SQLException e) {
            System.err.println(e.getMessage());

        }
       return emp;

アドレスクラスは次のとおりです。

  public class Address {
    .....
    private String block;
    ....
      public String getBlock() {
            return block;
        }

        public void setBlock(String block) {
            this.block = block;
        }
    ....
   }
4

2 に答える 2

1

このBeanProcessor.toBeanような作品:

ResultSet行をJavaBeanに変換します。この実装では、リフレクションクラスとBeanInfoクラスを使用して、列名をBeanプロパティ名に一致させます。プロパティは、いくつかの要因に基づいて列と照合されます。

  • このクラスには、列と同じ名前の書き込み可能なプロパティがあります。名前の比較では大文字と小文字は区別されません。
  • 列タイプは、ResultSet.get*メソッドを使用してプロパティのsetメソッドパラメータータイプに変換できます。変換が失敗した場合(つまり、プロパティがintで、列がタイムスタンプだった場合)、SQLExceptionがスローされます。

ResultSetからSQLNULLが返されると、プリミティブBeanのプロパティがデフォルトに設定されます。数値フィールドは0に設定され、ブール値はfalseに設定されます。SQL NULLが返されると、オブジェクトBeanのプロパティはnullに設定されます。これは、ResultSetget*メソッドと同じ動作です。

住所が書き込み可能なプロパティではない可能性があります。plsはそれをチェックします。

于 2013-02-18T05:12:40.917 に答える
0
 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);
}     

それから:

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();
    }
} 

このコードをコピーして貼り付けるだけです。メソッドcopyFromResultSet(class、ResultSet)を呼び出して、2つのパラメーターを渡します。最初はクラス名で、2番目は結果セットです。

私はこれが適切に機能していると確信しています

于 2013-02-20T07:19:48.333 に答える