免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234下一页
最近访问板块 发新帖
查看: 6907 | 回复: 38

jsp頁面為何在運行時讓sql server占用了很大的內存? [复制链接]

论坛徽章:
0
发表于 2006-03-06 12:34 |显示全部楼层
各位學哥學姐﹐我用jsp+tomcat+sql server寫了一個web程序﹐每當用戶打開頁面時會發現服務器上的sql server占用內存增加﹐一天能從几十M上升到800M﹐我jsp是通過javabean連接數據庫的﹐望有過相同經歷的學哥學姐給小弟一點經驗﹗

论坛徽章:
0
发表于 2006-03-06 13:33 |显示全部楼层
很有可能是数据库连接没有关

论坛徽章:
0
发表于 2006-03-07 11:00 |显示全部楼层

我的連接數據庫的JAVA文件如下﹐請高手幫我分析一下﹕

package com;

import java.io.PrintStream;
import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.*;

public class conn1
{

    String sDBDriver;
    String url;
    String user;
    String password;
    Connection conn;
    Statement stmt;
    ResultSet rs;

    public conn1()
    {
        sDBDriver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
        url = "jdbc:microsoft:sqlserver://10.99.60.82:1433;DatabaseName=pdm";
        user = "sa";
        password = "pdmsa";
        conn = null;
        stmt = null;
        rs = null;
        try
        {
            Class.forName(sDBDriver);
        }
        catch(ClassNotFoundException classnotfoundexception)
        {
            System.err.println("connect false(): " + classnotfoundexception.getMessage());
        }
    }

    public Connection conn()
    {
        try
        {
            conn = DriverManager.getConnection(url, user, password);
        }
        catch(Exception exception)
        {
            System.err.println("connect false(): " + exception.getMessage());
        }
        return conn;
    }

    public ResultSet executeQuery(String s)   //數據查詢用的代碼
    {
        try
        {
            conn = DriverManager.getConnection(url, user, password);
            stmt = conn.createStatement(1004, 100;
            rs = stmt.executeQuery(s);
        }
        catch(SQLException sqlexception)
        {
            System.err.println("executeQuery False():" + sqlexception.getMessage());
        }
        return rs;
    }
}

我在jsp中調用格式如下﹕
.....
<jsp:useBean id="conn1" scope="page" class="com.conn1"/>
....
<html>
  <head>....</head>
  <body>
  <%
    .....
    String xm="";
    String str1="select xm from user_id";
    ResultSet rs1=conn1.executQuery(str1);
    if(rs1.next())
      xm=rs1.getString("xm";
    rs1.close();  //此句有時沒寫﹐但我即使寫上﹐好像也沒有效果
    ....
  %>
  </body>
</html>
請高手幫我分析一下為何會讓sql server 2000(sp3)占用內存不斷增加﹗

论坛徽章:
0
发表于 2006-03-07 11:06 |显示全部楼层
汗,告诉你了连接没有关,还把代码贴出了,你自己看看

ResultSet rs1=conn1.executQuery(str1);
    if(rs1.next())
      xm=rs1.getString("xm";
    rs1.close();  //此句有時沒寫﹐但我即使寫上﹐好像也沒有效果

conn呢?关了么?

executeQuery方法写的有问题,要么自己实现一个ResultSet并返回,返回前关闭连接;要么就返回一个VO对象,返回前关闭连接;直接返回rs,连接很难处理

论坛徽章:
0
发表于 2006-03-07 12:45 |显示全部楼层
因我的開發的系統已經都快開完工了才發現這個問題的﹐代碼中使用了大量的
  <%
    .....
    String xm="";
    String str1="select xm from user_id";
    ResultSet rs1=conn1.executQuery(str1);
    if(rs1.next())
      xm=rs1.getString("xm";
    rs1.close();
    ....
  %>
  請問能否在上述BEAN中更改以達到效果?  "自己实现一个ResultSet并返回,返回前关闭连接"可以只改BEAN不用改程序代碼嗎?能否指點一二?   TKS

论坛徽章:
0
发表于 2006-03-07 12:53 |显示全部楼层
可以,ResultSet是一个接口,自己实现一下。

论坛徽章:
0
发表于 2006-03-07 13:45 |显示全部楼层
请教了,ResultSet接口的实例是Statement类型的实例返回的。
自己实现ResultSet接口莫非是要重写Statement的executeQuery(String sql)方法?
可Statement的实例又是Connecting的实例中创建的。Connection接口又是从DriverManager中来的。。。莫非是要重写JDBC??
有点搞不明白了。您写清楚点吧

论坛徽章:
0
发表于 2006-03-07 13:55 |显示全部楼层
ResultSet是具体驱动实现的,我说的实现并没有那么深
我的意思是implements一下,封装原来的rs。也就是缓冲数据到内存(如用一个list或者map来存结果。如果结果集比较大,那就比较复杂了,要考虑部分缓冲,不然肯定爆内存)。
lz这种情况,大部分地方只是使用了rs.next和rs.getString(如果有其他的比如getInt,getBoolean等等,也要实现),那么我们就可以简单的只实现这些方法,这样只修改bean就可以了。

论坛徽章:
0
发表于 2006-03-07 13:59 |显示全部楼层
原帖由 艾斯尼勒 于 2006-3-7 14:45 发表
请教了,ResultSet接口的实例是Statement类型的实例返回的。
自己实现ResultSet接口莫非是要重写Statement的executeQuery(String sql)方法?
可Statement的实例又是Connecting的实例中创建的。Connection接口又是 ...


jdbc实际上就是一个接口集合,具体的实现都是各个驱动jar来完成的。自己也可以写,当然难度,,

论坛徽章:
0
发表于 2006-03-07 14:02 |显示全部楼层
是阿。所以我觉得重写ResultSet不太实际,如果把ResultSet转存成一个HashMap再封到一个bean里面比较简单些吧

晕。光看到9楼贴没看到8楼贴。。。不过implements ResultSet只是个形式罢了,方法能调用就好哈

[ 本帖最后由 艾斯尼勒 于 2006-3-7 14:06 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP