我有一个简单的 sql plus 命令,它在 spool on/off 的帮助下写入查询的内容。假脱机生成一个逗号分隔的 .csv 文件。然后这个简单的文件被导入到一个程序中,该程序处理数据。我没有那个程序的源代码,我们只是使用它。
后来我创建了一个Java程序,它想做和sql plus命令一样的事情,所以把查询结果放到一个.csv文件中。它生成文件,一切都与旧文件相同,但导入过程不想继续数据。
这是sql plus命令(我使用了以下设置):
Clear Buffer;
Clear Breaks;
Clear Columns;
Clear Computes;
TTitle Off;
BTitle Off;
Set Echo Off;
Set Heading Off;
Set NewPage 0;
Set PageSize 0;
Set LineSize 244;
Set Space 0;
Set Feed Off;
Set RecSep Off;
Spool import.csv;
Select line
From table
Order By id;
Spool Off;
然后在Java程序中:
PreparedStatement ps = connection.prepareStatement("Select rpad(line, 244, ' ') From table Order By id");
ResultSet rs = ps.executeQuery();
PrintWriter writer = new PrintWriter("import.csv", "UTF-8");
while(rs.next()) {
writer.println(rs.getString(1));
}
writer.close();
rs.close();
ps.close();
我所面临的:
- 文件内容相同
- 它们的大小相同
- 用记事本++打开,检查HEX视图(带插件)显示相同,没有区别
- 还有一个有趣的事实,如果我让其他人导入文件,他会设法
- 如果我打开一个用sql plus生成的旧文件,并将新的java生成文件的内容复制到旧文件中,那么导入程序可以处理旧文件->所以我认为新文件有问题.. .
我的问题是:有人知道在这种情况下还要检查什么吗?它可能取决于Java版本吗?还是我错过了一些我不认识的东西?还是取决于操作系统设置?也许一个想法可以帮助我解决这个问题。