Я пытаюсь выполнить массовую вставку в базу данных 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
Как мне решить эту проблему?