0000
作家
作家
  • 铜币143枚
  • 威望34点
  • 贡献值1点
阅读:999回复:11

数据库访问页速度慢的问题~JSP[S.O.S][紧急]

楼主#
更多 发布于:2005-07-25 09:11
三层结构,JAVABEAN处理数据库操作。
但是发现在打开页面(包含JAVABEAN)的时候速度极其慢。
数据库服务器是局域网内的另一台机器上
连接使用tomcat连接池(配置过程如前一帖所述)
代码如下:
public class TestBean {
	private SQLDBOperator sqldbo = null; //SQLDBOperator 类封装了tomcat连接池的操作
	public Enumeration TestResult() throws Exception{
		Vector v = new Vector();
		//database operation start
		if(sqldbo == null)
			sqldbo = SQLDBOperator.getInstance();
			String sql = "SELECT * FROM INDEX_TABLE1";
			ResultSet rst =  sqldbo.executeQuery(sql);      
			while(rst.next()){ //出错信息里的21行就是这里~~
				TestTable testTable = new TestTable(); // TestTable 类是数据库表对应的BEAN类,只有一堆GET/SET
				testTable.setAuthor (rst.getString("IT1_AUTHOR"));
				v.add(testTable);
			}
			rst.close();
			sqldbo.Close(); //释放连接
		//database operation end
		return v.elements();
	}
}


JSP:
TestBean testBean = new TestBean();
	Enumeration rs = testBean.TestResult();
	while(rs.hasMoreElements()){
		TestTable tableSearch=(TestTable)rs.nextElement();
		out.print(tableSearch.getAuthor());
	}

现在的问题有:
1 打开速度慢得出奇
2 打开一次页面后,再次刷新就会在 while(rst.next()) 的地方出现nullPointerException

什么原因?~~
[ 2005-07-25 09:28:13 0000 修改 ]
.--. |o_o | |:_/ | // \ \ (| | ) /'\_ _/`\ \___)=(___/
0000
作家
作家
  • 铜币143枚
  • 威望34点
  • 贡献值1点
1C#
发布于:2005-07-25 13:53
Re:数据库访问页速度慢的问题~JSP[S.O.S][紧急]
楼上的,俺莫有明白啊。。。第一次写这东西。。。直接说咋改嘛~~~

现在的状态是可以打开,速度也很快,可是。。。我没有释放连接。。。这个不行吧~~

怎么改才行? [ 2005-07-25 13:54:43 0000 修改 ]
.--. |o_o | |:_/ | // \ \ (| | ) /'\_ _/`\ \___)=(___/
southeast
著名写手
著名写手
  • 铜币0枚
  • 威望0点
  • 贡献值0点
2C#
发布于:2005-07-25 13:19
Re:数据库访问页速度慢的问题~JSP[S.O.S][紧急]
SQLDBOperator 这个不是单例的,所以你每次getinstance的时候都会重新new异词,你想这样做的话就把他改成单例模式,第一次初始化后就不用生成新的对象了.
[img]http://www.wait4c.com/bbs/userfiles/2196/2005051614543457820.jpg[/img]
lijiannan_1981
著名写手
著名写手
  • 铜币15枚
  • 威望0点
  • 贡献值0点
3C#
发布于:2005-07-25 11:00
Re:数据库访问页速度慢的问题~JSP[S.O.S][紧急]
注释掉了后患无穷

哈哈哈~~~~~~~~

小心RP又出问题:P

等俺开会后给你改吧,你先这么用着,骗过老yue是没问题
无。
0000
作家
作家
  • 铜币143枚
  • 威望34点
  • 贡献值1点
4C#
发布于:2005-07-25 10:59
Re:数据库访问页速度慢的问题~JSP[S.O.S][紧急]
俺把
sqldbo.close()注释掉了。。。可以吗??。。。反正现在是能用。。。不知道对不对。。。
.--. |o_o | |:_/ | // \ \ (| | ) /'\_ _/`\ \___)=(___/
lijiannan_1981
著名写手
著名写手
  • 铜币15枚
  • 威望0点
  • 贡献值0点
