Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在验证旧CSV文件中的信息后,打印并写入新的CSV文件,并将数据填充到MySQL中_Java_Mysql_Csv_Model View Controller_Netbeans - Fatal编程技术网

Java 在验证旧CSV文件中的信息后,打印并写入新的CSV文件,并将数据填充到MySQL中

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

目前正在处理包含大量条目的CSV文件。然后我做了一些验证,并将验证后的条目插入到新的CSV文件中。最后,我对新的CSV文件执行了加载数据填充sql查询,但在数据库中得到了0个结果。加载数据填充查询能够加载旧的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();
    }
}
所有测试均在本地进行

上传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>