【发布时间】:2019-12-23 16:23:29
【问题描述】:
这里准备好的语句应该使用数组将 CSV 文件中的一行数据插入到数据库行中。问题是 CSV 文件中的行发生了很大变化,所以我最终会遇到数组越界错误,因为准备好的语句可能会调用行读取器没有的数组索引。
我尝试了不同的预处理语句方法,但没有一个可以帮助
Path p = Paths.get("ppMonthly.csv");
BufferedReader b;
b = Files.newBufferedReader(p);
String line = "";
while((line = b.readLine()) !=null){
line = b.readLine();
String [] tokens = line.split(",");
PreparedStatement pstm = connection.prepareStatement("INSERT INTO PropertyPrice (SaleID,Price,Date,Post,Property,OldNew,Duration,PAON,SAON,Street,Locality,TownCity,District,County,PPD,Records) " +
"VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);");
pstm.set(1, tokens.length);
pstm.setString(2, tokens[1]);
pstm.setString(3, tokens[2]);
pstm.setString(4, tokens[3]);
pstm.setString(5, tokens[4]);
pstm.setString(6, tokens[5]);
pstm.setString(7, tokens[6]);
pstm.setString(8, tokens[7]);
pstm.setString(9, tokens[8]);
pstm.setString(10, tokens[9]);
pstm.setString(11, tokens[10]);
pstm.setString(12, tokens[11]);
pstm.setString(13, tokens[12]);
pstm.setString(14, tokens[13]);
pstm.setString(15, tokens[14]);
pstm.setString(16, tokens[16]);
java.lang.ArrayIndexOutOfBoundsException: 16
【问题讨论】:
-
由于错误,csv中的一行只有15个元素,缺少16个元素
-
也许一个想法是获取 tokens.length 以按其值构建查询
-
您可以控制 CSV 输入吗?如果是这样,最好为任何缺失的字段设置一个空/空白/默认值。
-
数组从索引 0 开始。
-
为什么将PreparedStatement的第一个参数设置为数组的长度?
标签: java arrays sqlite jdbc prepared-statement