5C#
发布于:2005-07-25 10:41
Re:数据库访问页速度慢的问题~JSP[S.O.S][紧急]

rst.close();
sqldbo.Close();


问题就出在这

第一次进入页面,你建立了连接````````
然后就.CLOSE();

一点"刷新",重新执行请求得时候连接已经关闭,什么都取不到,while(rst.next())当然会返回空指针得错误,没有取道数据啊:P



至于怎么改,你自己看吧


oooo先生最近RP咋老出问题呢? [ 2005-07-25 10:59:17 lijiannan_1981 修改 ]
无。
0000
作家
作家
  • 铜币143枚
  • 威望34点
  • 贡献值1点
6C#
发布于:2005-07-25 10:18
Re:数据库访问页速度慢的问题~JSP[S.O.S][紧急]
SQLDBOperator 类,我只贴了部分上面用到的内容。没用到的太长~~~
public class SQLDBOperator {
	private Context ctx = null;
	private DataSource ds = null;
	private Connection conn = null;
	private static SQLDBOperator instance = null;
	private PreparedStatement prepstmt=null;
    /**
     * 构造函数[从连接池取得连接]
     */
    private SQLDBOperator(){
    	try{
    	this.ctx = new InitialContext();
    	this.ds = (DataSource)ctx.lookup("java:comp/env/jdbc/oracledb");
    	this.conn = ds.getConnection();
    	}catch(Exception e){
    		e.printStackTrace();
    	}
    }

    /**
     * 关闭数据库连接
     */
    public void Close() {
        try{
            conn.close();
        }
        catch(Exception e){
            e.printStackTrace(System.out);
        }
    }

    /**
     * 数据更新(插入&修改&删除)
     * @param strSql
     */

    public void executeUpdate(String strSql){
        try{
            //strSql=new String(strSql.getBytes("GBK"),"ISO8859_1");
            Statement stmt = this.conn.createStatement();
            stmt.executeUpdate(strSql);
        }
        catch(Exception e){
            e.printStackTrace(System.out);
        }
    }
     /**
      * 数据查询
      * @param sql
      * @return rs
      */

     public ResultSet executeQuery(String strSql) {
         ResultSet rs=null;
         try{
             //strSql=new String(strSql.getBytes("GBK"),"ISO8859_1");
             Statement stmt = this.conn.createStatement();
             rs = stmt.executeQuery(strSql);
         }
         catch(Exception e){
             e.printStackTrace(System.out);
         }
         return rs;
     }
/**
      * getConnection 方法注解。
      */
     public Connection getConnection() {
         return this.conn;
     }

     public static SQLDBOperator getInstance(){
         if (instance==null)
             instance = new SQLDBOperator();
         return instance;//返回一个SQLDBOperator对象
     }
}
[ 2005-07-25 10:28:37 0000 修改 ]
.--. |o_o | |:_/ | // \ \ (| | ) /'\_ _/`\ \___)=(___/
0000
作家
作家
  • 铜币143枚
  • 威望34点
  • 贡献值1点
7C#
发布于:2005-07-25 09:45
Re:数据库访问页速度慢的问题~JSP[S.O.S][紧急]
直接用JDBC写个单独的JAVA类连接做测试没有问题。。。~~
刚写的测试,有点乱。
但是除了连接数据库的时候有点慢以外(但还是没有JSP页面慢~)
多少次重新运行都没问题~
/*
 * 创建日期 2005-7-25
 *
 * TODO 要更改此生成的文件的模板,请转至
 * 窗口 - 首选项 - Java - 代码样式 - 代码模板
 */
package cn.edu.bigc;

import java.sql.ResultSet;
import java.util.Enumeration;
import java.util.Vector;
import java.sql.*;

