有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java数组索引越界

我想创建一个组合框,它在运行时从数据库中获取名称。所以我创建了一个空字符串数组,但它抛出了一个异常ArrayIndexOutofBond。我认为初始化中有一个错误

            String s[]=new String[0];
            {
                 try
                {
                  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                  Connection con =DriverManager.getConnection("jdbc:odbc:project","sa","123456");
                  Statement stmt= con.createStatement();
                  ResultSet rs=stmt.executeQuery("SELECT Name FROM company");
                  i=0;
                  while(rs.next()) {        
                        s[i]=rs.getString(1);
                        i++;
                  }
                }
                catch(Exception ex)
                {
                    JOptionPane.showConfirmDialog(f,ex);
                }
                cb=new JComboBox(s);
            }

共 (4) 个答案

  1. # 1 楼答案

    您还可以使用向量列表:

     {
    
      Vector<String> namesList;
    
      try
            {
              Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
              Connection con = DriverManager.getConnection("jdbc:odbc:project","sa","123456");
              Statement stmt= con.createStatement();
              ResultSet rs=stmt.executeQuery("SELECT Name FROM company");
              namesList = new Vector<>();
    
              while(rs.next()) {
                    namesList.add(rs.getString(1));
              }
            }
            catch(Exception ex)
            {
                JOptionPane.showConfirmDialog(f,ex);
            }
            cb=new JComboBox(namesList);
     }
    
  2. # 2 楼答案

    您创建了长度为0的数组。如果你知道需要多少成员使用数组,如果你不知道最好使用ArrayList

  3. # 3 楼答案

    我还在做一个项目,从数据库中获取数据并将其添加到组合框中,我希望您能简单处理,不需要创建数组,您只需编写:

     try
                {
                  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                  Connection con = DriverManager.getConnection("jdbc:odbc:project","sa","123456");
                  Statement stmt= con.createStatement();
                  ResultSet rs=stmt.executeQuery("SELECT Name FROM company");
                  cb=new JComboBox();
                  while(rs.next()) {   
                        cb.addItem(rs.getString(1));
                  }
                }
                catch(Exception ex)
                {
                    JOptionPane.showConfirmDialog(f,ex);
                }
                
    

    注意:如果您想先保存数据,然后将其添加到combobox中,您应该使用Vector而不是array,因为它有限制u将按照

    新来的白痴

  4. # 4 楼答案

    数组是一个容器对象,它包含固定数量的单一类型的值。数组的长度是在创建数组时确定的。创建后,其长度是固定的。您正在创建一个数组以容纳0个元素

    String s[]=new String[0]; //<< intialized with length 0
    

    当您试图访问它的第一个元素s[0]时,它将抛出^{}

    Thrown to indicate that an array has been accessed with an illegal index. The index is either negative or greater than or equal to the size of the array.

    大小数组的大小为0,因此在访问索引0时引发异常

    下面是阵列的基本示意图,以供理解

    enter image description here

    它是一个长度为10的数组,索引范围为09

    由于在声明数组本身时不知道数据结构需要存储的元素数。在您的案例中,最好使用动态Collection,可能是List的任何一个实现,比如ArrayList

    List<String> s = new ArrayList<String>();
    while(rs.next())
    {
       s.add(rs.getString("NAME")); // using column name instead of index "1" here
    }
    

    建议阅读:

    1. Oracle's tutorial on Java arrays
    2. Lists vs Arrays - when to use what