与数据库连接时提示:
驱动器管理器]无效的游标状态
这是这么回事?
怎么解决?

解决方案 »

  1.   

    我在以前也遇到过这个问题,我的解决办法是   
      if(RS_user.next())   {   
              //   TODO   
      }   
      如果RS_user.next()不为null的话就说明你执行的SQL语句查询到结果了,如果不成立的话就说明结果集为空。   
      
      

  2.   

    这种问题还要发代码?这就是CSDN的水平?出现无效的游标状态,就是rs的游标现在没有指向一条记录.比如刚得到结果集还没有next一次就getXXX数据.或者next已经返回false了,也就是正常while(rs.next())已经退出了,又去next一下获取数据.这样基础得不能再基础的问题,竟然一大批人没有人知道.我KAO,什么世道?
      

  3.   

    三楼那个连next返回什么类型都不知道也值得看?
    还有结果集是否为空和这个问题相关不大,结果集不为空时一样会非法游标状态.没有next或next过头了.
    这是JDBC最最基础的知识也值得看谁的贴子.2001年我就写过JDBC系列在CNJSP上,现在去我的BLOG上文章还在.
      

  4.   

    BS和凶都要有资本的.我BS的不是不懂的人,比如楼主.不懂就要问.
    BS那些要求发代码的人和说楼主说得不明白的人.你如果真懂这个问题就不会要求发代码.
    你要求发代码就说明你不懂,既然不懂还在这里装懂要别人发代码.懂就告诉人家,不懂也没有人强迫你说.既然不懂还要充什么高手好象楼主发了代码他就能知道似的.
      

  5.   

    哈哈
    楼上的,有我问题问你,好久没上msn了.
      

  6.   

    能不能给我看看这段代码哪儿错了。。
    //按始发站,终点站查询
    class Numbertrain extends JFrame implements ActionListener
    {
    JFrame frame1=new JFrame("按始发站,终点站查询");
    JLabel label1=new JLabel("始发站");
    JLabel label2=new JLabel("终点站");
    JButton button1=new JButton("确认查询");
    JButton button2=new JButton("退出");
    JTextField tf1,tf2;
    String str11,str12,str13,str14,str15,str16;
    String str21,str22,str23,str24,str25,str26;
    Numbertrain()
    {
    tf1=new JTextField(10);
    tf2=new JTextField(10);
    JPanel p=(JPanel)frame1.getContentPane();
    p.add(label1);
    p.add(tf1);
    p.add(label2);
    p.add(tf2);
    p.add(button1);
    p.add(button2);
    p.setLayout(new GridLayout(3,2));
    // tf1.addActionListener(this);
    // tf2.addActionListener(this);
    button1.addActionListener(this);
    button2.addActionListener(this);
    frame1.setBounds(150,200,300,150);
    p.setVisible(true);
    frame1.setVisible(true);
    }
    public void actionPerformed(ActionEvent e)
    {
    if(button1.equals(e.getSource()))
    {
    try{
              Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            }catch (ClassNotFoundException e1) 
          {
              System.out.println("" + e1);
          }
     try{     
         
          Connection con,con1,con2;
          Statement stmt,stmt1,stmt2;
          ResultSet rs,rs1,rs2;
               con=DriverManager.getConnection("jdbc:odbc:manage");
               stmt=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
               rs=stmt.executeQuery("select * from 火车时刻表 where 始发站='"+tf1.getText()+"' and 终点站='"+tf2.getText()+"'");
               con1=DriverManager.getConnection("jdbc:odbc:manage");
               stmt1=con1.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);//CONCUR_READ_ONLY); 
               rs1=stmt1.executeQuery("select * from 火车时刻表 where 始发站='"+tf1.getText()+"'");
               con2=DriverManager.getConnection("jdbc:odbc:manage");
                   stmt2=con2.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);//CONCUR_READ_ONLY);TYPE_SCROLL_INSENSITIVE
               rs2=stmt2.executeQuery("select * from 火车时刻表 where 终点站='"+tf2.getText()+"'");
               //String str11,str12,str13,str14,str15,str16;
               //String str21,str22,str23,str24,str25,str26;
    //            str11=rs1.getString("火车号");
    //            str12=rs1.getString("始发站");
    //            str13=rs1.getString("终点站");
    //            str14=rs1.getString("发车时间");
    //            str15=rs1.getString("到站时间");
    //            str16=rs1.getString("票价");
    //            str21=rs2.getString("火车号");
    //            str22=rs2.getString("始发站");
    //            str23=rs2.getString("终点站");
    //            str24=rs2.getString("发车时间");
    //            str25=rs2.getString("到站时间");
    //            str26=rs2.getString("票价");
    //            
               
               if(rs.next())
               {   
               rs.beforeFirst();
               while(rs.next())
               {
               System.out.println("火车号:"+rs.getString("火车号")+"\t"+"始发站:"+rs.getString("始发站")+"\t"+"终点站:"+rs.getString("终点站")+"\t"+"发车时间:"+rs.getString("发车时间")+"\t"+"到站时间:"+rs.getString("到站时间")+"\t"+"票价:"+rs.getString("票价")); 
               }
               }
               else
               {
               System.out.println("没有直达车,接下来查询是否有中转站");
                              if(rs1.next()&&rs2.next())
               {  
                               str11=rs1.getString("火车号");
                        str12=rs1.getString("始发站");
                        str13=rs1.getString("终点站");
                        str14=rs1.getString("发车时间");
                        str15=rs1.getString("到站时间");
                        str16=rs1.getString("票价");
                        
                        str21=rs2.getString("火车号");
                        str22=rs2.getString("始发站");
                        str23=rs2.getString("终点站");
                        str24=rs2.getString("发车时间");
                        str25=rs2.getString("到站时间");
                        str26=rs2.getString("票价");
                        
                          rs1.beforeFirst();
                    rs2.beforeFirst();
               while(rs1.next())
               {
               while(rs2.next())
               {
                     if(str13.equals(str22))
                     { 
                    System.out.println("从"+"  "+str12+"  "+"到"+"  "+str23+"  "+"有中转站,具体如下:");
                            System.out.println("开始的"+"  "+"火车号:"+str11);//+"  "+"始发站:"+"  "+rs1.getString("始发站"));//+"  "+"中转站:"+rs1.getString("终点站"));//+"  "+"发车时间:"+rs1.getString("发车时间")+"  "+"到站时间:"+rs1.getString("到站时间")+"  "+"票价:"+rs1.getString("票价"));
                    System.out.println("始发站:"+"  "+str12);
                    System.out.println("中转站:"+"  "+str13);
                    System.out.println("发车时间:"+"  "+str14);
                    System.out.println("到站时间:"+"  "+str15);
                    System.out.println("票价:"+"  "+str16);
                    
                    System.out.println("中转后的火车为:"+"  "+"火车号:"+str21);//+"  "+"始发站:"+"  "+rs2.getString("始发站"));//+"  "+"终点站站:"+rs2.getString("终点站"));//+"  "+"发车时间:"+rs2.getString("发车时间")+"  "+"到站时间:"+rs2.getString("到站时间")+"  "+"票价:"+rs2.getString("票价"));
                        System.out.println("始发站:"+"  "+str22);
                        System.out.println("终点站:"+"  "+str23);
                    System.out.println("发车时间:"+"  "+str24);
                    System.out.println("到站时间:"+"  "+str25);
                    System.out.println("票价:"+"  "+str26);
                     }
               } 
               rs2.beforeFirst();
               
               }
               }
                              else
                              {
                               System.out.println("没有符合您要查询的火车");
                              }
                  
               }
               rs.close();
               rs1.close();
               rs2.close();
               stmt.close();
               stmt1.close();
               stmt2.close();
                  con.close();
                  con1.close();
                  con2.close();
               
            }catch (SQLException e1) 
                {
           System.out.println(e1.getMessage());
                   }
               
                   }
    if(button2.equals(e.getSource()))
    {
    frame1.dispose();
    }
    }
    }