一段代码如下:
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感觉慢复杂的~
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感觉慢复杂的~
Statement stat = null;
ResultSet rs = null;
public ResultSet exec_query(String sql){
try{
stat=con.createStatement();
rs=stat.executeQuery("sql");
return rs;
}catch(SQLException e){
e.printStackTrace();
return null;
}finally {
try {
if (rs != null) {
rs.close();
}
if (stat != null) {
prepStmt.close();
}
if (con != null) {
con.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
连完了数据库一定要关否则多强的服务器都的完 最好配个连接池
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;
}
谢谢您,您的第2个方法会不会比较慢?
谢谢 WIN_ANGEL(WIN_ANGEL)
看过一些东西说把每个表建立一个bean,那具体的查询怎么搞?
有没有这样的一个例子呀
后上有联系方式么??谢谢哈。。QQ,MSN?