weblogic的jsp问题解决方法(2)

http://www.itjxue.com  2015-07-17 08:27  来源:未知  点击次数: 

问题7:
使用vector+hashtable 一次返回查询结果resulset.

解决方法: 记录集:将一条记录放到一个hashtable里面,然后把它再
       添加到vector里面,循环记录下结果集,返回vector
具体见后面的java文件的部分代码(不包扩数据库的连接和关闭)


 package zjdx.bean.common;

/********************************************
 ***** Title:      hashtable_vector_rs 
 ***** Description: 数据显示          
 ***** Copyright:  Copyright (c) 2002  
 ***** Company:       DHC           
 ***** author:     wangyl              
 ***** version:    1.0                 
 ***** 说明:
 ***** 记录集:一条记录用放到一个hashtable里面,然后把它再
       放到vector里面,循环记录下结果集,返回vector
      
*********************************************/

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

public class hashtable_vector_rs
{
    /*----------------------------------------------------------------*/
    /* 函数名称: getMultiRowInfo
    /* 功能描述: 返回记录集,放到Hashtable里面
    /* 参数:    sql 语句,字段个数
    /* 返回值:   成功---htable, 失败---null
    /*----------------------------------------------------------------*/
    public Vector ListResult(String sqlStatement,int num)
    {
        Vector ListRs=new Vector();
       
        try
        {
            connectDB();
            rs=stmt.executeQuery(sqlStatement);
            //判断字段数据类型
            //date型 返回 93
            //int型 返回 2,4
            //bigint型 返回 3
            //String型 返回 12
            //(char 型)返回 1
            int t = -1;
            rsmd = rs.getMetaData();
            int ColumnCount=0;
            if(num>0)
                ColumnCount = num;
            else
                ColumnCount = rsmd.getColumnCount();
            while(rs.next())
            {                            
                Hashtable htable =new Hashtable();
                for (int i = 1; i <= ColumnCount; i++)
                {
                    t=rsmd.getColumnType(i);
                    System.out.println("i="+i+",t="+t+"name="+rsmd.getColumnName(i));
                    if(t==12||t==1||t==3)
                    {
                        if(rs.getString(i)==null|| rs.getString(i).equals(""))
                            htable.put(rsmd.getColumnName(i),"");
                        else
                            htable.put(rsmd.getColumnName(i),rs.getString(i));
                    }
                    else if(t==93)
                    {
                        htable.put(rsmd.getColumnName(i),rs.getDate(i).toString());
                    }
                    else if(t==2||t==4)
                    {
                        htable.put(rsmd.getColumnName(i),Integer.toString(rs.getInt(i)));
                    }
                }
                ListRs.add(htable);
            }//e
            return ListRs;               
        }
        catch(Exception listError)
        {
            System.out.println("数据库操作失败!"+listError);
            return null;
        }
        finally
        {
            try
            {
                closeDB();
            }   
            catch(Exception closeErr)
            {
                System.out.println("关闭数据库出错:"+closeErr);   
            }
        }    
    }
}

 问题8: jsp的程序也有设计的不够合理的地方
     例如:选择一个下拉框,提交一次,列出所选的数据,选择另外一个下拉框再次提交,再次列出所选的数据。
解决方法:
     尽量一次把条件选择完毕,然后列出所选择的数据,并且在数据多的时候,尽量使用翻页,减少运行时间。

问题9:性能优化,尽量使用PreparedStatement
解决方法:
PreparedStatement 对象和使用的普通的 Statement 对象有两点不同。
第一,    它们是为了性能更快而由 JDBC 驱动程序或数据库编译(预编译)的。
第二,    它们接受一个或多个动态输入参数,称为 IN 参数。这两点让 PreparedStatement 对象适用于重复的 SQL 操作,其中操作基本上都是一样的,只有微小的差异(如数据载入)。要让 SQL 语句在使用前预备好,在 PreparedStatement 对象创建时必须将 SQL 传送到 JDBC 驱动程序,而不是在其执行时才传送。

IN 参数用 SQL String 中的 ? 占位符表示。在 PreparedStatement 能够成功地执行前,还必须调用 PreparedStatement 对象的 setXXX() 方法来设置 IN 参数,在这里 XXX 被设置的参数的数据类型所替换。因而,要将第一个 IN 参数设置为整数值 100,您应该调用 setInt(1, 100)。同样地,要将第二个 IN 参数设置为字符串值“rjb”,您应该调用 setString(2, "rjb")。最后一点是,设置好的参数值在设置为一个新的值,或用 clearParameters() 显式地清除之前会保持不变。这很重要,因为 PreparedStatement 可以被多次执行;如果您不注意的话,就会让您的数据库充满无用数据。
问题10 :
  1、我把包含SQLBridge 的java文件改了一遍,有32个java文件(已经改完)。
   2、我把包含SQLPool 的java文件改了一遍,有27个java文件(已经改完)。
   3、我把不用的jsp文件整理了一下,大概有17 个目录的jsp文件不用或者没有上线。(整理完毕)
问题11:提交页面,每次都提交两次。
原因:
  1、

这里如果type=”sbumit”,页面就会提交两次。(花费了一天的时间才找到原因)。
在onclick事件里面会提交一次,而submit 按钮本身也会提交一次。

解决方法:
   如果在onclick 事件里面提交页面,按钮的类型type 一定不可以是”submit”  按钮。
可以是”button”.
   全文搜索共有33个类似的文件。
java.net.SocketException: ReadFile failed: 指定的网络名不再可用。
主要是由于这个引起的。
问题12:定时刷新页面,600秒(不是必要的,不要这样做)
原因:
  
解决方法:
       去掉这样的语句。
   
全文搜索共有12个类似的文件。

问题13:在跳转到别的页面的时候,要加return。
否则可能会引起错误。跳转不过去。
If{
request.getRequestDispatcher("/zjdx/jsp/common/ErrorPage.jsp?s_mark=error:record have existed").forward(request,response);
return;
}
else
{
response.sendRedirect();
//建议用上面的方法
return;
}

(责任编辑:IT教学网)

更多

推荐JSP教程文章