当前正在处理此CSV文件,其中包含大量条目。然后我做了一些验证并将验证的条目插入到新的CSV文件中。最后,我为新的CSV文件做了一个LOAD DATA INFILE sql查询,但是我在数据库中得到了0个结果。 LOAD DATA INFILE查询能够加载旧的CSV文件。PrintWrite验证旧CSV文件和LOAD DATA INFILE中的信息到MySQL后的新CSV文件
下面的代码调用该方法
createNewUserCSV(validatedUsers, OUTPUT_PATH);
String csvDirectory = OUTPUT_PATH + File.separator + "newUser.csv";
String getCSVDirectory = csvDirectory.replace(File.separator, "/");
userDAO.insertUserByFile(getCSVDirectory);
这是我createNewUserCSV方法(此代码似乎很好地工作,因为我可以看到newUser.csv创建,是我指定的文件夹中。
private void createNewUserCSV(ArrayList<User> validatedUsers, String outputPath) {
try{
PrintWriter writer = new PrintWriter(new FileOutputStream(outputPath + File.separator + "newUser.csv", true));
StringBuilder sb = new StringBuilder();
sb.append("name");
sb.append(',');
sb.append("password");
sb.append(',');
sb.append("email");
sb.append(',');
sb.append("gender");
sb.append('\n');
for(User user: validatedUsers){
sb.append(user.getName());
sb.append(',');
sb.append(user.getPassword());
sb.append(',');
sb.append(user.getEmail());
sb.append(',');
sb.append(user.getGender());
sb.append('\n');
}
writer.write(sb.toString());
writer.close();
}catch (IOException e){
e.printStackTrace();
}
}
然而,当我尝试使用LOAD DATA INFILE对newUser.csv这是行不通的,它适用于oldUser.csv虽然与查询。
public void insertUserByFile(String csvFileDirectory) {
//boolean success = true;
try {
conn = dbController.getConnection();
//Load data infile
query = "LOAD DATA LOCAL INFILE '" + csvFileDirectory + "' INTO TABLE user "
+"FIELDS TERMINATED BY ',' "
+"ENCLOSED BY '\"' "
+"LINES TERMINATED BY '\r\n' "
+"IGNORE 1 LINES";
pstmt = conn.prepareStatement(query);
pstmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
//success = false;
} finally {
if (dbController != null) {
dbController.close(conn, pstmt, rs);
}
}
//return success;
}
所有测试均在本地
输出从MySQL在上传时的oldUser.csv
21396 row(s) affected
是我newUser.csv有从MySQL上传newUser.csv
0 row(s) affected Records: 0 Deleted: 0 Skipped: 0 Warnings: 0
输出完成问题? 我的newUser.csv确实具有正确数量的验证条目。
作品喜欢魔术,谢谢! – Raynoro
不客气。 – 2017-10-19 13:56:44