我使用OpenCSV Reader - java加载我的CSV文件(文件大小:-1.47 GB(1,585,965,952字节))。
但是,在我的编码中,每当它只设法将 10950 条记录插入 PostgreSQL 数据库时。
CSVReader csvReader = new CSVReader(new FileReader(csvFilename));
String[] row = null;
String sqlInsertCSV = "insert into ip2location_tmp_test
(ip_from, ip_to, xxxxx, "
+ "xxxxx, xxxxx,xxxxx, "
+ "xxxxx,xxxxx, xxxxx, xxxxx, xxxxx, xxxxx,xxxxx,xxxxx)"
+ " VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
while((row = csvReader.readNext()) != null) {
PreparedStatement insertCSV = conn.prepareStatement(sqlInsertCSV);
insertCSV.setLong(1, Long.parseLong(row[0]));
....
....
insertCSV.setString(14, row[13]); // usage_type
insertCSV.executeUpdate();
}
csvReader.close();
PreparedStatement insertCSV = conn.prepareStatement(sqlInsertCSV);
insertCSV.executeUpdate();
}
OpenCSV有什么限制吗?
我需要使用 setString 函数来满足 PostgreSQL 中的单引号。
它没有错误。它就这样停止了
嗨克雷格,COPY 命令必须是超级用户。以前试过
第一个问题:您告诉我们文件中有多少字节,但文件中有多少条记录(行)? 如果文件有 10950 行,那么一切正常。
第二个问题:为什么在while循环之外有prepareStatement/executeUpdate? 在我看来,会尝试插入最后一条记录两次或插入空记录,因为一旦您在外面,而您没有数据,因为 csvReader 返回 null。
使用您正在使用的"按时间记录"方法,您可以读取的记录数没有限制。 检查数据文件以查看第 10950 行周围的文件中是否没有意外的回车符。