java数据库

koil 2007-04-18 02:46:03
一段代码如下:
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感觉慢复杂的~
...全文
315 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
lgsx2005 2007-04-18
  • 打赏
  • 举报
回复
高手太多
学无止境
koil 2007-04-18
  • 打赏
  • 举报
回复
15524655 我的QQ,我是没毕业的,出来实习~谢谢您
WIN_ANGEL 2007-04-18
  • 打赏
  • 举报
回复
我们公司工作时间不让上QQ 郁闷 也许晚上我可以上 我也是一个刚做J2EE的小JAVA程序员 可以互相学习交流一下 如果你想和我交流的话可以把你的QQ给我 我晚上加你 我是上星期才在这里注册的 感觉自己好差啊 这里的高手太多了 还要继续学习~
koil 2007-04-18
  • 打赏
  • 举报
回复
谢谢楼上。。。。返回集合
后上有联系方式么??谢谢哈。。QQ,MSN?
WIN_ANGEL 2007-04-18
  • 打赏
  • 举报
回复
可能我说的不对 但是我做过的项目和我看到过的项目 如果是用java方法访问数据库的话基本都是返回集合类的对象 因为访问数据库查询就是为了显示 封装成一个集合返回给页面迭代显示是再好不过的结果 相对于持续连接数据库给服务器带来的压力来说 处理返回集合结果的速度根本不算什么 而且本身集合类也不慢 如果没有连接池的话 而连接数据库又不关闭的话 服务器的负载是很大的1个人用还好 但是如果多个人用都连数据库 然后又都不关闭......我想就算是“深蓝”那样的超级电脑做服务器 也一样会down掉
koil 2007-04-18
  • 打赏
  • 举报
回复
还有就是 如果不要把N多的SQL语句写在程序中?
看过一些东西说把每个表建立一个bean,那具体的查询怎么搞?
有没有这样的一个例子呀
koil 2007-04-18
  • 打赏
  • 举报
回复
WIN_ANGEL(WIN_ANGEL) 我知道finally会执行的,但是返回的ResultSet是当前ResultSet的副本还是引用?关闭后。返回的ResultSet还可以使用么?
谢谢您,您的第2个方法会不会比较慢?
谢谢 WIN_ANGEL(WIN_ANGEL)
WIN_ANGEL 2007-04-18
  • 打赏
  • 举报
回复
楼主注意看上2个程序里finally以后的语句 对于try{}catch{}finally{}的组合 finally是必定会执行的(如果有怀疑可以查阅相应资料) 因此在那里关闭数据库连接
WIN_ANGEL 2007-04-18
  • 打赏
  • 举报
回复
上面程序中的v.put(metaData.getColumnLabel(i),result.getObject(i)); 这句eclipse可能会警告让你引用参数化 不用理他 不影响使用
WIN_ANGEL 2007-04-18
  • 打赏
  • 举报
回复
通用方法接收一个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;
}
koil 2007-04-18
  • 打赏
  • 举报
回复
WIN_ANGEL(WIN_ANGEL)返回的ReslutSet还能用么?
koil 2007-04-18
  • 打赏
  • 举报
回复
楼上,程序是实时和DB交互的,所以就没有关闭过Connection....
WIN_ANGEL 2007-04-18
  • 打赏
  • 举报
回复
public class Dao {
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();
}
}
}
}
连完了数据库一定要关否则多强的服务器都的完 最好配个连接池
kevinliuu 2007-04-18
  • 打赏
  • 举报
回复
把Connection关闭

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