怎么有这么怪的怪事情啊!!!!!!!!!!!!!!!!!高分相送!

hu314 2002-06-02 12:39:29
一个RS结果集通过计算有5条记录,但是只能执行一次RS。NEXT(),第二次就抛出异常了。为什么????


我们是直接用CREATESTATEMENT(),没有加参数的,但应该没有影响吧!

为什么RS结果集只能用一次NEXT???
它有5个记录啊!
...全文
26 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
hu314 2002-06-02
  • 打赏
  • 举报
回复
我的代码如下!

stmt.execute("use studb");
parker=stmt.executeQuery(test);//查询spcontent数据库中某学生所做的试题编号
int times=0;
while(parker.next())//整个这个大的循环就只能执行一次NEXT,第二次就出错了!
{
nandu1=0;//难度
defen1=0;//每个学生该题实际得分的总分
manfen1=0;//该题参考分数
num=0;//记数清零
rs1=null;//选出实际得分,参考分数结果集初始
out.println("题号:");
tihao1=parker.getInt(1);
// tihao1=1;
out.println(tihao1);

test1="select "+defen+" , "+manfen+" from spcontent where "+tihao+"="+tihao1;
stmt.execute("use studb");
out.println("test1");
rs1=stmt.executeQuery(test1);
out.println(test1);


while(rs1.next())
{
num++;//有多少个学生在做道题
defen1=defen1+rs1.getFloat(1);
manfen1=manfen1+rs1.getFloat(2);
// out.println(defen1);
// out.println(manfen1);
}
nandu1=1-defen1/manfen1;
float pingjun=0;//平均分
pingjun=defen1/num;
sql1="update topic set "+STnandu+"="+nandu1+" where "+tihao+"="+tihao1;
out.println(" update sql");

stmt.execute("use topicsdb");
stmt.executeUpdate(sql1);//更新难度

//------------------计算题目区分度--------------------------------------------------------------

stmt.execute("use studb");
rs1=stmt.executeQuery(test1);
out.println("sqlbegin");
float defen2[]=new float[num];//做过该题学生的实际得分数组
float manfen2[]=new float[num];//该题参考分数情况
int i=0;
while(rs1.next())
{
//out.println("real?");
defen2[i]=rs1.getFloat(1);
manfen2[i]=rs1.getFloat(2);
i++;
}
//Arrays.sort(defen2);
paixu(defen2,num);//对实际得分进行排序
//out.print("parker");
//for(int k=0;k<num;k++)
//out.println(defen2[k]);
float high=0;//高分组实际得分和
float low=0;//低分组实际得分和
int number=(int)Math.round(num*0.27);//实际人数的27%
out.println(num);
out.println(number);
for(i=0;i<number;i++)
{
high=high+defen2[num-i-1];//得出高分组和
low=low+defen2[i];//得出低分组和
}
float qufen=0;//定义区分度
if(number==0)//如果人数等于0(初始化时)区分度就默认为0.3
qufen=(float)3/10;
else//当人数大于0时
qufen=high/(number*manfen2[0])-low/(number*manfen2[0]);
//区分度等于高分组实际得分比率减去低分组实际得分比率

//-------------------------试题方差------------------------------------
float fangcha1[]=new float[num];
float fangcha2=0;
int k=0;
for(k=0;k<num;k++)
{
fangcha1[k]=(defen2[k]-pingjun)*(defen2[k]-pingjun);
fangcha2=fangcha2+fangcha1[k];
}
fangcha2=fangcha2/num;

sql1="update topic set "+STqufen+"="+qufen+" , "+fangcha+"="+fangcha2+" where "+tihao+"="+tihao1;

out.println("updatesql");
stmt.execute("use topicsdb");
out.println("use topicsdb");
stmt.executeUpdate(sql1);
out.println("sqlend");
// out.println(tihao1);

}
zijianyi 2002-06-02
  • 打赏
  • 举报
回复
贴代码吧.....
Andrawu 2002-06-02
  • 打赏
  • 举报
回复
try::

