请csdn的高手过来看看!怎么改正代码呢???????????????????? catch后放return?还有什么用?!catch后程序就中断了~~~~~~~~~ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 搞不懂你的代码里为什么要用两个Vector和一个HashMap,一个HashMap就完全搞定了 改成:<%@ 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>另外,你的变量名取得不好 是这样的,nc201兄,我是想先把返回的两个结果集中放进vector中,然后通过hashmap进行归纳操作,遇到相同的就归为一类,对应的jsj就相加,然后把这两个放进hashmap中!这样才队保证key唯一,才恩能够用hashmap啊!!! 我想大家先来看看我这个代码的功能和意思:简单的说就是:我现在要把从数据库中取出的两个ResultSet结果集以循环的方式放入两个已经实现定义好的vector中,当然也可以放入arraylist中更好!然后我想对这两个vector进行如下类似的操作:比如vector1中的结果集1内容是:陕西 河南 陕西 山东 而vector2中的相关对应结果集2内容是:1 3 4 5 我现在要进行处理使之整合为:陕西 河南 山东 与之相对应的应该是:(1+4) 3 5 现在我放进hashmap中了,然后想再以表格的形式输出到页面中! 搞不懂怎么两个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"; }%> 你的设计还是有问题照你的需求用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> 你从数据库里取出的记录中有没有null值得情况? nc201兄,你测试你修改的代码了吗?我不是在宿舍,所以不能马上进行调试!另外,shpblk,取出的记录中没有null的情况! 是啊,不过也多谢你了!我只是想,看你能不能在我原有代码的基础上修改一下,或者找出错误的原因也好!因为目前的那个错误信息:java.lang.ClassCastException: java.lang.String不知道是错在哪里了,有什么问题?? 类型转换错误就你的代码而言: 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)也是正确的 你的错误 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 工作时需要的KeyInteger value = null; //HashMap 工作时需要的Valueint 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> 呵呵~~~多谢诸位了!!!尤其是热心的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!散分答谢!^_^ div+css自动扩展 <s:select>标签,我要通过js获取listKey的值要怎么获取? java程序员面试时都问什么linux命令啊? 主frame向子frame 传值 请教 用jacob 操作word 总是报错 急急! JSP网页出现如此错误!谢谢高手相助! 如何发布系统到互联网?? 关于JDK1.4和JDK1.5版本问题 我安装 weblogic_linux遇到如下问题 Jsp文件中引入*.java文件时的问题,请帮忙,急! 求救:struts标签库问题 DBConnectionManager这个连接mysql的具体有什么用,谢谢高手!!!!!!
<%@ 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>
另外,你的变量名取得不好
陕西 河南 陕西 山东 而vector2中的相关对应结果集2内容是:1 3 4 5 我现在要进行处理使之整合为:陕西 河南 山东 与之相对应的应该是:(1+4) 3 5
现在我放进hashmap中了,然后想再以表格的形式输出到页面中!
怎么两个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";
}
%>
照你的需求用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>
另外,shpblk,取出的记录中没有null的情况!
我只是想,看你能不能在我原有代码的基础上修改一下,或者找出错误的原因也好!
因为目前的那个错误信息:java.lang.ClassCastException: java.lang.String
不知道是错在哪里了,有什么问题??
就你的代码而言:
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)也是正确的
<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>
尤其是热心的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!
散分答谢!^_^