最近用eclipse 写一个单机版的宿舍管理系统 
有一个搜索界面 无论我选择哪个条件 输入什么内容 都会显示出来 当我不停按确定 就会累计地弹出数据...
第一个是代码逻辑问题 我刚接触数据库 很多不懂 我希望大家教教我纠正这两个问题 下面是我的代码:
           数据库那边用ACCESS 刚学JAVA 现在应用 ACCESS比较简单吧 
import java.awt.*;
import java.sql.*;
import java.util.*;
import java.awt.event.*;
import javax.swing.*;import javax.swing.*;
import javax.swing.table.DefaultTableColumnModel;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
public class dormitory_Inquire extends JFrame implements ActionListener{
Vector rowVectors=new Vector();;
Vector columnHeaderVector=new Vector();
JButton b1,b2;
         JTextField txt;
         JComboBox box;
         JTable table;
         JScrollPane p1 = new JScrollPane();
         DefaultTableModel tableModel=new DefaultTableModel ( );
         dormitory_Inquire f;
         ResultSet r;
   Connection conn;
   Statement stm;
   
   //构造方法  
     dormitory_Inquire()
     {   super("宿舍查询");
      setLayout(null);
      setSize(1080,540);
      setResizable(false);
      setVisible(true);
       
      txt = new JTextField(50);
      add(txt);
      txt.setBounds(320, 20, 250, 25);
      box = new JComboBox();
      add(box);
      box.setBounds(580, 20, 90, 25);
      box.addItem("宿舍楼号");
      box.addItem("宿舍号");
      box.addItem("姓名");
      box.addItem("性别");
      box.addItem("空缺人数");
      b1 = new JButton("确定");
      add(b1);
      b1.setBounds(380, 50, 70, 25);
      b1.addActionListener(this);
      
      b2 = new JButton("取消");//取消按钮的监听
      add(b2);
      b2.setBounds(480, 50, 70, 25);
      b2.addActionListener(new ActionListener(){
      public void actionPerformed(ActionEvent e){
      String cmd=e.getActionCommand();
 if(cmd.equals("取消"))
 txt.setText("");
      }
     });
      
      //表
      String[ ]columnHeaderVector = {"宿舍楼号","宿舍号","姓名","性别","空缺人数"};
 table = new JTable();
 JScrollPane srp = new JScrollPane(table);
srp.setBounds(0, 80, 1080,500);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    add(srp);
    table.setModel(tableModel);
     tableModel.setColumnIdentifiers(columnHeaderVector);
    for(int i=0;i<table.getColumnCount();i++){
        DefaultTableColumnModel colModel = (DefaultTableColumnModel) table.getColumnModel();
        TableColumn col = colModel.getColumn(i);
        int width = 10;         TableCellRenderer renderer = col.getHeaderRenderer();
        if (renderer == null) {
          renderer = table.getTableHeader().getDefaultRenderer();
        }
        Component comp = renderer.getTableCellRendererComponent(table, col.getHeaderValue(), false,
            false, 10, 10);
        width = comp.getPreferredSize().width;
        col.setPreferredWidth(width+180);
    }
  }
     
     public void actionPerformed(ActionEvent e){
     String cmd = e.getActionCommand();
     if(e.getSource() instanceof JButton){
     if(cmd.equals("确定"))
     {
     try {
check();
} catch (SQLException e1) {

e1.printStackTrace();
}
     }
     }
      }
                 public void check() throws SQLException
                 { if(txt.getText().equals(""))
                   {
                  JOptionPane.showMessageDialog(f,"请填写查询条件");
          return;
                   }
                 
                
           try{   Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
              }catch(ClassNotFoundException e){
               System.out.println("加载驱动程序失败,请检查");
              }
                 try{
                 String url = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=D://AccomodationControl.mdb" ;
                 conn = DriverManager.getConnection(url);
                 stm = conn.createStatement();
                 if((!(txt.getText().equals("")))&& box.getSelectedItem().equals("宿舍楼号")){
                  
                   r = stm.executeQuery("select 宿舍号,姓名,性别,空缺人数  from 宿舍查询 ");
                 }
                 else 
                 if((!(txt.getText().equals("")))&& box.getSelectedItem().equals("宿舍号")){
                  
                  r = stm.executeQuery("select 宿舍楼号,姓名,性别,空缺人数  from 宿舍查询");
                 }
                 else 
                 if((!(txt.getText().equals("")))&& box.getSelectedItem().equals("姓名")){
                  
                   r = stm.executeQuery("select 宿舍楼号,宿舍号,姓名,性别 ,空缺人数 from 宿舍查询");
                 }
                 else 
                 if((!(txt.getText().equals("")))&& box.getSelectedItem().equals("性别")){
                  
                 r = stm.executeQuery("select 宿舍楼号,宿舍号,姓名,空缺人数  from 宿舍查询");
                 }
                 else
                  if((!(txt.getText().equals("")))&& box.getSelectedItem().equals("空缺人数")){
                  
                      r = stm.executeQuery("select 宿舍楼号,宿舍号,空缺人数 from 宿舍查询 where 空缺人数 >=1");
                      }
                 int columnCount =r.getMetaData().getColumnCount();
                 while(r.next())
              {
        Vector singleRow=new Vector();
           
        
        for(int i=0;i<columnCount;i++)
               singleRow.addElement(r.getObject(i+1));
             
             rowVectors.addElement(singleRow);
             }
                 ResultSet rsColumns=conn.getMetaData(). getColumns(null,null,"宿舍查询",null);
              while(rsColumns.next())
             {
               columnHeaderVector.addElement(rsColumns.getString("COLUMN_NAME"));
            
             }
              tableModel.setDataVector(rowVectors,columnHeaderVector);
              
                stm.close();
             conn.close();
                 
                 }catch(SQLException ae){
                  JOptionPane.showMessageDialog(f,"没有此信息");
                 }
                 
    }                    
                 
                 
     public static void main(String[] args){
      new dormitory_Inquire();
     }
}

解决方案 »

  1.   

    累计弹出什么?
    你debug了 没有?
    你的所有功能都是在点击"确定"中实现的,肯定是点一次执行一遍
    就上面一点点东西,你用edbug模式调试一下就知道了....
      

  2.   

    没太细看     累计出现数据的问题应该是
     if(txt.getText().equals(""))
    {
    JOptionPane.showMessageDialog(f,"请填写查询条件");
    return;
    }
    之后 加上 
    columnHeaderVector.clear()  就可以解决了  输入什么条件都有内容的那个 应该是你生产 sql语句的那段逻辑不正确
      

  3.   

    另外提一下啊    你出现 累计数据的 问题应该就是 你将 columnHeaderVector 定义成了 类属性而你又没有清理他内部的值 所以 每次确定  都对 columnHeaderVector 进行追加内容
    其实 columnHeaderVector 这个东西 对于你这个需求 就是 写到 方法内 做成 局部变量 就OK了 没次点确定 新new一个  里面就是空的了
      

  4.   

    谢谢........想再请问一个 如何调整表格?
     如何做到每次按确定 就把内容清空一次?可以留个QQ联系方式吗?我在CSDN不太懂发图片