日期:2014-05-16 浏览次数:20377 次
            // sql语句
            StringBuffer sql = new StringBuffer("insert into");
            sql.append(tableName).append("(");
            // 参数,实际上对应表字段
            StringBuffer params = new StringBuffer(" values(");
            // 字段值
            ArrayList values = new ArrayList();
     
            //解析属性信息
            Field[] fields = obj.getClass().getDeclaredFields();
            for (int i = 0; i < fields.length; i++) {
                Field field = fields[i];
                // 设置安全访问权限,true可以访问私有属性
                field.setAccessible(true);
                // 属性名
                String fieldName = field.getName();
                Object value = field.get(obj);
                sql.append(fieldName + ",");
                params.append("?,");
                values.add(value);
             }
             
             sql.append(sql.deleteCharAt(sql.length() -1) + ")");
             params.append(params.deleteCharAt(params.length() -1) + ")");
             sql.append(params);
             PreparedStatement st = conn.prepareStatement(sql.toString());
             for (int i = 0; i < values.size(); i++) {
                st.setObject(i + 1,values.get(i));
             }
             // 执行
             st.executeUpdate();
   /**
     * 
     * 获取目标对象的所有属性(包括继承属性)
     * 
     * @param obj 目标对象
     * @return 所有属性(包括继承属性)
     * @see [类、类#方法、类#成员]
     */
    public Field[] getAllClassField(Object obj) {
        Field[] allfield ;
        // 如果其父类不是Object,则有基类
        if (!obj.getClass().getSuperclass().equals(Object.class)) {
            // 递归,取得其基类的属性数组
            Field[] fields = getAllClassField(obj.getClass().getSuperclass());
            // 取得自己的属性数组
            Field[] myFields = obj.getClass().getDeclaredFields();
            // 属性数组合并
            allfield = new Field[fields.length + myFields.length];
            System.arraycopy(fields, 0, allfield, 0, fields.length);
            System.arraycopy(myFields, 0, allfield, fields.length, myFields.length);
        } else {
            // 没有基类,直接返回自己的属性数组
            allfield = obj.getClass().getDeclaredFields();
        }
        
        return allfield;
    }