stmt.execute("use studb");
parker=stmt.executeQuery(test);//查询spcontent数据库中某学生所做的试题编号
int times=0;
while(parker.next())//整个这个大的循环就只能执行一次NEXT,第二次就出错了!
{
nandu1=0;//难度
defen1=0;//每个学生该题实际得分的总分
manfen1=0;//该题参考分数
num=0;//记数清零
rs1=null;//选出实际得分,参考分数结果集初始
out.println("题号:");
tihao1=parker.getInt(1);
// tihao1=1;
out.println(tihao1);

test1="select "+defen+" , "+manfen+" from spcontent where "+tihao+"="+tihao1;
//stmt.execute("use studb"); //不要这条语句
out.println("test1");
//stmt1为你在循环外新建的另一个Statement对象
rs1=stmt1.executeQuery(test1);
out.println(test1);


while(rs1.next())
{
num++;//有多少个学生在做道题
defen1=defen1+rs1.getFloat(1);
manfen1=manfen1+rs1.getFloat(2);
// out.println(defen1);
// out.println(manfen1);
}
nandu1=1-defen1/manfen1;
float pingjun=0;//平均分
pingjun=defen1/num;
sql1="update topic set "+STnandu+"="+nandu1+" where "+tihao+"="+tihao1;
//out.println(" update sql");

//stmt.execute("use topicsdb");
stmt1.executeUpdate(sql1);//更新难度

//------------------计算题目区分度--------------------------------------------------------------

//stmt.execute("use studb");
rs1=stmt1.executeQuery(test1);
out.println("sqlbegin");
float defen2[]=new float[num];//做过该题学生的实际得分数组
float manfen2[]=new float[num];//该题参考分数情况
int i=0;
while(rs1.next())
{
//out.println("real?");
defen2[i]=rs1.getFloat(1);
manfen2[i]=rs1.getFloat(2);
i++;
}
//Arrays.sort(defen2);
paixu(defen2,num);//对实际得分进行排序
//out.print("parker");
//for(int k=0;k<num;k++)
//out.println(defen2[k]);
float high=0;//高分组实际得分和
float low=0;//低分组实际得分和
int number=(int)Math.round(num*0.27);//实际人数的27%
out.println(num);
out.println(number);
for(i=0;i<number;i++)
{
high=high+defen2[num-i-1];//得出高分组和
low=low+defen2[i];//得出低分组和
}
float qufen=0;//定义区分度
if(number==0)//如果人数等于0(初始化时)区分度就默认为0.3
qufen=(float)3/10;
else//当人数大于0时
qufen=high/(number*manfen2[0])-low/(number*manfen2[0]);
//区分度等于高分组实际得分比率减去低分组实际得分比率

//-------------------------试题方差------------------------------------
float fangcha1[]=new float[num];
float fangcha2=0;
int k=0;
for(k=0;k<num;k++)
{
fangcha1[k]=(defen2[k]-pingjun)*(defen2[k]-pingjun);
fangcha2=fangcha2+fangcha1[k];
}
fangcha2=fangcha2/num;

sql1="update topic set "+STqufen+"="+qufen+" , "+fangcha+"="+fangcha2+" where "+tihao+"="+tihao1;

out.println("updatesql");
stmt1.execute("use topicsdb");
out.println("use topicsdb");
stmt1.executeUpdate(sql1);
out.println("sqlend");
// out.println(tihao1);



你的代码比较乱,难改,我建议你学一下规范化。
Andrawu 2002-06-02
  • 打赏
  • 举报
回复
你的取记录集的语句嵌套了。
zijianyi 2002-06-02
  • 打赏
  • 举报
回复
楼上说的对........但是不知道你的是不是这个原因.....
bbshero 2002-06-02
  • 打赏
  • 举报
回复
sql server 用rs.getXXXXXX("Column Name")
必须和物理上的表的建立的顺序一致!!!!
bbshero 2002-06-02
  • 打赏
  • 举报
回复
sql server 用rs.getXXXXXX("Column Name")
必须和物理上的表的建立的顺序一致!!!!
hu314 2002-06-02
  • 打赏
  • 举报
回复
???

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