无效的游标状态,是怎么回事? 与数据库连接时提示:驱动器管理器]无效的游标状态这是这么回事?怎么解决? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我在以前也遇到过这个问题,我的解决办法是 if(RS_user.next()) { // TODO } 如果RS_user.next()不为null的话就说明你执行的SQL语句查询到结果了,如果不成立的话就说明结果集为空。 这种问题还要发代码?这就是CSDN的水平?出现无效的游标状态,就是rs的游标现在没有指向一条记录.比如刚得到结果集还没有next一次就getXXX数据.或者next已经返回false了,也就是正常while(rs.next())已经退出了,又去next一下获取数据.这样基础得不能再基础的问题,竟然一大批人没有人知道.我KAO,什么世道? 三楼那个连next返回什么类型都不知道也值得看?还有结果集是否为空和这个问题相关不大,结果集不为空时一样会非法游标状态.没有next或next过头了.这是JDBC最最基础的知识也值得看谁的贴子.2001年我就写过JDBC系列在CNJSP上,现在去我的BLOG上文章还在. BS和凶都要有资本的.我BS的不是不懂的人,比如楼主.不懂就要问.BS那些要求发代码的人和说楼主说得不明白的人.你如果真懂这个问题就不会要求发代码.你要求发代码就说明你不懂,既然不懂还在这里装懂要别人发代码.懂就告诉人家,不懂也没有人强迫你说.既然不懂还要充什么高手好象楼主发了代码他就能知道似的. 哈哈楼上的,有我问题问你,好久没上msn了. 能不能给我看看这段代码哪儿错了。。//按始发站,终点站查询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(); } }} 用反射就能实例化了吗? JComboBox中如何加JLabel 关于combo的modifyListener? 求JAVA手机短信开发的文档 用jcreator输入中文经常会出现GBK映射错误 java语法问题 java代码运行问题 我想这样获取两个数,为什么不正确呀? 请讲一下java中的事件模型 使用版的Together的序列号怎么弄啊? Junit 测试用例(NextDate) java中如何根据一个包含类名的字符串获得这个类实例?
if(RS_user.next()) {
// TODO
}
如果RS_user.next()不为null的话就说明你执行的SQL语句查询到结果了,如果不成立的话就说明结果集为空。
还有结果集是否为空和这个问题相关不大,结果集不为空时一样会非法游标状态.没有next或next过头了.
这是JDBC最最基础的知识也值得看谁的贴子.2001年我就写过JDBC系列在CNJSP上,现在去我的BLOG上文章还在.
BS那些要求发代码的人和说楼主说得不明白的人.你如果真懂这个问题就不会要求发代码.
你要求发代码就说明你不懂,既然不懂还在这里装懂要别人发代码.懂就告诉人家,不懂也没有人强迫你说.既然不懂还要充什么高手好象楼主发了代码他就能知道似的.
楼上的,有我问题问你,好久没上msn了.
//按始发站,终点站查询
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();
}
}
}