当前位置: 代码迷 >> J2SE >> rs.next运行不了解决办法
  详细解决方案

rs.next运行不了解决办法

热度:60   发布时间:2016-04-23 20:29:33.0
rs.next运行不了
package library;
import java.awt.*;
import java.awt.event.*;

import javax.swing.*;
import java.sql.*;

public class BorrowInfo extends JFrame implements ActionListener 
{
ResultSet rs;
JLabel lb1=new JLabel("请输入学生号:");
JTextField jtf1=new JTextField(10);
JTextArea jta=new JTextArea(20,30);
JLabel lb=new JLabel("借阅信息:");
JButton bt=new JButton("\u5173\u95ED");
JButton bt1=new JButton("查询");
private final JLabel label = new JLabel("New label");
public BorrowInfo()
{
super("查询借阅信息");
Container c=getContentPane();
getContentPane().setLayout(null);
    lb.setBounds(10, 170, 71, 15);
    getContentPane().add(lb);
    jta.setBounds(10, 195, 464, 181);
    getContentPane().add(jta);
bt.setBounds(91, 166, 73, 23);
getContentPane().add(bt);
lb1.setBounds(178, 170, 98, 15);
getContentPane().add(lb1);
jtf1.setBounds(286, 167, 115, 21);
getContentPane().add(jtf1);
bt1.setBounds(411, 166, 64, 23);
getContentPane().add(bt1);
label.setIcon(new ImageIcon(this.getClass().getResource("/image/Library.jpg")));
label.setBounds(0, -3, 484, 164);

getContentPane().add(label);
bt1.addActionListener(this);
bt.addActionListener(this);
setSize(500,425);
setLocationRelativeTo(null);

}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==bt)
{
this.dispose();
}
if(e.getSource()==bt1)
{
String stuid=jtf1.getText();
String sqlstr="select * from bookborrow where stuid='"+stuid+"'";
rs=connection.getResult(sqlstr);
try
{
jta.setText("");

 while(rs.next())

jta.append("借阅号:"+rs.getString(1)+","+"借书时间:"+rs.getString(3)+","+"\n"+"还书时间:"+rs.getString(4)+","+"\n"+"图书状态:"+rs.getString(5)+"\n");
                  

if(!(rs.next())){
                          jta.append("对不起,没有此借阅信息");                   
}
    
}
catch(Exception pe) 

             pe.printStackTrace(); 
        } 
}
}
}
为什么查询的数据有或没有,都会运行   jta.append("对不起,没有此借阅信息"); 这句话
------解决方案--------------------
while(rs.next())

jta.append("借阅号:"+rs.getString(1)+","+"借书时间:"+rs.getString(3)+","+"\n"+"还书时间:"+rs.getString(4)+","+"\n"+"图书状态:"+rs.getString(5)+"\n");
                  

这里已经把指针移动最后一行了
你在这之后 next当然是false啦,所以无论有无数据都是false
------解决方案--------------------
1 楼正解!
rs.next()就是将当前指针移到下一行数据,前提是有下一行
while(rs.next()){..}
指针已经移到最后了,也就是没有下一行了,所以rs.next()返回的是false,
所以,
if(!(rs.next())){
                          jta.append("对不起,没有此借阅信息");                   
}
肯定会执行!
------解决方案--------------------
你把if判断移动到while前面就可以了,因为你做了while判断之后无论是否有数据都已经在最后一条数据了
------解决方案--------------------
while(rs.next()) while会将rs一直next() 下去,直至rs.next()为false时。
所以 就是楼上的办法了,先判断if(!rs.next()),确保rs非空时,再进行while循环,读取结果集中的数据。
------解决方案--------------------
加2 个 话就一层层往下找的。 
  相关解决方案