索引3超出范围3的长度

时间:2019-06-16 12:28:20

标签: java sql eclipse oracle csv

我正在尝试将csv文件中的数据读入我创建的数据库中的表中。到目前为止,我已经为3个表完成了操作,因此第四个表的代码应该相对相同,但是我仍然收到错误消息

  

线程“ main”中的异常java.lang.ArrayIndexOutOfBoundsException:索引3超出了长度3     在Verbindung.main(Verbindung.java:136)

这应该是一个非常简单的问题,但由于阵列中的索引和变量数看起来可以很好地匹配,所以我看不到哪里出了错。

这是我的代码

  // Parsing CSV file Facebookapp 
           try {
                Scanner inputStream3 = new Scanner(file3);
                //inputStream.useDelimiter("[;/n]");
                while(inputStream3.hasNext()) {
                    String data3 = inputStream3.next();
                    System.out.println(data3);
                    String[] values3 = data3.split(";");    
                    System.out.println(data3);
                    //if(values.toString().contains(";;;")) break;
                    int PRODNUM = Integer.parseInt(values3[0]);
                    double V_ERSION = Double.parseDouble(values3[1]);
                    String PHONE_ASSOC = values3[2];
                    int accountNUM = Integer.parseInt(values3[3]);
                    //creating the object FBapp with the relevant parameters
                    FBapp fbapp = new FBapp(PRODNUM, V_ERSION, PHONE_ASSOC, accountNUM);
                    facebookapp.add(fbapp);
                    }
                inputStream3.close();
                }
                catch(FileNotFoundException d) {
                d.printStackTrace();
            }

    try {
        // establish connection to database
        Class.forName("oracle.jdbc.driver.OracleDriver");
        String database = "jdbc:oracle:thin:@oracle-lab.cs.univie.ac.at:1521:lab";
        String user = "a01547605";
        String pass = "dbs19";
        Connection con = DriverManager.getConnection(database, user, pass);
        Statement stmt = con.createStatement();
        String sql3 = "INSERT into facebookapp(PRODNUM, V_ERSION, PHONE_ASSOC, accountNUM) values(?,?,?,?)";
        PreparedStatement ps = con.prepareStatement(sql3);

        final int batchSize = 100;
        int count = 0;
        for(FBapp d: facebookapp) {
            ps.setInt(1, d.getPRODNUM());
            ps.setDouble(2, d.getV_ERSION());
            ps.setString(3, d.getPHONE_ASSOC());
            ps.setInt(4, d.getaccountNUM());
            ps.addBatch();

            if(++ count% batchSize == 0) {
                ps.executeBatch();
            }
        }
          ps.close();

      }   

          catch (Exception e) {
          System.err.println(e.getMessage());
          }

我的CSV文件如下所示,这是第100行

1   1.00    Iphone  100

同样,当我打印出在剪切前从CSV文件中读取的内容时,它就是这样

1;1.00;Iphone

1 个答案:

答案 0 :(得分:0)

HashRouter是打印“ 1; 1.00; Iphone”的内容,应该是CSV文件的内容。该行上只有三个值,因此,由于您对程序进行了硬编码,期望在System.out.println(data3);处出现第四个值,因此此处将失败。

您还打印了data3两次。尝试在第二条语句中打印出数组value3的内容,以捕获代码错误。