这里边有点问题   private void displayResultSet(ResultSet rs)throws SQLException
{
//定位到第一条记录
boolean moreRecords=rs.next(); //此处已将指针移到了第一行
for(int i=1;i<=rsmd.getColumnCount();++i)
{
//获取记录集
do
{
rows.addElement(getNextRow(rs,rsmd));
}while(rs.next());
}
}do{
}while(rs.next())
这实际上移过了记录尾部,所以会出错

解决方案 »

  1.   

    我不太喜欢这种写法,叫人看不太清楚实际的运行情况,我改动了一下        private void displayResultSet(ResultSet rs)throws SQLException
            {
                //定位到第一条记录
                boolean hasData=false;
                //如果没有记录,则提示一条消息
                Vector columnHeads=new Vector();
                Vector rows=new Vector();            try
                {
                    //获取字段的名称
                    ResultSetMetaData rsmd=rs.getMetaData();
                    for (int i=1;i<=rsmd.getColumnCount();i++){
                        columnHeads.addElement(rsmd.getColumnName(i));
                    }                while(rs.next()){
                        rows.addElement(getNextRow(rs,rsmd));
                    }            } catch(SQLException e){
                    e.printStackTrace();
                }            hasData=!rows.isEmpty();
                if(!hasData)
                {
                    JOptionPane.showMessageDialog(this,"结果集中无记录");
                    setTitle("无记录显示");
                    return;
                }            table=new JTable(rows,columnHeads);
                JScrollPane scroller=new JScrollPane(table);
                Container c=getContentPane();
                c.setLayout(new BorderLayout());
                c.remove(1);//什么意思?
                c.add(scroller,BorderLayout.CENTER);
                c.validate();
            }