【问题标题】:array out of bounds exce.. creating multidimensional array from mysql table数组超出范围异常..从 mysql 表创建多维数组
【发布时间】:2014-06-04 06:51:36
【问题描述】:

所以我一直在尝试创建一个String[][],使用JDBC 从数据库中提取其项目,但无法将结果输入String[][] 我做错了什么我收到此错误:

java.lang.ArrayIndexOutOfBoundsException: 4
    at modelo.ConectorBaseDatos.getRows_From_DB(ConectorBaseDatos.java:194)
    at modelo.ConectorBaseDatos.main(ConectorBaseDatos.java:237)

第 194 行是:

rows_list[rows][cols] = result.getString(2);

代码如下:

public String[][] getRows_From_DB(String tableName, String db, String querY){

            try{

                    int columnCount = this.getTableInfo(tableName, db, true, false) - 1;
                    int rowCount =  this.getTableInfo(tableName, db, false, true) - 1;

                rows_list = new String[rowCount][columnCount];

                Connection con = getConnect_to_DB("fifa");

                PreparedStatement statement  = con.prepareStatement(querY);

                ResultSet result = statement.executeQuery();

                while(result.next()){

                         for(int rows = 1; rows <= rowCount; rows++){

                                for(int cols = 1; cols <= columnCount; cols ++){

                                        rows_list[rows][cols] = result.getString(2);
                                        rows_list[rows][cols] = result.getString(3);
                                        rows_list[rows][cols] = result.getString(4);
                                        rows_list[rows][cols] = result.getString(5);
                                }
                         }
                }




            }catch(Exception e){
                e.printStackTrace();
                JOptionPane.showMessageDialog(null, "Error en getRows_From_DB()" + e, "ERROR!", JOptionPane.ERROR_MESSAGE, null);
            }

    return rows_list;
}

【问题讨论】:

  • Java 数组从 0 开始并上升到它们定义的索引 - 1。您正在尝试访问定义索引 (rowCount) 处的元素。

标签: java mysql arrays multidimensional-array


【解决方案1】:

这里有几个问题:

  • 您从 1 而不是 0 开始索引(如 Kon 所述)
  • 您设置了给定的 rows_list[rows][cols] 4 次(这 3 次将替换实例)
  • 您对行进行两次迭代(在结果集中返回一个,在使用行计数时第二次。

请参阅以下解决这些问题的解决方案:

  ...
  ResultSet result = statement.executeQuery();

  int rowNumber = 0    
  while(result.next()){
     //Alternatively iterate here in another loop through all columns.
     rows_list[rowNumber][0] = result.getString(2);
     rows_list[rowNumber][1] = result.getString(3);
     rows_list[rowNumber][2] = result.getString(4);
     rows_list[rowNumber][3] = result.getString(5);
  }
}catch(Exception e){
  ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    • 2018-08-04
    • 2013-08-28
    • 2020-08-09
    相关资源
    最近更新 更多