用了rs.next() 仍旧出现[Microsoft][SQLServer 2000 Driver for JDBC]Invalid operation for the current 错误!!!!!
我用java从数据库中调数据出来,连接时出错,显示得错误信息为
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Invalid operation for the current cursor position.
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.base.BaseResultSet.validateCursorPosition(Unknown Source)
at com.microsoft.jdbc.base.BaseResultSet.getDouble(Unknown Source)
at com.microsoft.jdbc.base.BaseResultSet.getDouble(Unknown Source)
我在网上查了,关于这个错误的原因说是由于没有加上rs.next()但问题是我已经加上了,而且程序里别得部分连接数据库的读取都正常,下面是我连接数据库和从中读程序得代码,请帮我看看我到底哪里出了问题。谢谢
if(keyword==null){ st=conn.createStatement();
st1=conn.createStatement(); rs=st.executeQuery(sql1);
rs1=st1.executeQuery(sql2);
System.out.println("sql1="+sql1+"");
System.out.println("sql2="+sql2+""); while(rs.next()){
foreman=new ForecastManager(); double forNum=rs.getDouble("forNum");
double forMoney=rs.getDouble("forMoney");
double saleNum=rs.getDouble("saleNum");
double saleMoney=rs.getDouble("saleMoney"); String proNum = myformat.format((forNum-saleNum)/saleNum);//销售量增长率
String proMon = myformat.format((forMoney-saleMoney)/saleMoney);//销售额增长率 foreman.setTheyear(rs.getInt("theyear"));
foreman.setSeason(rs.getInt("season"));
foreman.setForNum(rs.getDouble("forNum"));
foreman.setForMoney(rs.getDouble("forMoney"));
foreman.setSaleNum(rs.getDouble("saleNum"));
foreman.setSaleMoney(rs.getDouble("saleMoney")); foreman.setProbilityNum(proNum);
foreman.setProbilityMoney(proMon);
System.out.println("list1统计开始");
System.out.println("年是"+foreman.getTheyear());
System.out.println("季度是"+foreman.getSeason());
System.out.println("数量增张率"+proNum);
System.out.println("销售额增张率"+proMon);
list1.add(foreman);
System.out.println("list1已经添加一个成功,结束");
}rs.close(); while(rs1.next()){ foreman=new ForecastManager(); double forNum=rs.getDouble("forNum");
double forMoney=rs.getDouble("forMoney");
double saleNum=rs.getDouble("saleNum");
double saleMoney=rs.getDouble("saleMoney"); String proNum = myformat.format((forNum-saleNum)/saleNum);//销售量增长率
String proMon = myformat.format((forMoney-saleMoney)/saleMoney);//销售额增长率 foreman.setTheyear(rs.getInt("theyear"));
foreman.setSeason(rs.getInt("season"));
foreman.setForNum(rs.getDouble("forNum"));
foreman.setForMoney(rs.getDouble("forMoney"));
foreman.setSaleNum(rs.getDouble("saleNum"));
foreman.setSaleMoney(rs.getDouble("saleMoney")); foreman.setProbilityNum(proNum);
foreman.setProbilityMoney(proMon); foreman.setArea(rs.getString("area"));
System.out.println("list2统计开始");
System.out.println("年是"+foreman.getTheyear());
System.out.println("季度是"+foreman.getSeason());
System.out.println("区域是"+foreman.getArea());
System.out.println("数量增张率"+proNum);
System.out.println("销售额增张率"+proMon);
list2.add(foreman);
System.out.println("list2已经添加一个成功,结束"); }rs1.close();
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Invalid operation for the current cursor position.
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.base.BaseResultSet.validateCursorPosition(Unknown Source)
at com.microsoft.jdbc.base.BaseResultSet.getDouble(Unknown Source)
at com.microsoft.jdbc.base.BaseResultSet.getDouble(Unknown Source)
我在网上查了,关于这个错误的原因说是由于没有加上rs.next()但问题是我已经加上了,而且程序里别得部分连接数据库的读取都正常,下面是我连接数据库和从中读程序得代码,请帮我看看我到底哪里出了问题。谢谢
if(keyword==null){ st=conn.createStatement();
st1=conn.createStatement(); rs=st.executeQuery(sql1);
rs1=st1.executeQuery(sql2);
System.out.println("sql1="+sql1+"");
System.out.println("sql2="+sql2+""); while(rs.next()){
foreman=new ForecastManager(); double forNum=rs.getDouble("forNum");
double forMoney=rs.getDouble("forMoney");
double saleNum=rs.getDouble("saleNum");
double saleMoney=rs.getDouble("saleMoney"); String proNum = myformat.format((forNum-saleNum)/saleNum);//销售量增长率
String proMon = myformat.format((forMoney-saleMoney)/saleMoney);//销售额增长率 foreman.setTheyear(rs.getInt("theyear"));
foreman.setSeason(rs.getInt("season"));
foreman.setForNum(rs.getDouble("forNum"));
foreman.setForMoney(rs.getDouble("forMoney"));
foreman.setSaleNum(rs.getDouble("saleNum"));
foreman.setSaleMoney(rs.getDouble("saleMoney")); foreman.setProbilityNum(proNum);
foreman.setProbilityMoney(proMon);
System.out.println("list1统计开始");
System.out.println("年是"+foreman.getTheyear());
System.out.println("季度是"+foreman.getSeason());
System.out.println("数量增张率"+proNum);
System.out.println("销售额增张率"+proMon);
list1.add(foreman);
System.out.println("list1已经添加一个成功,结束");
}rs.close(); while(rs1.next()){ foreman=new ForecastManager(); double forNum=rs.getDouble("forNum");
double forMoney=rs.getDouble("forMoney");
double saleNum=rs.getDouble("saleNum");
double saleMoney=rs.getDouble("saleMoney"); String proNum = myformat.format((forNum-saleNum)/saleNum);//销售量增长率
String proMon = myformat.format((forMoney-saleMoney)/saleMoney);//销售额增长率 foreman.setTheyear(rs.getInt("theyear"));
foreman.setSeason(rs.getInt("season"));
foreman.setForNum(rs.getDouble("forNum"));
foreman.setForMoney(rs.getDouble("forMoney"));
foreman.setSaleNum(rs.getDouble("saleNum"));
foreman.setSaleMoney(rs.getDouble("saleMoney")); foreman.setProbilityNum(proNum);
foreman.setProbilityMoney(proMon); foreman.setArea(rs.getString("area"));
System.out.println("list2统计开始");
System.out.println("年是"+foreman.getTheyear());
System.out.println("季度是"+foreman.getSeason());
System.out.println("区域是"+foreman.getArea());
System.out.println("数量增张率"+proNum);
System.out.println("销售额增张率"+proMon);
list2.add(foreman);
System.out.println("list2已经添加一个成功,结束"); }rs1.close();
st=conn.createStatement();
st1=conn.createStatement();期待有高手来解答
你写一个简单的连接数据库 看可不可以连接成功 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
Connection conn=DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433","sa","");
System.out.println(conn);
看看有没有问题
你的SQLSERVER 估计没打SP4补丁
你在第二个循环中,依然使用了rs.getXXX,
而rs已经在第一个循环中遍历到头了。while(rs1.next()){foreman=new ForecastManager();double forNum=rs.getDouble("forNum");
double forMoney=rs.getDouble("forMoney");
//以下的都是
double saleNum=rs.getDouble("saleNum");
double saleMoney=rs.getDouble("saleMoney");String proNum = myformat.format((forNum-saleNum)/saleNum);//销售量增长率
String proMon = myformat.format((forMoney-saleMoney)/saleMoney);//销售额增长率 foreman.setTheyear(rs.getInt("theyear"));
foreman.setSeason(rs.getInt("season"));
foreman.setForNum(rs.getDouble("forNum"));
foreman.setForMoney(rs.getDouble("forMoney"));
foreman.setSaleNum(rs.getDouble("saleNum"));
foreman.setSaleMoney(rs.getDouble("saleMoney"));foreman.setProbilityNum(proNum);
foreman.setProbilityMoney(proMon);foreman.setArea(rs.getString("area"));
System.out.println("list2统计开始");
System.out.println("年是"+foreman.getTheyear());
System.out.println("季度是"+foreman.getSeason());
System.out.println("区域是"+foreman.getArea());
System.out.println("数量增张率"+proNum);
System.out.println("销售额增张率"+proMon);list2.add(foreman);System.out.println("list2已经添加一个成功,结束");}rs1.close();