【发布时间】:2019-10-30 07:27:51
【问题描述】:
我正在尝试将 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;1.00;Iphone”)只有 3 个值(“1”、“1.00”、“Iphone”),但您正在尝试读取第 4 个值此行不存在!
-
它在CSV文件中,有第四行“accountNUM”我在我的代码中也明确定义了这个,我不明白为什么它没有在第四列中读取。我试图查看 csv 文件中是否有需要更正的地方,但一切看起来都很好
-
嗯,您显示的第一行(“1 1.00 Iphone 100”)有四列,最后一行(“1;1.00;Iphone”)只有三列。您的 CSV 中的某行似乎缺少一列。
-
我在记事本中打开它只是为了看看它在那里的样子,这里是 1;1.00;Iphone ;100 看起来完全正常......
-
问题已解决,Iphone 和 ; 后面的空格不喜欢;
标签: java sql eclipse oracle csv