我有一个自编的迷你库,应该使用反射和注释来处理MySQL数据库。由于某种原因,我的应用程序使用其代码具有内存泄漏问题。当我对它进行分析时,它检测到char数组的大量内存消耗。任何人都可以解释我的错吗? (导致内存泄漏的函数代码之一)
public List select(Class clazz, String condition, Object... values) throws Exception{
Table tbl = (Table) clazz.getAnnotation(Table.class);
if(tbl==null) throw new Exception("Specified class doesnt contain table information");
StringBuilder strb = new StringBuilder().append("SELECT * FROM `");
strb.append(prefix).append(tbl.name());
strb.append("` WHERE ");
strb.append(condition);
PreparedStatement stmt = con.prepareStatement(strb.toString());
for (int i = 0; i < values.length; i++) {
stmt.setObject(i + 1, values[i]);
}
ResultSet rs = stmt.executeQuery();
ArrayList result = new ArrayList<>();
while(rs.next()){
Object o = clazz.newInstance();
for(Field f : clazz.getFields()){
Table.Column col = f.getAnnotation(Table.Column.class);
if(col!=null){
if(!f.isAccessible())
f.setAccessible(true);
f.set(o, rs.getObject(f.getName()));
}
}
result.add(o);
}
return result;
}
提前谢谢你。 PS我没有在此函数返回的List中使用List或元素用于测试目的
答案 0 :(得分:2)
您必须关闭结果集和声明。