我要导入的 .csv
文件具有一个名为 test_date
的 DATETIME
列,表现有些奇怪。MySQL表中的输出为全部00:00:00 00:00
。
在记事本中显示为"2017-03-25 00:00:01"
,其中似乎围绕日期时间值的""
是这里的关键因素。
问题的事实:
-
mysql表的相应列是类型
DATETIME
-
我已经使用
+"SET test_date = STR_TO_DATE(@var2, '%d/%m/%Y %k:%i')"
处理不正确的日期时间格式 -
所有其他
.csv
文档,其中存储了日期时间列没有""
已成功导入。 -
我在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
文件,其中将信息存储为"...", "..."
以处理""
codment?
我设法在此处找到了此问题的答案:mySQL CSV导入:dateTime value
基本上,我的代码不做的是处理"分离器良好。我所需要的只是重新排列命令,奇怪的是
将我的负载数据更改为以下命令,似乎可以做到这一点:
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')"
,令我惊讶的是。