开发环境:windows2000+eclipse3.1.1+db28.1
一个并不复杂的应用程序,向用户提出一系列的问题,问题均存储在数据库中,统计用户答题的正确数目和错误数目,打印出来。
数据库中2张表:UserHistory为用户测试纪录.QuestionAnswers为应用程序的问题和答案库,就3个字段(Questionid,Question,anwser).
程序代码如下:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Calendar;
import java.util.GregorianCalendar;public class QuizApp { static String url="jdbc:db2:sample";
static String userid="administrator";
static String passwd="Elinor12";
static String answer="";

public static Connection getConnection(){
Connection con=null;
try{
Class.forName("COM.ibm.db2.jdbc.app.DB2Driver").newInstance();
con = DriverManager.getConnection(url,userid,passwd);

}
catch(Exception e){
e.printStackTrace();
}
return con;
}


public static void main(String[] args) {
try{
Connection con=null;
ResultSet rs=null;
Statement stmt=null;
int count=0,totalQuestions=0;
int rightCount=0,wrongCount=0;
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
System.out.println("欢迎来到Quiz master!");
System.out.println("输入你的名字");
String name=br.readLine();

//检查用户是否输入了姓名
if(name.equals(""))
{
System.out.println("没有输入姓名!");
System.exit(1);

}
else
{
con=getConnection();
stmt=con.createStatement();
rs=stmt.executeQuery("select count(*) from questionanswers");
rs.next();
count=rs.getInt(1);
System.out.println("最多能做"+count+"道题目");
System.out.println("请选择你要做多少道题目:");
String totalQ=br.readLine();
if(totalQ.equals("")){
System.out.println("请输入你要做多少道题目!");
System.exit(1);

}
else {
totalQuestions=Integer.parseInt(totalQ);
if(totalQuestions>count){
System.out.println("你说要做的题目超过题目最大数额!");
con.close();
stmt.close();
System.exit(1);
}
else if (totalQuestions==0){
System.out.println("请输入合法的数目!");
System.exit(1);
}
else {
count=totalQuestions;
System.out.println("*********现在开始答题************");

while(totalQuestions>0)
{
System.out.println(totalQuestions);
String sql="select question,answer from questionanswers where questionid="+totalQuestions;
rs=stmt.executeQuery(sql);
System.out.println(sql);
System.out.println(rs.getString("QUESTION"));
answer=br.readLine();
if(answer.equalsIgnoreCase(rs.getString("ANSWER")))
rightCount=rightCount+1;
else
wrongCount=wrongCount+1;
totalQuestions=totalQuestions-1;
}

}
}
}
GregorianCalendar gcalendar=new GregorianCalendar();
String date=gcalendar.get(Calendar.MONTH)+"/"+gcalendar.get(Calendar.DATE)+"/"+gcalendar.get(Calendar.YEAR);
stmt.executeUpdate("insert into UserHistory values('"+name+"','"+date+"',"+count+","+rightCount+","+wrongCount+")");
System.out.println("你的成绩:");
System.out.println("正确:"+rightCount);
System.out.println("错误:"+wrongCount);

stmt.close();
con.close();



}
catch(Exception e)
{e.printStackTrace();} }}运行中间出错,运行到while循环的时候,System.out.println(sql);这句之后出现错误,报错为:
COM.ibm.db2.jdbc.DB2Exception: [IBM][CLI Driver] CLI0115E  无效的游标状态 SQLSTATE=24000求助!如何解决?我实在看不出错在什么地方??