使用Java动态创建类。
使用Java动态创建类。
我试过找相关的信息,但是一无所获:
我了解到在Java中可以使用反射或代理来动态创建类,但我找不到具体的方法。我正在实现一个简单的数据库框架,其中使用反射来创建SQL查询语句。该方法接收一个带有数据库字段的对象作为参数,并根据该对象创建查询语句。但如果我能动态创建对象本身,那将非常有用,这样我就不需要为每个表格都创建一个简单的数据包装对象了。
动态创建的类只需要简单的字段(String、Integer、Double),例如:
public class Data { public Integer id; public String name; }
这是否可行?如何实现?
编辑:以下是我将如何使用此功能:
/** * 创建一个用于更新数据库中行的值的SQL查询语句。 * * @param entity 表名。 * @param toUpdate 需要更新的字段和值。所有字段将被更新,因此每个字段必须具有有意义的值! * @param idFields 用于标识行的字段。 * @param ids id字段的值。值必须与字段的顺序相同。 * @return */ @Override public String updateItem(String entity, Object toUpdate, String[] idFields, String[] ids) { StringBuilder sb = new StringBuilder(); sb.append("UPDATE "); sb.append(entity); sb.append("SET "); for (Field f: toUpdate.getClass().getDeclaredFields()) { String fieldName = f.getName(); String value = new String(); sb.append(fieldName); sb.append("="); sb.append(formatValue(f)); sb.append(","); } /* 删除最后一个逗号 */ sb.deleteCharAt(sb.toString().length()-1); /* 添加where子句 */ sb.append(createWhereClause(idFields, ids)); return sb.toString(); } /** * 格式化用于SQL查询的值。 * * 此函数假设字段类型与数据库中的字段等效。实际上,这意味着该字段支持两种类型的字段:字符串(varchar)和数字。 * * 字符串类型字段将使用单引号(')转义,因为SQL数据库期望如此。数字则原样返回。 * * 如果字段为null,则返回一个包含"NULL"的字符串。 * * @param f 值所在的字段。 * @return 格式化后的值。 */ String formatValue(Field f) { String retval = null; String type = f.getClass().getName(); if (type.equals("String")) { try { String value = (String)f.get(f); if (value != null) { retval = "'" + value + "'"; } else { retval = "NULL"; } } catch (Exception e) { System.err.println("No such field: " + e.getMessage()); } } else if (type.equals("Integer")) { try { Integer value = (Integer)f.get(f); if (value != null) { retval = String.valueOf(value); } else { retval = "NULL"; } } catch (Exception e) { System.err.println("No such field: " + e.getMessage()); } } else { try { String value = (String) f.get(f); if (value != null) { retval = value; } else { retval = "NULL"; } } catch (Exception e) { System.err.println("No such field: " + e.getMessage()); } } return retval; }