【sqlserver】mssql 批量加载数据文件 bulk copy使用

参考文章:

Using bulk copy with the JDBC driver
SqlServer数据批量写入
SqlServer批量插入数据方法–SqlBulkCopy

sqlserver buld copy需要提供,数据文件的对应表的元数据信息主要的字段的位置、字段的名称、字段的数据类型。
执行bulk load时候不一定要在sqlserver所在机器执行,即使sqlserver服务在docker里也能执行。
SQLServerBulkCSVFileRecord需要的列元数据类型就是java.sql.JDBCType里的类型,通过java.sql.JDBCType.getVendorTypeNumber方法获取到int值。

本例文件格式:textfile,字段分隔符(delimiter)‘|’

代码,kotlin格式

import java.sql.JDBCType
import com.microsoft.sqlserver.jdbc.*
import java.sql.DriverManager
import java.sql.SQLException
import java.sql.Statement
import java.sql.Connection


      val database ="db"
      val schema = "sc"
      val record: SQLServerBulkCSVFileRecord = SQLServerBulkCSVFileRecord(
            "path of the data file", "utf-8", "delimiter", "firstLineIsColumnNames"
        )
      destTblName = "${schema}.${table}"
      // 注意要添加所有字段的元数据信息。
      record.addColumnMetadata(               
          "position of this field: start from 1",
          "field name",
          "jdbc type",
          "precision: char/varchar length or decimal precision,date etc fill with 0",
          "scale: decimal scale",
          "dateTimeFormatter")
      val connectionUrl =
          "jdbc:sqlserver://${host}:${port};encrypt=false;databaseName=${database}"
      DriverManager.getConnection(connectionUrl, "username", "password").use{conn ->
          conn.createStatement().use { stmt ->
              SQLServerBulkCopy(conn).use { bulkCopy ->
                  // delete before bulk load!
                  // stmt.executeUpdate("DELETE FROM ${tpc.name}")
                  bulkCopy.destinationTableName = destTblName 

                  // colMapSupplier.forEach{(k,v)-> bulkCopy.addColumnMapping(k,v)}
                  // Write from the source to the destination.
                  bulkCopy.writeToServer(record)
              }
          }
      }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值