Microsoft SQL Server 的bcp命令可以快速将大型文件复制插入到数据库中,C#提供了SqlBulkCopy方法实现该功能,而在java中可以通过SQLServerBulkCopy类实现类似的功能,且相对于insert、update等命令来说,这个类的效率要高的多。(对比常用的JDBC的Batch方法也高的多)。

SQLServerBulkCopy类只能用于对SQL Sever数据库的插入,但是数据来源可以不是SQL Sever数据库。旧版的Microsoft SQL Server JDBC 驱动并没有提供这个类,需要下载Microsoft SQL Server JDBC 驱动程序 6.0版本:https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=11774。MS官方的说明文档在这个地址:https://docs.microsoft.com/en-us/sql/connect/jdbc/using-bulk-copy-with-the-jdbc-driver。

SQLServerBulKCopy类向数据库插入数据支持三种类型封装的数据:Java本身提供的ResultSet、RowSet和JDBC提供的ISQLServerBulkRecord接口实现类。下面提供一种实现:

 /*** 获取空的CachedRowSet对象* 其中BaseDao为最常见的JDBC操作,这里就不贴出,相信大家看的懂* @throws SQLException*/public CachedRowSetImpl getCachedRowSet() throws SQLException{//查询出空值用于构建CachedRowSetImpl对象以省去列映射的步骤ResultSet rs = baseDao.executeSQL("select * from FactMonthTimeTable where 1=0");CachedRowSetImpl crs = new CachedRowSetImpl();crs.populate(rs);//获取crs以后关闭数据库连接baseDao.closeResource();return crs;}/*** 向CachedRowSet对象插入一条数据* 循环调用这一个方法,将想插入数据库的数据先插入到CachedRowSet对象里* @param crs* @param fmt* @return* @throws SQLException*/public CachedRowSetImpl insertIntoCachedRowSet(CachedRowSetImpl crs,Student stu) throws SQLException{//移动指针到“插入行”,插入行是一个虚拟行crs.moveToInsertRow();//更新虚拟行的数据crs.updateString("name", stu.getName());crs.updateInt("id", stu.getId());//插入虚拟行crs.insertRow();//移动指针到当前行crs.moveToCurrentRow();return crs;}/*** 使用BulkCopy和RowSet进行批量插入* @param crs* @param batchSize*/public void insertBatch(CachedRowSetImpl crs,int batchSize)throws SQLException{//数据库连接字符串String url = "jdbc:sqlserver://localhost:1433;DatabaseName=datebaseName"+";user=userName;password=userPassword";SQLServerBulkCopyOptions copyOptions = new SQLServerBulkCopyOptions();copyOptions.setKeepIdentity(true);copyOptions.setBatchSize(8000);copyOptions.setUseInternalTransaction(true);SQLServerBulkCopy bulkCopy =new SQLServerBulkCopy(connectionUrl);bulkCopy.setBulkCopyOptions(copyOptions);bulkCopy.setDestinationTableName("tableName");bulkCopy.writeToServer(crs);crs.close();bulkCopy.close();}

Java使用SQLServerBulkCopy实现数据库批量操作相关推荐

  1. java获取达梦数据库_Java连接达梦数据库驱动dm_jdbc

    [实例简介] Java连接达梦数据库驱动dm_jdbc: dm_jdbc\com.dameng.floader.jar dm_jdbc\com.dameng.impexp.jar dm_jdbc\Dm ...

  2. idea中链接mysql查询_在Idea中编写Java程序连接查询Sqlite数据库

    1.使用SqliteSpy建立好数据库文件SqliteSpy运行界面 2.准备好一个空文件夹存放java工程和数据库文件,准备好数据库驱动jar包拷贝到文件夹中sqlite数据库文件和驱动 3.在Id ...

  3. mysql java datetime_Java向mysql数据库插入datetime类型数据实例(精)

    在Mysql数据库中日期跟时间有两种: 1.date类型,date类型也就是我们常见的储存yyyy-MM-dd类型的日期,它不能储存时间,也就是只能储存日期, 2.dateitme就是可以储存日期同时 ...

  4. java代码连接oracle数据库连接_在JAVA中连接Oracle数据库(例子)

    * TODO 要更改此生成的文件的模板,请转至 * 窗口 - 首选项 - java - 代码样式 - 代码模板 */ package person.fane.test; import java.sql ...

  5. java文件流插入数据库_使用Java流查询数据库

    java文件流插入数据库 在本文中,您将学习如何编写纯Java应用程序,这些应用程序能够处理现有数据库中的数据,而无需编写一行SQL(或类似的语言,例如HQL),而无需花费数小时将所有内容放在一起. ...

  6. 获取mysql可行方法_Mysql学习Java实现获得MySQL数据库中所有表的记录总数可行方法...

    <Mysql学习Java实现获得MySQL数据库中所有表的记录总数可行方法>要点: 本文介绍了Mysql学习Java实现获得MySQL数据库中所有表的记录总数可行方法,希望对您有用.如果有 ...

  7. Java 技术篇 - java同时连接多种数据库执行sql语句的兼容性验证,数据库类型包括:oracle、sqlserver、DB2、人大金仓、达梦、PG、瀚高、polardb

    Java 操作多类型数据库下的兼容性验证 第一章:数据库测试 ①[ oracle 数据库不支持分号]ORA-00933: SQL 命令未正确结束 ② [sqlserver 数据库不支持 commit] ...

  8. 6 HBase java API访问HBase数据库

    HBase java API访问HBase数据库 package com.hunan.hbase_options;import org.apache.hadoop.conf.Configuration ...

  9. Java技术之掌握数据库连接工具DBUtils的应用

    在我们实际完成项目开发的过程中,总会涉及到连接数据库操作.对于基本的JDBC连接数据库而言,已经可以满足我们的日常需要,但是如果能够对代码进行简化书写,自然是更好的. DBUtils是java编程中的 ...

最新文章

  1. 致不可重新来过一次的青春(上)
  2. @entity 不限字节长度的类型_在微信程序员眼里,1024字节能玩出什么花样?
  3. 安装tron_具有Tron效果的JavaFX 2 Form
  4. JAVA Junit error java.lang.SecurityException: class junit.framework.JUnit4TestCaseFacade
  5. python高效处理文件_使用Python语言高效地处理一个文本文件
  6. oracle备份磁盘头,ASM 磁盘头信息备份
  7. 以算法重构视频技术前沿,超分辨率算法那些事
  8. linux 启动启动服务_更快地启动Linux
  9. UI实用素材|设计直观和用户友好的404页面
  10. Opencv_黑白素描
  11. 基于HTTP构建YUM网络源实战
  12. 【java】面向程序员的 10 大 Java 书籍 — 历久弥新
  13. QQ出现大规模盗号,qq被盗发布不良信息怎么办
  14. 【BZOJ3162】独钓寒江雪(树哈希,动态规划)
  15. 树莓派价格暴涨买不起?他们自己做了一块价格还不到1/4的开发板平替树莓派,还火到海外去了
  16. win10 labelme 使用记录
  17. 0x80070091目录不是空的,处理方法
  18. LZO基本介绍与调试总结
  19. 数码相机常用CCD/CMOS尺寸对比
  20. 【DFT】DFT入门介绍

热门文章

  1. 6种方法在Linux系统中查看IP地址
  2. 兄弟8400cdn耗材_兄弟l8400cdn驱动下载
  3. 计算机突然断电或死机 重启后,电脑突然断电后引起电脑死机! 然后就没法开机!该怎么弄?...
  4. 【日拱一卒行而不辍20220925】自制操作系统
  5. Linux文件权限修改
  6. gear2刷Android n,gear2 Root完整教程
  7. microsoft office visio2007产品密钥
  8. revit常用土建插件的【一键成板】功能,批量成板
  9. Android11 热点设置永不关闭
  10. r语言 断轴 画图_基于R语言绘制坐标轴截断图