import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;import java.sql.Statement;
import javax.swing.*;
import javax.swing.ComboBoxEditor;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;import javax.swing.SwingConstants;
public class DeleteStaff implements ActionListener
{
      JDialog dialog;
      //JTextField tf=new JTextField();
     JComboBox combo=null;
   int[] data;
      public DeleteStaff(JFrame jf)   
      {
       dialog=new JDialog(jf,"Staff Delete");
       Container dialogPane = dialog.getContentPane();
       dialogPane.setLayout(new GridLayout(2,2));
       dialogPane.add(new JLabel("Please input StaffNo:",SwingConstants.CENTER));
      // dialogPane.add(tf);
       try{ 
   Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
  
    Connection con;
  
   con = DriverManager.getConnection("jdbc:odbc:MS","test","1234");
  
    Statement stmt;
  
   stmt = con.createStatement();
  
    ResultSet rs=stmt.executeQuery("Select * From Person");
    int j=0;
    System.out.print("b");
           while(rs.next())
    {
    
    j++;
    }
           System.out.println("c");
          rs.close();
          
          ResultSet r=stmt.executeQuery("Select * From Person");
    int n;
    n=j;
    System.out.println("n"+n);
   data=new int[n];   j=0;
    while(r.next())
    {
    data[j]=r.getInt("ID");
    j++;
    System.out.println("ssssssss");
    System.out.println("data[j]:"+data[j]);//这里的data[j]怎么是0?    }
    String[] data1=new String[n];
    for(j=0;j<n;j++)
    {
    data1[j]=String.valueOf(data[j]);
    System.out.println(data1[j]);
    }
       combo=new JComboBox(data1);
         combo.setEditable(true);
         ComboBoxEditor editor=combo.getEditor();
         combo.configureEditor(editor, "please choose or input the ID");
        
         
      
         dialogPane.add(combo);
         JButton b1=new JButton("EnSure");
         dialogPane.add(b1);
         JButton b2=new JButton("Cancle");
         dialogPane.add(b2);
         b1.addActionListener(this);
        b2.addActionListener(this);
         dialog.setBounds(200,150,500,100);
         dialog.getRootPane().setDefaultButton(b1);
         dialog.setVisible(true);
    stmt.close();
       con.close();
       
       }
   catch(Exception ex){}
  
    
      }
      public void actionPerformed(ActionEvent e)
      {
       String cmd=e.getActionCommand();
       if(cmd.equals("EnSure"))
       {
       try
       { 
     Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
     Connection con=DriverManager.getConnection("jdbc:odbc:MS","test","1234");
     String sq="DELETE FROM Person WHERE ID=?";
    
     PreparedStatement pstmt=con.prepareStatement(sq);
                int ID=Integer.parseInt(combo.getSelectedItem().toString());
//     int ID=Integer.parseInt(tf.getText());
     pstmt.setInt(1, ID);
     pstmt.executeUpdate();
     pstmt.close();
     con.close();
     JOptionPane.showMessageDialog(dialog,"Delete Success","Success",JOptionPane.INFORMATION_MESSAGE);
       }
       catch(Exception ex){}
       }
       else if(cmd.equals("Cancle"))
       {
       dialog.dispose();
       }
      }
}

解决方案 »

  1.   


    当然是0了
    你的代码while(r.next())
      {
      data[j]=r.getInt("ID");
      j++;
      System.out.println("ssssssss");
      System.out.println("data[j]:"+data[j]);//这里的data[j]怎么是0?  } 
    黄色部分已经j++了,也就是说,输出语句中的j的值刚好比你从结果集中取值并放入的data[j]的下标多1
    也就是说,你在循环体中的第一行的data[j]和你在循环体中最后一行的data[j]不是同一个东西
    你刚把data[j]赋予值r.getInt("ID"),但是,你System.out.println("data[j]:"+data[j])这个输出的内容确实data[j+1]的内容, 由于还没有被你敷过值,当然是默认值0 了
      

  2.   

    一般用到这种循环语句,一个好习惯是将循环变量(这里的j)的更新放在循环体的最后一行,你如果将j++放在
    System.out.println("data[j]:"+data[j]); 语句的后面,结果就正确了