public class JdbcTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO 自动生成方法存根
		JdbcTest testBean = new JdbcTest();
	    Enumeration rs = testBean.SearchResult();
	    while(rs.hasMoreElements()){
	        SearchTable tableSearch=(SearchTable)rs.nextElement();
	        System.out.print(tableSearch.getAuthor());
	    } 
	}
	public Enumeration SearchResult(){
		Vector v = new Vector();
		Connection conn = null;
		//database operation start
		 String driver = "oracle.jdbc.driver.OracleDriver";
		 String url = "jdbc:oracle:thin:@202.205.107.*:1521:DISDATABASE";
		 String user = "****";
		 String password = "****";
		 try {
			 Class.forName(driver);
			 conn = DriverManager.getConnection(url, user, password);
			 if(!conn.isClosed()){
				 System.out.println("connection success");
			 }
		 }
		 catch(ClassNotFoundException e) {
			 System.out.println("not found class");
			 e.printStackTrace();
		 }
		 catch(SQLException e) {
			 e.printStackTrace();
		 }
		 catch(Exception e){
			 e.printStackTrace();
		 }
		try{
			String sql = "SELECT * FROM INDEX_TABLE1";
			Statement stmt = conn.createStatement();
			ResultSet rst =  stmt.executeQuery(sql);      
			while(rst.next()){
				SearchTable searchTable = new SearchTable();
				searchTable.setAuthor (rst.getString("IT1_AUTHOR"));
				v.add(searchTable);
			}
			rst.close();
			conn.close();
		}catch(Exception e){
			System.out.print(e.getMessage());
		}finally{
			//conn.close();
		}
		//database operation end
		return v.elements();
	}
}
.--. |o_o | |:_/ | // \ \ (| | ) /'\_ _/`\ \___)=(___/
0000
作家
作家
  • 铜币143枚
  • 威望34点
  • 贡献值1点
8C#
发布于:2005-07-25 09:30
Re:数据库访问页速度慢的问题~JSP[S.O.S][紧急]
/**
     * 关闭数据库连接
     */
    public void Close() {
        try{
            conn.close();
        }
        catch(Exception e){
            e.printStackTrace(System.out);
        }
    }
[ 2005-07-25 09:30:16 0000 修改 ]
.--. |o_o | |:_/ | // \ \ (| | ) /'\_ _/`\ \___)=(___/
0000
作家
作家
  • 铜币143枚
  • 威望34点
  • 贡献值1点
9C#
发布于:2005-07-25 09:27
Re:数据库访问页速度慢的问题~JSP[S.O.S][紧急]
 while(rst.next()) ///这个是21行~~
.--. |o_o | |:_/ | // \ \ (| | ) /'\_ _/`\ \___)=(___/
0000
作家
作家
  • 铜币143枚
  • 威望34点
  • 贡献值1点
10C#
发布于:2005-07-25 09:25
Re:数据库访问页速度慢的问题~JSP[S.O.S][紧急]
出错信息:
这里的类名和上面的不一样。。。嘿嘿~~我改过~~
type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:370)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

root cause

java.lang.NullPointerException
	cn.edu.bigc.SearchBean.SearchResult(SearchBean.java:21)
	org.apache.jsp.search_jsp._jspService(org.apache.jsp.search_jsp:96)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

note The full stack trace of the root cause is available in the Apache Tomcat/5.5.9 logs.
Apache Tomcat/5.5.9
.--. |o_o | |:_/ | // \ \ (| | ) /'\_ _/`\ \___)=(___/
0000
作家
作家
  • 铜币143枚
  • 威望34点
  • 贡献值1点
11C#
发布于:2005-07-25 09:21
Re:数据库访问页速度慢的问题~JSP[S.O.S][紧急]
连接池配置如下:
<Context path="/dis" docBase="/dis" debug="5" reloadable="true" crossContext="true">
<Resource name="jdbc/oracledb" auth="Container" type="javax.sql.DataSource"
 username="****" password="****" driverClassName="oracle.jdbc.driver.OracleDriver"
 url="jdbc:oracle:thin:@202.205.107.*:1521:DISDATABASE"
 maxActive="20" maxIdle="3" maxWait="-1"
 removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true"/>
</Context>

*号是作过处理的内容。。。
.--. |o_o | |:_/ | // \ \ (| | ) /'\_ _/`\ \___)=(___/
游客

返回顶部