Есть ли способ сделать SQLServerBulkCopy для SQLServerBulkCSVFileRecord с колонкой даты формата dd-MM-гггг в JAVA? - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь выполнить массовую вставку в базу данных SQL Server из файла CSV. Весь код работает нормально, если формат даты: гггг-мм-дд .

Но , если формат изменяется на dd-MM-гггг, это дает исключение : исключение в потоке "main" com.microsoft.sqlserver.jdbc.SQLServerException: преобразование типа данных varchar в тип данных datetime привел к значению вне допустимого диапазона.


String connectionString = "jdbc:sqlserver://abc.com:1433;databaseName=DATA";
String userName = "SG";
String password = "Welcome123";
String driverClassName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
Class.forName(driverClassName);
Connection conn = 
DriverManager.getConnection(connectionString,userName,password);


String createTempQuery = "CREATE TABLE CHECK_BCP_DATE1("+
            "ORIG_CLIV_STRING varchar(100),"+
            "CLIV_DATE DATETIME)";
PreparedStatement createTempTable = conn.prepareStatement(createTempQuery);
createTempTable.execute();



File file = new File("C:\\Users\\sandipan.ghosh\\Desktop\\Test.csv");
ByteArrayInputStream derivedCsvStream = new ByteArrayInputStream(FileUtils.readFileToByteArray(file));


SQLServerBulkCopy bulkCopy=null;
bulkCopy = new SQLServerBulkCopy(conn);
SQLServerBulkCopyOptions bcpOptions = new SQLServerBulkCopyOptions();
bcpOptions.setKeepNulls(true);
bulkCopy.setBulkCopyOptions(bcpOptions);


DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd-MM-yyyy");

SQLServerBulkCSVFileRecord fileRecord = new SQLServerBulkCSVFileRecord(derivedCsvStream, null, ",", false);
fileRecord.addColumnMetadata(1, "ORIG_CLIV_STRING", java.sql.Types.VARCHAR, 100, 0);
fileRecord.addColumnMetadata(2, "CLIV_DATE", java.sql.Types.DATE, 0, 0, dateTimeFormatter);

bulkCopy.setDestinationTableName("CHECK_BCP_DATE1");
bulkCopy.writeToServer(fileRecord);

Содержимое CSV-файла Test.csv:

ABC, 20.11.2009

DEF, 15-10-1993

Как мне решить эту проблему?

...