我正在尝试批量插入到SQL Server,我从csv
文件中获取列值。
这是我处理csv
文件的每一行的方式,但我得到了
nvarchar无法转换为数字
- 或 -
dateTime例外
代码:
for (int i = 0; i < count; i++) {
Object val = columnVal[i];
if (StringUtils.isEmptyOrWhitespaceOnly(val.toString())) {
System.out.println(val);
ps.setObject(i + 1, null);
} else {
System.out.println(val);
ps.setObject(i + 1, val);
}
}
答案 0 :(得分:1)
当SQL Server数据类型为DATETIME
,DATETIME2
,DATE
等时,在设置对象的值时使用以下数据类型之一:
java.sql.date
:您只需要一个日期部分java.sql.timestamp
:您需要日期+时间部分java.time
类,您使用的是符合JDBC 4.2或更高版本的JDBC驱动程序;例如java.time.LocalDateTime
。您可以从Stack Overflow上的this question获得更多见解。
修改强>
我正在尝试编写通用插件,因为我不知道来自
csv
文件的值是什么,即为什么我使用对象数组来获取值
在这种情况下,您应该要求CSV使用以ISO 8601格式格式化的日期/日期时间值。 SQL Server无法转换日期时间格式的任何排列。这是不可能的,因为美国的日期时间格式为mm/dd/yyyy
,而大多数其他国家/地区的格式通常为dd/mm/yyyy
。
您可以使用T-SQL SET DATEFORMAT设置明确的日期格式,但您需要事先知道格式是什么,SQL Server也必须支持该格式。
编辑2:
实际上我尝试使用dd-mm-yyyy格式的日期,当我尝试使用日期时间格式为dd-mm-yyyy hh.mm.ss时,能够批量插入.am面临问题。有没有办法处理这个
对于第一种格式,如果语言环境发生变化,它可能很容易破解......然后它可以很容易地解释为mm-dd-yyyy
。
记住我的建议:在序列化日期时间时始终使用 ISO8061 格式。您需要使用YYYY-MM-DDThh:mm:ss[.mmm]
(T是文字T
字符)或YYYYMMDD[ hh:mm:ss[.mmm]]
。请参阅DATETIME - Supported String Literal Formats for datetime。