|
阅读:999回复:11
数据库访问页速度慢的问题~JSP[S.O.S][紧急]
三层结构,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 修改 ] |
|
|
|
1C#
发布于:2005-07-25 13:53
Re:数据库访问页速度慢的问题~JSP[S.O.S][紧急]
楼上的,俺莫有明白啊。。。第一次写这东西。。。直接说咋改嘛~~~
现在的状态是可以打开,速度也很快,可是。。。我没有释放连接。。。这个不行吧~~ 怎么改才行? [ 2005-07-25 13:54:43 0000 修改 ] |
|
|
|
2C#
发布于:2005-07-25 13:19
Re:数据库访问页速度慢的问题~JSP[S.O.S][紧急]
SQLDBOperator 这个不是单例的,所以你每次getinstance的时候都会重新new异词,你想这样做的话就把他改成单例模式,第一次初始化后就不用生成新的对象了. |
|
|
|
3C#
发布于:2005-07-25 11:00
Re:数据库访问页速度慢的问题~JSP[S.O.S][紧急]
注释掉了后患无穷
哈哈哈~~~~~~~~ 小心RP又出问题:P 等俺开会后给你改吧,你先这么用着,骗过老yue是没问题 |
|
|
|
4C#
发布于:2005-07-25 10:59
Re:数据库访问页速度慢的问题~JSP[S.O.S][紧急]
俺把
sqldbo.close()注释掉了。。。可以吗??。。。反正现在是能用。。。不知道对不对。。。 |
|
|
|
5C#
发布于:2005-07-25 10:41
Re:数据库访问页速度慢的问题~JSP[S.O.S][紧急]
问题就出在这 第一次进入页面,你建立了连接```````` 然后就.CLOSE(); 一点"刷新",重新执行请求得时候连接已经关闭,什么都取不到,while(rst.next())当然会返回空指针得错误,没有取道数据啊:P 至于怎么改,你自己看吧 oooo先生最近RP咋老出问题呢? [ 2005-07-25 10:59:17 lijiannan_1981 修改 ] |
|
|
|
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 修改 ] |
|
|
|
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();
}
} |
|
|
|
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 修改 ] |
|
|
|
9C#
发布于:2005-07-25 09:27
Re:数据库访问页速度慢的问题~JSP[S.O.S][紧急]
while(rst.next()) ///这个是21行~~ |
|
|
|
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 |
|
|
|
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> *号是作过处理的内容。。。 |
|
|