我知道我可能遗漏了一些非常明显的东西但是我遇到了一个文本文件uplopad从Windows客户端上运行的Java应用程序进入MSSQL服务器的问题。它采用多行并将它们全部加载到一条记录中,为每行生成一条新记录。
文本文件由java应用程序使用System.lineSeparator()生成以分隔行,输出显示在记事本中正确检查文件和上传txt文件的代码,如下所示
File file = new File(fileName);
FileInputStream fis = new FileInputStream(file);
PreparedStatement pstmt = con1.prepareStatement("insert into " +
tableName + "(" + columnName + ") values (?)");
pstmt.setAsciiStream(1, fis, (int) file.length());
pstmt.executeUpdate();
fis.close();
我已经尝试为\ r \ n提供Subing System.lineSeparator()但是他们也没有运气......任何想法都会受到赞赏
答案 0 :(得分:0)
评论代码:
File file = new File(fileName);
FileInputStream fis = new FileInputStream(file);
a)好的。获得了代表文件的简化
PreparedStatement pstmt = con1.prepareStatement("insert into " +
tableName + "(" + columnName + ") values (?)");
b)好的。有一个更新语句,其中参数是放入colyumnName
的值pstmt.setAsciiStream(1, fis, (int) file.length());
c)这是将参数的值设置为从位置1到结尾的整个文件流
pstmt.executeUpdate();
fis.close();
执行语句并关闭文件流。
执行一次SQL语句,告诉它写入整个文件。这就是它正在做的事情。
如何解决这个问题?在步骤b)之后,逐行读取文件流,并为每一行设置参数值并执行SQL语句。或者在b)将整个文件流读入一个字符串后,将其拆分为一个行数组,并为每一行设置参数并执行SQL。