java数据库
一段代码如下:
public ResultSet exec_query(String sql){
try{
Statement stat=con.createStatement();
ResultSet rs=stat.executeQuery( "sql ");
return rs;
}catch(
SQLException e){
e.printStackTrace();
return null;
}
}
这段代码封装在一个数据库访问类里,在程序的业务层直接使用ResultSet,然后关闭,Statement没有关闭,几天后程序就会出现out of memory异常,有 没可能是这个原因造成的,还有就是,如果不返回ResultSet,返回一个Collection,因为数据量很大,回不回很慢,
持久层咋设计,看了一些hibernat和ibatis感觉慢复杂的~
------解决方案--------------------通用方法接收一个sql语句 返回一个装有LinkedHashMap的ArrayList集合 其中LinkedHashMap的KEY为数据库字段名 VALUE为该字段的值
public static ArrayList delRes(String sql) {
ArrayList <LinkedHashMap> list = new ArrayList <LinkedHashMap> ();
Connection conn = null;
PreparedStatement stmt = null;
ResultSetMetaData metaData=null;
try {
conn = ConDB.getCon();
stmt = (PreparedStatement) conn.prepareStatement(sql);
ResultSet result = stmt.executeQuery();
metaData=result.getMetaData();
while (result.next()) {
LinkedHashMap v = new LinkedHashMap();
for (int i = 1; i <= metaData.getColumnCount(); i++)
v.put(metaData.getColumnLabel(i),result.getObject(i));
list.add(v);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
return list;
}