日期:2014-05-16 浏览次数:20378 次
// 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;
}