免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: foxzhu

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

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


这里就体现接口的威力了,实际上dao最好返回vo和list,扔结果集出去就破坏了dao模式了

论坛徽章:
0
发表于 2006-03-07 14:12 |显示全部楼层
深了。没明白。。。。。再好好学习去

论坛徽章:
0
发表于 2006-03-08 12:35 |显示全部楼层
如果可能,使用jdk5.0提供的rowset,rowset是类似于.net中dataset的结构,可以实现离线数据,这样就可以先关闭连接,然后传送数据了。rowset还能提供数据分页功能。但是请注意,如果rowset中数据量很大而且应用并发数很高的话,请慎用rowset。

论坛徽章:
0
发表于 2006-03-09 11:10 |显示全部楼层
kakasi 你好﹐能否幫我看一下BEAN部分如何修改﹐因我接觸java時間不是很長﹐能否幫我改改﹗見笑了.

论坛徽章:
0
发表于 2006-03-09 12:23 |显示全部楼层
原帖由 foxzhu 于 2006-3-9 12:10 发表
kakasi 你好﹐能否幫我看一下BEAN部分如何修改﹐因我接觸java時間不是很長﹐能否幫我改改﹗見笑了.

  1. public class BufferedResultSet implements ResultSet
  2. {

  3.     public void close() throws SQLException
  4.     {
  5.         //no need
  6.     }

  7.     public boolean wasNull() throws SQLException
  8.     {
  9.         //no need
  10.         return false;
  11.     }

  12.     private int currentIndex;
  13.     private List dataList;
  14.     private String[] fields;
  15.     public BufferedResultSet(ResultSet rs)
  16.     {
  17.         loadToBuffer(rs);
  18.     }
  19.     private void loadToBuffer(ResultSet rs)
  20.     {
  21.         //fill list with all data in rs, and set fields;write yourself
  22.         currentIndex = -1;
  23.     }
  24.     public boolean next() throws SQLException
  25.     {
  26.         currentIndex++;
  27.         return !(currentIndex == dataList.size());
  28.     }
  29.     public String getString(int columnIndex) throws SQLException
  30.     {
  31.         Map dataMap = (Map) dataList.get(currentIndex);
  32.         return (String)dataMap.get(fields[columnIndex]);
  33.     }
  34.     public String getString(String columnName) throws SQLException
  35.     {
  36.         Map dataMap = (Map) dataList.get(currentIndex);
  37.         return (String)dataMap.get(columnName);
  38.     }
  39.     public int getInt(int columnIndex) throws SQLException
  40.     {
  41.         Map dataMap = (Map) dataList.get(currentIndex);
  42.         /////(String) dataMap.get(fields[columnIndex]) decide by loadToBuffer : what did you put
  43.         return Integer.parseInt((String) dataMap.get(fields[columnIndex]));
  44.     }
复制代码


大概写了一个,ResultSet接口有很多方法,你用到的我写了几个,没用到的不用管

有个这个类以后,bean中的executeQuery变成

  1. public ResultSet executeQuery(String s)   //數據查詢用的代碼
  2.     {
  3.         BufferedResultSet bRs = null;
  4.         Connection conn = null;
  5.         Statement stmt = null;
  6.         ResultSet rs = null;
  7.         try
  8.         {
  9.             conn = DriverManager.getConnection(url, user, password);
  10.             stmt = conn.createStatement(1004, 100;
  11.             rs = stmt.executeQuery(s);
  12.             bRs = new BufferedResultSet(rs);
  13.         }
  14.         catch(SQLException sqlexception)
  15.         {
  16.             System.err.println("executeQuery False():" + sqlexception.getMessage());
  17.         }
  18.          finally
  19.          {
  20.            if(rs != null)
  21.            {
  22.                rs.close();
  23.            }
  24.            if(stmt != null)
  25.            {
  26.                stmt.close();
  27.            }
  28.            if(conn != null)
  29.            {
  30.                conn.close();
  31.            }
  32.           }
  33.         return bRs;
  34.     }

复制代码

论坛徽章:
0
发表于 2006-03-09 13:14 |显示全部楼层
kakasi你好﹐我將你的代碼寫入java文件﹐調試不通過﹐現將我BEAN中所有代碼貼上﹐煩您幫我看一下﹐還有這樣改會不會有其它問題﹗

package com;

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

class BufferedResultSet implements java.sql.ResultSet
{

    public void close() throws SQLException
    {
        //no need
    }

    public boolean wasNull() throws SQLException
    {
        //no need
        return false;
    }

    private int currentIndex;
    private List dataList;
    private String[] fields;
    public BufferedResultSet(ResultSet rs)
    {
        loadToBuffer(rs);
    }
    private void loadToBuffer(ResultSet rs)
    {
        //fill list with all data in rs, and set fields;write yourself
        currentIndex = -1;
    }
    public boolean next() throws SQLException
    {
        currentIndex++;
        return !(currentIndex == dataList.size());
    }
    public String getString(int columnIndex) throws SQLException
    {
        Map dataMap = (Map) dataList.get(currentIndex);
        return (String)dataMap.get(fields[columnIndex]);
    }
    public String getString(String columnName) throws SQLException
    {
        Map dataMap = (Map) dataList.get(currentIndex);
        return (String)dataMap.get(columnName);
    }
    public int getInt(int columnIndex) throws SQLException
    {
        Map dataMap = (Map) dataList.get(currentIndex);
        /////(String) dataMap.get(fields[columnIndex]) decide by loadToBuffer : what did you put
        return Integer.parseInt((String) dataMap.get(fields[columnIndex]));
    }
}

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 = "jsdycy163";
        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 int executeInsert(String s)
    {
        int i = -1;
        try
        {
            conn = DriverManager.getConnection(url, user, password);
            stmt = conn.createStatement();
            stmt.executeUpdate(s);
            stmt.close();
            conn.close();
            i = 1;
        }
        catch(SQLException sqlexception)
        {
            System.err.println("executeInsert False():" + sqlexception.getMessage());
            i = -1;
        }
        return i;
    }

/*    public ResultSet executeQuery1(String s)
    {
        try
        {
            conn = DriverManager.getConnection(url, user, password);
            stmt = conn.createStatement(1004, 1007);
            rs = stmt.executeQuery(s);
        }
        catch(SQLException sqlexception)
        {
            System.err.println("executeQuery False():" + sqlexception.getMessage());
        }
        return rs;
    }  */
   
         public ResultSet executeQuery(String s)   //數據查詢用的代碼
          {
                BufferedResultSet bRs = null;
                Connection conn = null;
                Statement stmt = null;
                ResultSet rs = null;
                try
                {
                    conn = DriverManager.getConnection(url, user, password);
                    stmt = conn.createStatement(1004, 100;
                    rs = stmt.executeQuery(s);
                    bRs = new BufferedResultSet(rs);
                }
                catch(SQLException sqlexception)
                {
                    System.err.println("executeQuery False():" + sqlexception.getMessage());
                }
                 finally
                 {
                   if(rs != null)
                   {
                       rs.close();
                   }
                   if(stmt != null)
                   {
                       stmt.close();
                   }
                   if(conn != null)
                   {
                       conn.close();
                   }
                  }
                return bRs;
          }

         public ResultSet executeQuery1(String s)   //數據查詢用的代碼
          {
                BufferedResultSet bRs = null;
                Connection conn = null;
                Statement stmt = null;
                ResultSet rs = null;
                try
                {
                    conn = DriverManager.getConnection(url, user, password);
                    stmt = conn.createStatement(1004, 1007);
                    rs = stmt.executeQuery(s);
                    bRs = new BufferedResultSet(rs);
                }
                catch(SQLException sqlexception)
                {
                    System.err.println("executeQuery False():" + sqlexception.getMessage());
                }
                 finally
                 {
                   if(rs != null)
                   {
                       rs.close();
                   }
                   if(stmt != null)
                   {
                       stmt.close();
                   }
                   if(conn != null)
                   {
                       conn.close();
                   }
                  }
                return bRs;
          }

    public int executeUpdate(String s)
    {
        int i = -1;
        try
        {
            conn = DriverManager.getConnection(url, user, password);
            stmt = conn.createStatement();
            stmt.executeUpdate(s);
            stmt.close();
            conn.close();
            i = 1;
        }
        catch(SQLException sqlexception)
        {
            System.err.println("executeUpdate False():" + sqlexception.getMessage());
            i = -1;
        }
        return i;
    }

    public int executeDelete(String s)
    {
        int i = -1;
        try
        {
            conn = DriverManager.getConnection(url, user, password);
            stmt = conn.createStatement(1004, 100;
            stmt.executeUpdate(s);
            stmt.close();
            conn.close();
            i = 1;
        }
        catch(SQLException sqlexception)
        {
            System.err.println("executeDelete False():" + sqlexception.getMessage());
            i = -1;
        }
        return i;
    }

    public void closeStmt()
    {
        try
        {
            stmt.close();
        }
        catch(SQLException sqlexception)
        {
            sqlexception.printStackTrace();
        }
    }

    public void closeConn()
    {
        try
        {
            conn.close();
        }
        catch(SQLException sqlexception)
        {
            sqlexception.printStackTrace();
        }
    }

    public String inStr(String s)
    {
        if(s == null)
            s = "";
        else
            try
            {
                s = s.trim();
                s = s.replace('\'', '\001');
            }
            catch(Exception exception)
            {
                exception.printStackTrace(System.err);
            }
        return s;
    }

    public String outStr(String s)
    {
        if(s == null)
            s = "";
        else
            try
            {
                s = s.replace('\001', '\'');
            }
            catch(Exception exception)
            {
                exception.printStackTrace(System.err);
            }
        return s;
    }

    public String selectStr(String s)
    {
        if(s.equals("")
            s = " LIKE '%' ";
        else
            s = " LIKE '%" + s + "%' ";
        return s;
    }

    public String dataStr(String s)
    {
        s = s.trim();
        Calendar calendar = Calendar.getInstance();
        Calendar calendar1 = calendar;
        String s1 = calendar.get(1) + "";
        Calendar calendar2 = calendar;
        Calendar calendar3 = calendar;
        String s2 = "00".substring(0, 2 - ((calendar.get(2) + 1) + "".trim().length()) + ((calendar.get(2) + 1) + "".trim();
        Calendar calendar4 = calendar;
        Calendar calendar5 = calendar;
        String s3 = "00".substring(0, 2 - (calendar.get(5) + "".trim().length()) + (calendar.get(5) + "".trim();
        String s4 = s1 + "" + s2 + "" + s3;
        int i = -1;
        int j = -1;
        if(s.equals("" || s == null)
            return s4;
        i = s.indexOf(47);
        if(i != 4)
            return s4;
        j = s.indexOf(47, 5);
        if(j <= 4 || j >=
        {
            return s4;
        } else
        {
            String s5 = s.substring(0, i);
            String s6 = "00".substring(0, 2 - s.substring(i + 1, j).length()) + s.substring(i + 1, j).trim();
            String s7 = "00".substring(0, 2 - s.substring(j + 1).trim().length()) + s.substring(j + 1).trim();
            return s5 + s6 + s7 + "";
        }
    }

    public String getDay()
    {
        SimpleDateFormat simpledateformat = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
        java.util.Date date = new java.util.Date();
        String s = simpledateformat.format(date);
        return s;
    }

    public String getYear()
    {
        SimpleDateFormat simpledateformat = new SimpleDateFormat("yyyy/MM/dd HH:mm", Locale.getDefault());
        java.util.Date date = new java.util.Date();
        String s = simpledateformat.format(date);
        return s;
    }

    public int executeCount(String s)
    {
        byte byte0 = -1;
        if(s.trim() == null || s.trim().equals("" || s.trim().length() !=
            byte0 = -1;
        else
            try
            {
                String s1 = "update base_fileitem set reader=isnull(reader,0)+1 where loca_bh='" + s.substring(0, 5) + "' and item_bh='" + s.substring(5, + "'";
                conn = DriverManager.getConnection(url, user, password);
                stmt = conn.createStatement();
                stmt.executeUpdate(s1);
                stmt.close();
                conn.close();
                byte0 = 1;
            }
            catch(SQLException sqlexception)
            {
                System.err.println("executeCount False():" + sqlexception.getMessage());
                byte0 = -1;
            }
        return byte0;
    }

    public int executeCount_bbs(String s, String s1, String s2, String s3)
    {
        byte byte0 = -1;
        if(s == null || s.trim().equals("" || s1 == null || s1.trim().equals("" || s2 == null || s2.trim().equals("")
            byte0 = -1;
        else
            try
            {
                String s4 = "update mx_bbs set reader1=isnull(reader1,0)+1 where loca_bh='" + s.trim() + "' and item_bh='" + s1.trim() + "' and bh='" + s2.trim() + "' and bh1='001'";
                conn = DriverManager.getConnection(url, user, password);
                stmt = conn.createStatement();
                stmt.executeUpdate(s4);
                stmt.close();
                conn.close();
                byte0 = 1;
            }
            catch(SQLException sqlexception)
            {
                System.err.println("executeCount False():" + sqlexception.getMessage());
                byte0 = -1;
            }
        return byte0;
    }

    public String executeRole(String s, String s1, int i)
    {
        String s2 = "";
        String s3 = "select substring(" + s1.trim() + "," + i + ",1) as role from base_role where gh='" + s.trim() + "'";
        try
        {
                        conn = DriverManager.getConnection(url, user, password);
                        stmt = conn.createStatement();
                        ResultSet resultset = stmt.executeQuery(s3);
                        if(resultset.next())
                        {
                            s2 = resultset.getString("role");
                            if(s2 == null)
                                s2 = "";
                            else
                                s2 = s2.trim();
                        } else
                        {
                            s2 = "";
                        }
                        stmt.close();
                        conn.close();
        }
        catch(SQLException sqlexception)
        {
                  System.err.println("executeCount False():" + sqlexception.getMessage());
                  s2 = "";
        }
        return s2;
    }

    public String executeName(String s)
    {
        String s1 = "";
        String s3 = "select ltrim(rtrim(isnull(xm,''))) as name from base_user where gh='" + s.trim() + "'";
        try
        {
                conn = DriverManager.getConnection(url, user, password);
                stmt = conn.createStatement();
                ResultSet resultset = stmt.executeQuery(s3);
                if(resultset.next())
                {
                    s1 = resultset.getString("name");
                    if(s1 == null)
                        s1 = "";
                    else
                        s1 = s1.trim();
                }
                else
                {
                    String s4 = "select ltrim(rtrim(isnull(xm,''))) as name from base_user1 where gh='" + s.trim() + "'";
                    conn = DriverManager.getConnection(url, user, password);
                    stmt = conn.createStatement();
                    ResultSet resultset1 = stmt.executeQuery(s4);
                    if(resultset1.next())
                    {
                        s1 = resultset1.getString("name");
                        if(s1 == null)
                            s1 = "";
                        else
                            s1 = s1.trim();
                    }
                    else
                    {
                        s1 = "";
                    }
                }
                stmt.close();
                conn.close();
                return s1;
      }
      catch(SQLException sqlexception)
      {
                System.err.println("executeCount False():" + sqlexception.getMessage());
                String s2 = "error";
                return s2;
      }
   }
}   


備注﹕因我對java剛剛起步﹐望高手們多多指教﹗

论坛徽章:
0
发表于 2006-03-09 15:26 |显示全部楼层
呵呵。读代码和排错都很长水平呢。自己多试试看,尤其在学习阶段不要急着实现功能,一定要把代码看懂了,其中大部分还都是你自己的代码阿

论坛徽章:
0
发表于 2006-03-09 15:32 |显示全部楼层
我给你的只是部分关键实现而已,并不是拿过去就可以用的。例如loadToBuffer这个方法我就没给你写(得考虑很多,最后返回的list中,每个obj是一个map对象,map的keyset是表的field,,,)。BufferedResultSet这个类必须实现全部的ResultSet方法,这是接口的要求。老弟,功底差太多了,自己好好补补。

PS:有空的时候我再写一个完整的缓冲结果集,再开贴请大家review~

论坛徽章:
0
发表于 2006-03-09 16:13 |显示全部楼层
謝謝各位大俠的指點﹐特別感謝kakasi 兄台﹗
因當初只是為了實現web架構﹐所以沒有對java作了解﹐只是從書上抄了一個bean來用﹐直到系統開發快完工時才出現了這個問題﹐kakasi 兄說的方法我想我目前這水平是難以實現啦﹗只能笨一點改系統的代碼了﹗

论坛徽章:
0
发表于 2006-03-09 16:32 |显示全部楼层
原帖由 foxzhu 于 2006-3-9 17:13 发表
謝謝各位大俠的指點﹐特別感謝kakasi 兄台﹗
因當初只是為了實現web架構﹐所以沒有對java作了解﹐只是從書上抄了一個bean來用﹐直到系統開發快完工時才出現了這個問題﹐kakasi 兄說的方法我想我目前這水平是難以 ...


参考这个类,然后executeQuery方法按我写的改

如果抛出unsupport exception,那么,,,说明我没写那个方法,汗~

BufferedResultSet.rar

1.89 KB, 下载次数: 21

java

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP