Java 在验证旧CSV文件中的信息后,打印并写入新的CSV文件,并将数据填充到MySQL中
目前正在处理包含大量条目的CSV文件。然后我做了一些验证,并将验证后的条目插入到新的CSV文件中。最后,我对新的CSV文件执行了加载数据填充sql查询,但在数据库中得到了0个结果。加载数据填充查询能够加载旧的CSV文件 下面的代码调用该方法Java 在验证旧CSV文件中的信息后,打印并写入新的CSV文件,并将数据填充到MySQL中,java,mysql,csv,model-view-controller,netbeans,Java,Mysql,Csv,Model View Controller,Netbeans,目前正在处理包含大量条目的CSV文件。然后我做了一些验证,并将验证后的条目插入到新的CSV文件中。最后,我对新的CSV文件执行了加载数据填充sql查询,但在数据库中得到了0个结果。加载数据填充查询能够加载旧的CSV文件 下面的代码调用该方法 createNewUserCSV(validatedUsers, OUTPUT_PATH); String csvDirectory = OUTPUT_PATH + File.separator + "newUser.csv"; String getCSVD
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();
}
}
所有测试均在本地进行
上传newUser.csv时从MySQL输出
0 row(s) affected Records: 0 Deleted: 0 Skipped: 0 Warnings: 0
上传oldUser.csv时从MySQL输出
21396 row(s) affected
我的newUser.csv有问题吗?
My newUser.csv确实有正确数量的已验证条目。它表明您正在createNewUserCSV中添加\n,但您正在使用调用加载数据填充。因此,请替换:
LINES TERMINATED BY '\r\n'
与:
或在createNewUserCSV内追加\r\n
此外,关于加载数据填充,可能是您遇到了错误-可能在屏幕上没有实际看到它:
错误1290 HY000:MySQL服务器正在使用
-保护file priv选项,使其无法执行此语句
这意味着:加载数据填充没有读取csv文件newUser.csv的权限。然后,您必须在数据库my.cnf或my.ini的配置文件中设置secure file priv。像这样:
[mysqld]
secure-file-priv = "<PATH-TO-FOLDER-CONTAINING-THE-CSV-FILES>/"
另外请注意,[默认情况下]您只能读取和写入存储在神圣位置的文件,如变量@@GLOBAL.secure\u file\u priv所指定
Ubuntu16.04简易版:找到你可以写的地方
mysql> SELECT @@GLOBAL.secure_file_priv;
+---------------------------+
| @@GLOBAL.secure_file_priv |
+---------------------------+
| /var/lib/mysql-files/ |
+---------------------------+
1 row in set (0.00 sec)
那么,就写在那里
mysql> SELECT * FROM train INTO OUTFILE '/var/lib/mysql-files/test.csv' FIELDS TERMINATED BY ',';
Query OK, 992931 rows affected (1.65 sec)
mysql>
mysql> SELECT @@GLOBAL.secure_file_priv;
+---------------------------+
| @@GLOBAL.secure_file_priv |
+---------------------------+
| /var/lib/mysql-files/ |
+---------------------------+
1 row in set (0.00 sec)
mysql> SELECT * FROM train INTO OUTFILE '/var/lib/mysql-files/test.csv' FIELDS TERMINATED BY ',';
Query OK, 992931 rows affected (1.65 sec)
mysql>