Java 批量插入CSV文件
我有一个创建CSV文件的Java代码,然后我使用SQL服务器“批量插入”将数据插入数据库;我没有格式化文件。SQL server是2008 当我通过单元测试运行代码,然后运行以下sql代码时,一切正常,数据插入到表中:Java 批量插入CSV文件,java,sql,sql-server,csv,bulkinsert,Java,Sql,Sql Server,Csv,Bulkinsert,我有一个创建CSV文件的Java代码,然后我使用SQL服务器“批量插入”将数据插入数据库;我没有格式化文件。SQL server是2008 当我通过单元测试运行代码,然后运行以下sql代码时,一切正常,数据插入到表中: declare @csvFileName VARCHAR (1024)= 'file.csv', @csvFormatFileName VARCHAR (1024)= null, @tableName VARCHAR (256) = 'tableName'; EXECUTE (
declare
@csvFileName VARCHAR (1024)= 'file.csv',
@csvFormatFileName VARCHAR (1024)= null,
@tableName VARCHAR (256) = 'tableName';
EXECUTE (
'BULK INSERT '+ @tableName +' FROM ''' + @csvFileName + ''' WITH
(FIRSTROW=2, FIELDTERMINATOR=''\t'', ROWTERMINATOR=''\n'', MAXERRORS=0);');
当我的Java代码在生产环境中运行并创建CSV文件时,如果我获取其中一个已创建的CSV文件,并运行上述SQL,它不会给我任何错误,但是表中没有插入任何数据,我只得到:
(0 row(s) affected)
我首先认为是生产数据库服务器和开发数据库服务器导致了这个问题,但事实并非如此
这是CSV文件中的示例数据:
ID Date number1 number2 number3
88 2013-01-14 2 0 0.00
64 2013-01-14 0 0 0.00
我看不出有什么不同。运行没有问题的CSV文件和运行没有问题的CSV文件!毕竟,它们是用相同的Java代码创建的
是否有任何编辑器可以显示文件的内容,就像它们的标签,新行
非常感谢您的帮助。我的机器上的帮助是在Windows上创建的,它在每行末尾添加了CRLF。在Uinx上创建的生产上的,只添加LF。解决方案是使用MS SQL Server bcp实用程序创建的格式文件,该实用程序可在任何平台上运行。对于csv文件
字段终止符
应为,
。为什么要对csv文件使用\t
分隔符?如果不将文件存储为逗号分隔的值,则可以将该文件另存为.txt
而不是.csv
。我使用的是分隔字段的\t b/c。然后不要将.csv
扩展名用于文件使用。txt
,.csv
用于逗号分隔的值。如果所有字段在csv
文件中没有用,
分隔,则将其视为一列使用记事本++,然后您可以单击“显示所有字符”按钮查看文件中的所有新行、制表符、回车符等。我建议检查明显的内容,比如,您认为您加载的文件路径实际上就是它试图加载的路径,等等。另外,您可以让prod文件加载到dev服务器上吗?