【问题标题】:Inserting .csv file into mysql db Java: DATETIME format column not imported successfully将 .csv 文件插入 mysql db Java:未成功导入 DATETIME 格式列
【发布时间】:2018-02-28 02:07:22
【问题描述】:

我尝试导入的.csv 文件有一个名为test_dateDATETIME 列,它的行为有点奇怪。 mySQL表中的输出都是00:00:00 00:00

它在记事本中显示为"2017-03-25 00:00:01",似乎围绕日期时间值的"" 是这里的关键因素。

问题的真相:

  1. MySQL表对应列的类型为DATETIME

  2. 我使用+"SET test_date = STR_TO_DATE(@var2, '%d/%m/%Y %k:%i')" 处理不正确的日期时间格式

  3. 没有"" 存储日期时间列的所有其他.csv 文档均已成功导入。

  4. 我在我的 IDE 的 Java 代码上使用了LOAD DATA LOCAL INFILE 命令,如下所示:

    String loadQuery = "LOAD DATA LOCAL INFILE '" + file
        + "' INTO TABLE source_data_android_cell CHARACTER SET latin1 FIELDS TERMINATED BY ','"
        + "ENCLOSED BY '\"'" + " LINES TERMINATED BY '\n'  " + "IGNORE 1 LINES(@var1...)"
        + "SET test_date = STR_TO_DATE(@var1, '%d/%m/%Y %k:%i')";
    

我无法控制.csv 文件的创建或存储方式,那么我的代码有哪些可能的补救措施?

更新:

按照 Maurice 的建议,我努力找出如何读取 .csv 文件并将其存储到数组中。

请原谅我无耻的谷歌搜索技巧,但我设法收集了以下内容:

public void processCSVFile(String filePath){
    try(BufferedReader fileReader = new BufferedReader(new FileReader(new File(filePath)))){
        //Create two lists to hold name and height.
        List<String> nameList = new ArrayList<>();
        List<Integer> heightList = new ArrayList<>();

        String eachLine = "";
        /*
         * Read until you hit end of file.
         */
        while((eachLine = fileReader.readLine()) != null){
            /*
             * As it is CSV file, split each line at ","
             */
            String[] nameAndHeightPair = eachLine.split(",");

            /*
             * Add each item into respective lists.
             */
            nameList.add(nameAndHeightPair[0]);
            heightList.add(Integer.parseInt(nameAndHeightPair[1]));
        }

        /*
         * If you are very specific, you can convert these
         * ArrayList to arrays here.
         */
    }catch(IOException e1){
        e1.printStackTrace();
    }
}

问题是,如何调整代码以处理 .csv 文件,其中信息存储为 "...", "..." 以处理 "" 遏制?

【问题讨论】:

  • 当然:逐行读取csv,并插入每一行。
  • 啊该死的,我希望避免这样做 =/

标签: java mysql csv datetime


【解决方案1】:

我设法在这里找到了这个问题的答案:MySQL CSV import: datetime value

基本上我的代码没有做的是很好地处理 " 分隔符。我所需要的只是重新排列命令,奇怪的是它起作用了

将我的 LOAD DATA LOCAL INFILE 命令更改为以下命令似乎可以解决问题:

LOAD DATA LOCAL INFILE 'ios_Data.csv'
INTO TABLE ios_import
FIELDS OPTIONALLY ENCLOSED BY '"' TERMINATED BY ','
LINES TERMINATED BY '\n'
(test_date)

令我惊讶的是,也不需要使用+"SET test_date = STR_TO_DATE(@var2, '%d/%m/%Y %k:%i')"

【讨论】:

    猜你喜欢
    • 2018-02-16
    • 1970-01-01
    • 2020-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-06
    相关资源
    最近更新 更多