在这一句 
rs=Opdb.getRs();
执行后,可能 rs 已经为空,所以他会报无效的游标状态。

解决方案 »

  1.   

    ^_^,
    rs=Opdb.getRs();//这句处理不好,如果查询集是空的,就可能会报错
      

  2.   

    我做了判断
    if(rs==null){
      out.println("Err");
      return;
    }
    但没有返回那个错误
    应该不是空的吧
      

  3.   

    try {
          Opdb.setSql("Select distinct Department From MenuTree");
          rs=Opdb.getRs();
          if(rs!=null && rs.next()) {
               while(rs.next()){
                    out.println(rs.getString("Department")+"<br>");
               }
          }
    } catch(e) {
          System.out.println(e.toString());
    }
    试一下
      

  4.   

    实际上就是
    SQL 语句我加了一个distinct就报那个错误
    不加Distinct完全正常
      

  5.   

    你在SQL中运行你的那条语句有结果吗?如果没有结果,那肯定报错,如果有,那么问题就不是这里。
      

  6.   

    所有的一切都正常,
    就是加入distinct 就不行
    或者加入
    group by xxx 也不行
    而在数据库中能执行相应的语句,
    是不是ODBC驱动的问题?
      

  7.   

    我刚试了,odbc可以的如果只是查询应该没有问题
      

  8.   

    应该是你贴出来,别人才好调试表为sutot         
    ----------- 
    1
    2
    1
    package sqltest;import java.sql.*;
    import java.util.*;
    public class SqlTest
    {
    Connection conn;
    Statement stat;
    PreparedStatement pstat;

    String user = "sa";
    String password = "sjx";
    String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
        String url = "jdbc:odbc:sun"; public SqlTest(){
    try{
    Class.forName(driver);
    conn = DriverManager.getConnection(url,user,password);
    stat = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
    }
    catch(ClassNotFoundException e){
    System.out.println("驱动加载错误");
    e.printStackTrace();
    }
    catch(SQLException e){
    e.printStackTrace();
    }

    }
    public ResultSet getRs(String sql){
    ResultSet res = null;
     
    try{

      res = stat.executeQuery(sql);
    }
    catch(SQLException e)
    {
    e.printStackTrace();
    }
    return res;
    }

    public static void main(String []args)
    {
    try{
    SqlTest sqltest = new SqlTest();

         ResultSet rs = sqltest.getRs("select  distinct tot  tot  from su");

    while(rs.next()){
    System.out.println(rs.getString("tot"));
    } }
    catch(Exception e)
    {
    e.printStackTrace();
    }

    }
    }
      

  9.   

    一般来说,rs还没rs.next的时候你如果取数的话就可能出现改问题