Java使用SQLServerBulkCopy实现数据库批量操作
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实现数据库批量操作相关推荐
- java获取达梦数据库_Java连接达梦数据库驱动dm_jdbc
[实例简介] Java连接达梦数据库驱动dm_jdbc: dm_jdbc\com.dameng.floader.jar dm_jdbc\com.dameng.impexp.jar dm_jdbc\Dm ...
- idea中链接mysql查询_在Idea中编写Java程序连接查询Sqlite数据库
1.使用SqliteSpy建立好数据库文件SqliteSpy运行界面 2.准备好一个空文件夹存放java工程和数据库文件,准备好数据库驱动jar包拷贝到文件夹中sqlite数据库文件和驱动 3.在Id ...
- mysql java datetime_Java向mysql数据库插入datetime类型数据实例(精)
在Mysql数据库中日期跟时间有两种: 1.date类型,date类型也就是我们常见的储存yyyy-MM-dd类型的日期,它不能储存时间,也就是只能储存日期, 2.dateitme就是可以储存日期同时 ...
- java代码连接oracle数据库连接_在JAVA中连接Oracle数据库(例子)
* TODO 要更改此生成的文件的模板,请转至 * 窗口 - 首选项 - java - 代码样式 - 代码模板 */ package person.fane.test; import java.sql ...
- java文件流插入数据库_使用Java流查询数据库
java文件流插入数据库 在本文中,您将学习如何编写纯Java应用程序,这些应用程序能够处理现有数据库中的数据,而无需编写一行SQL(或类似的语言,例如HQL),而无需花费数小时将所有内容放在一起. ...
- 获取mysql可行方法_Mysql学习Java实现获得MySQL数据库中所有表的记录总数可行方法...
<Mysql学习Java实现获得MySQL数据库中所有表的记录总数可行方法>要点: 本文介绍了Mysql学习Java实现获得MySQL数据库中所有表的记录总数可行方法,希望对您有用.如果有 ...
- Java 技术篇 - java同时连接多种数据库执行sql语句的兼容性验证,数据库类型包括:oracle、sqlserver、DB2、人大金仓、达梦、PG、瀚高、polardb
Java 操作多类型数据库下的兼容性验证 第一章:数据库测试 ①[ oracle 数据库不支持分号]ORA-00933: SQL 命令未正确结束 ② [sqlserver 数据库不支持 commit] ...
- 6 HBase java API访问HBase数据库
HBase java API访问HBase数据库 package com.hunan.hbase_options;import org.apache.hadoop.conf.Configuration ...
- Java技术之掌握数据库连接工具DBUtils的应用
在我们实际完成项目开发的过程中,总会涉及到连接数据库操作.对于基本的JDBC连接数据库而言,已经可以满足我们的日常需要,但是如果能够对代码进行简化书写,自然是更好的. DBUtils是java编程中的 ...
最新文章
- 致不可重新来过一次的青春(上)
- @entity 不限字节长度的类型_在微信程序员眼里,1024字节能玩出什么花样?
- 安装tron_具有Tron效果的JavaFX 2 Form
- JAVA Junit error java.lang.SecurityException: class junit.framework.JUnit4TestCaseFacade
- python高效处理文件_使用Python语言高效地处理一个文本文件
- oracle备份磁盘头,ASM 磁盘头信息备份
- 以算法重构视频技术前沿,超分辨率算法那些事
- linux 启动启动服务_更快地启动Linux
- UI实用素材|设计直观和用户友好的404页面
- Opencv_黑白素描
- 基于HTTP构建YUM网络源实战
- 【java】面向程序员的 10 大 Java 书籍 — 历久弥新
- QQ出现大规模盗号,qq被盗发布不良信息怎么办
- 【BZOJ3162】独钓寒江雪(树哈希,动态规划)
- 树莓派价格暴涨买不起?他们自己做了一块价格还不到1/4的开发板平替树莓派,还火到海外去了
- win10 labelme 使用记录
- 0x80070091目录不是空的,处理方法
- LZO基本介绍与调试总结
- 数码相机常用CCD/CMOS尺寸对比
- 【DFT】DFT入门介绍
热门文章
- 6种方法在Linux系统中查看IP地址
- 兄弟8400cdn耗材_兄弟l8400cdn驱动下载
- 计算机突然断电或死机 重启后,电脑突然断电后引起电脑死机! 然后就没法开机!该怎么弄?...
- 【日拱一卒行而不辍20220925】自制操作系统
- Linux文件权限修改
- gear2刷Android n,gear2 Root完整教程
- microsoft office visio2007产品密钥
- revit常用土建插件的【一键成板】功能,批量成板
- Android11 热点设置永不关闭
- r语言 断轴 画图_基于R语言绘制坐标轴截断图