gpt4 book ai didi

Java:如何使用 java jdbc for Sql Server 使用标识列执行批量插入

转载 作者:行者123 更新时间:2023-12-02 01:36:13 24 4
gpt4 key购买 nike

我有一个 csv 文件,需要使用 SQLServerBulkCopy 写入 Sql Server 表。我正在使用SQLServerBulkCSVFileRecord从文件加载数据。

目标表具有以下结构:

create table TEST
(
ID int identity,
FIELD_1 int,
FIELD_2 varchar(20)
)

csv 文件具有以下结构:

4279895;AA00000002D
4279895;AA00000002D
4279895;AA00000002D
4279896;AA00000003E
4279896;AA00000003E
4279896;AA00000003E

正如您所看到的,ID(身份)列不存在于 csv 中,我需要数据库在插入时自动添加身份值。我的问题是,只要表具有标识列,批量插入就不起作用,我收到以下错误:

com.microsoft.sqlserver.jdbc.SQLServerException: Source and destination schemas do not match.
at com.microsoft.sqlserver.jdbc.SQLServerBulkCopy.validateColumnMappings(SQLServerBulkCopy.java:1749)
at com.microsoft.sqlserver.jdbc.SQLServerBulkCopy.writeToServer(SQLServerBulkCopy.java:1579)
at com.microsoft.sqlserver.jdbc.SQLServerBulkCopy.writeToServer(SQLServerBulkCopy.java:606)

这是相关代码:

try (
Connection targetConnection = DriverManager.getConnection(Configuration.TARGET_CONNECTION_URL);
SQLServerBulkCopy bulkCopy = new SQLServerBulkCopy(targetConnection);
SQLServerBulkCSVFileRecord fileRecord = new SQLServerBulkCSVFileRecord(csvPath, Charsets.UTF_8.toString(), ";", false);
) {

SQLServerBulkCopyOptions copyOptions = new SQLServerBulkCopyOptions();
copyOptions.setKeepIdentity(false);

bulkCopy.setBulkCopyOptions(copyOptions);

fileRecord.addColumnMetadata(1, null, java.sql.Types.INTEGER, 0, 0); // FIELD_1 int
fileRecord.addColumnMetadata(2, null, java.sql.Types.VARCHAR, 20, 0); // FIELD_2 varchar(20)

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

}

catch (Exception e) {

// [...]

}

如果我从表中删除标识列,批量插入会成功结束。使用 java jdbc for Sql Server 执行身份批量插入哪项是正确的?

最佳答案

我认为你不需要设置此选项copyOptions.setKeepIdentity(false);

删除此行后尝试。您也可以引用这篇文章SqlBulkCopy Insert with Identity Column

关于Java:如何使用 java jdbc for Sql Server 使用标识列执行批量插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55224390/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com