我的一个register.jsp注册页面,在填完所要求的4项简单的数据并点击“注册”后,要半分钟才能回跳到logon.jsp页面,所填写的数据能写入oracle数据库,可为什么要这么久呢?有哪些原因呢?
备注:我这个小系统很简单的,就是一个留言板,采用了jsp+servlet+javabean的模式,开发环境是tomcat5.5+myeclipse3.2+oracle9i,只有4个jsp文件、16个java文件以及4个util工具java文件。

解决方案 »

  1.   

    一楼,会不会是我用oracle数据库的原因呢?我的电脑应该没有问题吧,2G内存+双核cpu.
    还有个问题是,我注册到数据库后,数据库不能及时的显示我刚注册的用户名和密码。
        当我选择userinfo表的 "刷新" 后,表内的数据都没有变化.于是我只能选择 "查询数据" 来看更新后的数据情况,但有时能显示刚输入的数据,有时却不能。请问是什么原因呢?我是oracle新手,望多多指教。
      

  2.   

    既然这样,说明原因在数据库了。 
    你注册可以先不连数据库,或者换用其它数据库。担心程序有问题可以把注册信息先放在session或者aplication里
      

  3.   

    要半分钟?Oracle 跟你的 Tomcat 是放在同一台机器上么?如果不是的话,可以考虑使用连接池,
    否则每次都进行远程连接的话是很慢的。
      

  4.   

    楼上的分析都好精辟啊。
    你的电脑配置不错,不会是你的电脑的问题
    再说了,Oracle 这么多人在用,按理说是不会出问题的。
    最大的可能就是你的程序的问题了。
    我感觉你连的不会是远程的数据库。看似楼主还是个学生
      

  5.   

    我的oracle和tomcat都在我的电脑里面,不存在远程的问题,也没有用dbcp。我的DatabaseBean.java如下://数据库访问类
    package ch;import java.sql.*;
    public class DatabaseBean {

    private static final String user="scott";
    private static final String password="tiger";
        //取得一个数据库的连接
    public static Connection getConnection() throws SQLException{
    return db.DatabaseBean.getConnection(user,password);
    }

    //取得某个表中可应用的主键
    public static int getMaxID(String tablename) throws SQLException{
    Connection conn=getConnection();
    int nMaxID=db.DatabaseBean.getMaxID(conn,tablename);
    conn.close();
    return nMaxID;
    }

    //关闭连接,释放资源  
    public static void close(ResultSet rs,Statement st,Connection conn){
    db.DatabaseBean.close(rs,st,conn);
    }

    //执行一个更新数据库的SQL语句
    public static boolean update(String sql){
    Connection conn=null;
    Statement st=null;
    try{
    conn=DatabaseBean.getConnection();
    st=conn.createStatement();
    int nResult=st.executeUpdate(sql);
    return nResult==1;//??????????????????????????
    }
    catch(SQLException ex){
    ex.printStackTrace(System.err);
    return false;
    }
    finally{
    DatabaseBean.close(null,st,conn);
    }
    }

    }
    而另一个底层的DatabaseBean.java是:package db;import java.sql.*;
    import javax.naming.*;
    import javax.sql.*;/**
     * 数据库相关的操作
     */
    public class DatabaseBean
    {
    public static Connection getConnection( String user, String password ) throws SQLException
    {
    // 定义驱动程序
    String DBDRIVER = "oracle.jdbc.driver.OracleDriver";
    // // 定义连接字符串
    String CONNSTR = "jdbc:oracle:thin:@localhost:1521:ora92";
    try   
    {
    Class.forName( DBDRIVER );
    }
    catch ( ClassNotFoundException ex )
    {
    ex.printStackTrace( System.err );
    }
    return DriverManager.getConnection(CONNSTR,user,password);
    }
         
    // 取得某个表中可用的主键值
    public static synchronized int getMaxID( Connection conn, String tablename ) 
    throws SQLException
    {
    int nMaxID = 0;
    Statement st = conn.createStatement();

    // 增加同步,避免同时由多个进程执行
    String sql = "SELECT maxid FROM tableseq WHERE tablename = '" + tablename + "'";
    ResultSet rs = st.executeQuery( sql );
    while( rs.next() )
    {
    nMaxID = rs.getInt( 1 );
    }
    rs.close();
    if( nMaxID > 0 )
    {
    // 存在该表的记录
    nMaxID++;
    sql = "UPDATE tableseq SET maxid=" + nMaxID + " WHERE tablename = '" 
    + tablename + "'";
    }
    else
    {
    // 不存在该表的记录
    nMaxID = 1; // 从1开始
    sql = "INSERT INTO tableseq ( tablename, maxid ) "
    + "VALUES ( '" + tablename + "'," + nMaxID + ")";
    }
    st.executeUpdate( sql );
    st.close(); return nMaxID;
    } // 关闭连接,释放资源
    public static void close( ResultSet rs, Statement st, Connection conn )
    {
    try
    {
    if( rs!=null ) rs.close();
    }
    catch( SQLException ex ) { };

    try
    {
    if( st!=null ) st.close();
    }
    catch( SQLException ex ) { };

    try
    {
    if( conn!=null ) conn.close();
    }
    catch( SQLException ex ) { };
    }}请问时间慢会不会跟这两个连接的文件有关呢?
      

  6.   

    你用在方法里面加上 System.currentTimeMillis() 输出一下所用的时间,看看瓶颈在什么地方long t0, t1;
    t0 = System.currentTimeMillis();
    ....
    ....
    t1 = System.currentTimeMillis();
    System.out.println(t1 - t0);