catch后放return?还有什么用?!catch后程序就中断了~~~~~~~~~

解决方案 »

  1.   

    搞不懂你的代码里为什么要用两个Vector和一个HashMap,一个HashMap就完全搞定了
      

  2.   

    改成:
    <%@ page language="java" import="java.sql.*,java.io.*,java.util.*"%>
    <%!  
     public String getStr(String str)
      {
    try
    {
    String temp_p=str;
    byte[] temp_t=temp_p.getBytes("GBK");
    String temp=new String(temp_t,"ISO8859_1");
    return temp;
    }
    catch(Exception e)
    { }
    return "null";
      }
    %> 
    <%!  
     public String getStr2(String str)
      {
    try
    {
    String temp_p=str;
    byte[] temp_t=temp_p.getBytes("ISO8859_1");
    String temp=new String(temp_t,"GBK");
    return temp;
    }
    catch(Exception e)
    { }
    return "null";
      }
    %> 
    <html>
    <head>
    <title>Data Operate</title>
    </head><body>
    <%
    String Bysort=getStr2(request.getParameter("Bysort"));
    String ksrq=getStr2(request.getParameter("ksrq"));
    String jsrq=getStr2(request.getParameter("jsrq"));
    //----modified-----//
    //Vector nrv=new Vector();
    //Vector jsjv=new Vector();HashMap nj = new HashMap();
    //----modified-----//%>
    <%
    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); 
    String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=timecount"; 
    String user="guest"; 
    String password=""; 
    Connection conn= DriverManager.getConnection(url,user,password); 
    Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); 
    String sql = "SELECT nr,jsj FROM timecount WHERE rq BETWEEN '"+ksrq+"' AND '"+jsrq+"' AND dfl LIKE '%"+Bysort+"%' order by rq"; 
    ResultSet RS_timecount=stmt.executeQuery(sql);
    while(RS_timecount.next()){
    %>
    <%
    //----modified-----//
    String nr=RS_timecount.getString("nr");
    //nrv.addElement(nr);
    String jsj=RS_timecount.getString("jsj");
    nj.put(ns,jsj);//jsjv.addElement(jsj);
    //----modified-----//
    %>
    <%}%>
    <%
    //----modified-----//
    /*
    for ( int i = 0 ; i < nrv.size(); i++) {
        if(null == nj.get(nrv.get(i))){
          nj.put(nrv.get(i), jsjv.get(i));
          }else{
           int value1 = ((Integer)nj.get(nrv.get(i))).intValue();
           int value2 = ((Integer)jsjv.get(i)).intValue();
           nj.put(nrv.get(i), new Integer(value1 + value2));
         }
      }*/
    //----modified-----//
    %>
    <%
    Set keys=nj.keySet();
    Iterator keyIter=keys.iterator();
    while(keyIter.hasNext()){
     String nr=(String)keyIter.next();
     String jsj=(String)nj.get(nr);
     out.println(nr+":"+jsj);
     }
    %>
    </body>
    </html>
    另外,你的变量名取得不好
      

  3.   

    是这样的,nc201兄,我是想先把返回的两个结果集中放进vector中,然后通过hashmap进行归纳操作,遇到相同的就归为一类,对应的jsj就相加,然后把这两个放进hashmap中!这样才队保证key唯一,才恩能够用hashmap啊!!!
      

  4.   

    我想大家先来看看我这个代码的功能和意思:简单的说就是:我现在要把从数据库中取出的两个ResultSet结果集以循环的方式放入两个已经实现定义好的vector中,当然也可以放入arraylist中更好!然后我想对这两个vector进行如下类似的操作:比如vector1中的结果集1内容是:
    陕西 河南 陕西 山东  而vector2中的相关对应结果集2内容是:1 3 4 5 我现在要进行处理使之整合为:陕西 河南 山东 与之相对应的应该是:(1+4) 3 5 
    现在我放进hashmap中了,然后想再以表格的形式输出到页面中!
      

  5.   

    搞不懂
    怎么两个return呢
    你要返回什么啊
    <%!  
     public String getStr2(String str)
      {
    try
    {
    String temp_p=str;
    byte[] temp_t=temp_p.getBytes("ISO8859_1");
    String temp=new String(temp_t,"GBK");
    return temp;
    }
    catch(Exception e)
    { }
    return "null";
      }
    %> 
      

  6.   

    你的设计还是有问题
    照你的需求用vector+hashmap或,vector+vector或vector+class就可以解决了
    用最后一个方法,给你简单的举个例吧:
    public class Info{
        private String nr;
        private String jsj;
        public void setNr(String nr){
            this.nr=nr;
        }
        public String getNr(){
            return this.nr;
        }
        //.....剩余的你给补上
    }你的代码改成:
    <%@ page language="java" import="java.sql.*,java.io.*,java.util.*"%>
    <%!  
     public String getStr(String str)
      {
    try
    {
    String temp_p=str;
    byte[] temp_t=temp_p.getBytes("GBK");
    String temp=new String(temp_t,"ISO8859_1");
    return temp;
    }
    catch(Exception e)
    { }
    return "null";
      }
    %> 
    <%!  
     public String getStr2(String str)
      {
    try
    {
    String temp_p=str;
    byte[] temp_t=temp_p.getBytes("ISO8859_1");
    String temp=new String(temp_t,"GBK");
    return temp;
    }
    catch(Exception e)
    { }
    return "null";
      }
    %> 
    <html>
    <head>
    <title>Data Operate</title>
    </head><body>
    <%
    String Bysort=getStr2(request.getParameter("Bysort"));
    String ksrq=getStr2(request.getParameter("ksrq"));
    String jsrq=getStr2(request.getParameter("jsrq"));//----modified-----//
    //Vector nrv=new Vector();
    //Vector jsjv=new Vector();//HashMap nj = new HashMap();Vector infoSet= new Vector();
    //----modified-----//%>
    <%
    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); 
    String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=timecount"; 
    String user="guest"; 
    String password=""; 
    Connection conn= DriverManager.getConnection(url,user,password); 
    Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); 
    String sql = "SELECT nr,jsj FROM timecount WHERE rq BETWEEN '"+ksrq+"' AND '"+jsrq+"' AND dfl LIKE '%"+Bysort+"%' order by rq"; 
    ResultSet RS_timecount=stmt.executeQuery(sql);
    while(RS_timecount.next()){
    %>
    <%
    //----modified-----//
    String nr=RS_timecount.getString("nr");String jsj=RS_timecount.getString("jsj");Info info = new Info();
    info.setNr(nr);
    info.setJsj(jsj);infoSet.addElement(info);
    //jsjv.addElement(jsj);
    //----modified-----//
    %>
    <%}%><%
    //循环读出vector中的值
    for(int i=0;i<infoSet.size();i++){
    Info aInfo=(Info)infoSet.get(i);
    out.print(aInfo.getNr()+":"+aInfo.getJsj());}
    %>
    </body>
    </html>
      

  7.   

    你从数据库里取出的记录中有没有null值得情况?
      

  8.   

    nc201兄,你测试你修改的代码了吗?我不是在宿舍,所以不能马上进行调试!
    另外,shpblk,取出的记录中没有null的情况!
      

  9.   

    是啊,不过也多谢你了!
    我只是想,看你能不能在我原有代码的基础上修改一下,或者找出错误的原因也好!
    因为目前的那个错误信息:java.lang.ClassCastException: java.lang.String
    不知道是错在哪里了,有什么问题??
      

  10.   

    类型转换错误
    就你的代码而言:
           int value1 = ((Integer)nj.get(nrv.get(i))).intValue();
           int value2 = ((Integer)jsjv.get(i)).intValue();nj.get(nrv.get(i))取出来的应该是String类型的,但你在这里转换成integer的类型当然不对。
    应该是:
    String tempString1= nj.get(nrv.get(i));
    int tempInt1=-1;
    try{
        tempInt1=Integer.parseInt(tempValue1);
    }
    另一个转换略去。。
    转换以后再相加,最后再转换成String类型存入HashMap中注意,hashMap中put(Object,Object)
    put(String,int),这样是错误的,
    put(String,Integer)这是正确的
    put(String,String)也是正确的
      

  11.   

    你的错误 nc201(Bricklayer) 已经找到了,冗余代码他也已经找到了,可能你没看懂。下面是我去除冗余代码和修正错误后的代码:<%@ page language="java" import="java.sql.*,java.io.*,java.util.*"%>
    <html>
    <head>
    <title>Data Operate</title>
    </head><body>
    <%
    String Bysort=getStr2(request.getParameter("Bysort"));
    String ksrq=getStr2(request.getParameter("ksrq"));
    String jsrq=getStr2(request.getParameter("jsrq"));
    Vector nrv=new Vector();
    Vector jsjv=new Vector();
    %>
    <%
    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); 
    String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=timecount"; 
    String user="guest"; 
    String password=""; 
    Connection conn= DriverManager.getConnection(url,user,password); 
    Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); 
    String sql = "SELECT nr,jsj FROM timecount WHERE rq BETWEEN '"+ksrq+"' AND '"+jsrq+"' AND dfl LIKE '%"+Bysort+"%' order by rq"; 
    ResultSet RS_timecount=stmt.executeQuery(sql);////////////////////////////////////////////////////////////////////////////////
    //以下是新代码
    ////////////////////////////////////////////////////////////////////////////////
    String key      = null;     //HashMap 工作时需要的Key
    Integer value   = null;     //HashMap 工作时需要的Value
    int value1      = 0;        //加法运算时的第一个变量
    int value2      = 0;        //加法运算时的第二个变量while(RS_timecount.next()){
        //从数据库中取数据并且保存到key和value变量中,数字转换错误时将会被赋值为0
        key         = RS_timecount.getString("nr");
        try{
            value   = new Integer(RS_timecount.getString("jsj"));
        } catch (NumberFormatException nfe){
            value   = new Integer(0);
        }
        
        //判断是否存在该数据,如果存在则加上新值后再放入HashMap中,否则直接放入
        if ( null == nj.get(key) ){
            nj.put(key, value);
        } else {
           value1   = ((Integer)nj.get(key)).intValue();
           value2   = value.intValue();
           nj.put(key, new Integer(value1 + value2));
        }
    }
    ////////////////////////////////////////////////////////////////////////////////
    //以下是旧代码
    ////////////////////////////////////////////////////////////////////////////////
    //while(RS_timecount.next()){
    //    String nr=RS_timecount.getString("nr");
    //    nrv.addElement(nr);
    //    String jsj=RS_timecount.getString("jsj");
    //    jsjv.addElement(jsj);
    //}
    //HashMap nj = new HashMap();
    //for ( int i = 0 ; i < nrv.size(); i++) {
    //    if(null == nj.get(nrv.get(i))){
    //      nj.put(nrv.get(i), jsjv.get(i));
    //      }else{
    //       int value1 = ((Integer)nj.get(nrv.get(i))).intValue();
    //       int value2 = ((Integer)jsjv.get(i)).intValue();
    //       nj.put(nrv.get(i), new Integer(value1 + value2));
    //     }
    //  }
    ////////////////////////////////////////////////////////////////////////////////
    %>
    <%
    Set keys=nj.keySet();
    Iterator keyIter=keys.iterator();
    while(keyIter.hasNext()){
     String nr=(String)keyIter.next();
     String jsj=(String)nj.get(nr);
     out.println(nr+":"+jsj);
     }
    %>
    </body>
    </html>
      

  12.   

    呵呵~~~多谢诸位了!!!
    尤其是热心的source0(源)兄和nc201(Bricklayer)兄,我最后发现问题在于:当初我再向数据库中写数据的时候偷懒,把原本应该是int型的数据直接用request.getParameter("jsj");接受并写入,相应的数据库类型设置为nchar类型,所以用了那段代码后,尽管用intValue()强制转型int,但是没有成功,所以才会出现上面的错误!还有,我在用循环把jsj放进vector中的时候,把这段代码改了:
    String jsj=RS_timecount.getString("jsj");
    jsjv.addElement(jsj);
    该成了:int jsj=RS_timecount.getInt("jsj");
          jsjv.addElement(Integer.parseint(jsj));
    然后一切就ok啦!呵呵,把我犯的错误写出来,与大家一起分享,希望你以后也别犯同样的错误!
    另外,我看了source0(源)兄的新的代码,觉得我的代码健壮性不强,需要进一步改进!
    多谢上面两位朋友的帮助!source0(源)兄,我已经加了你位好友啦,另外nc201(Bricklayer)兄弟,请留下你的QQ号码?我的是1714538!
    散分答谢!^_^