最近由于工作需要 需要做一个生成海量数据的程序!开始分析这个问题 最终总结如下:
方案一 用jdbc 的API 那么这种方法的效率应该是最高的!
方案二 用hibernate 的API 这个方案比第一种方案的效率低!
我开始很犹豫到底用那一种呢!由于我们的项目使用SSH框架的!如果用单纯的JDBC API 那么还要在连接一次数据库
显然是不可取的!【减少socket通讯可以提高系统性能】
如果单纯的用hibernate 的API 效率太低! 所以我最终选择的方案是二者结合!
干脆吧 这个方法放到hibernate 自动生成的dao里面
OK 首先把你的方法也放到Hibernate生成的dao里面 为什么 原因是用 this.getSession().connection();可以得到连接
Connection conn= this.getSession().connection(); [注意connection()这个方法已经过时]
conn.setAutoCommit(false);//自动提交事物设置为false 不自动提交
String sql = "insert into test(username,userpwd) values(?,?)";
PreparedStatement pstmt = conn.prepareStatement(sql);//创建PreparedStatement 对象
for (int index = 0; index < number; index++) {
pstmt.setString(1,"username");
pstmt.setString(2,"userPwd");
// 将一组对象添加到prepareStatement对象的批处理密令中
pstmt.addBatch();
//每5000条进行事物提交
if (index%5000==0) {
pstmt.executeBatch(); //执行prepareStatement对象中所有的sql语句
conn.commit();//事物提交
this.getSession().flush();//数据库与缓存同步
this.getSession().clear();//清空缓存
if (null==conn) { //如果连接关闭了 就在创建一个 为什么要这样 原因是 conn.commit()后可能conn被关闭
conn = this.getSession().connection();
}
}
}
pstmt.executeBatch();//1.执行与5000去摸不是0的数据
conn.commit();//事物提交
conn.close();//释放连接
pstmt.close();//释放资源
我以上用的都是PreparedStatement 如果要用Statement 可以改成下面的
Connection conn= this.getSession().connection(); [注意connection()这个方法已经过时]
conn.setAutoCommit(false);//自动提交事物设置为false 不自动提交
Statement st=conn.createStatement();
for (int index = 0; index < number; index++) {
// 将一组对象添加到Statement对象的批处理密令中
st.addBatch("insert into test(username,userpwd) values('"+username+"','"+userpwd+"')");
//每5000条进行事物提交
if (index%5000==0) {
st.executeBatch(); //执行prepareStatement对象中所有的sql语句
conn.commit();//事物提交
this.getSession().flush();//数据库与缓存同步
this.getSession().clear();//清空缓存
if (null==conn) { //如果连接关闭了 就在创建一个 为为什么要这样 原因是 conn.commit()后可能conn被关闭
conn = this.getSession().connection();
}
}
}
st.executeBatch();//1.执行与5000去摸不是0的数据
conn.commit();//事物提交
conn.close();//释放连接
st.close();//释放资源
注意Statement与 PreparedStatement在进行批处理时候唯一的不同家就是:addBatch();方法是否传递参数
从效率已经占用内存的多少上 我还是推荐大家使用PreparedStatement
说明:由于对公司信息的保护 以上是程序的最简单版本!其他重要数据已经修改!测试时候一次可以插入50万条数据!在大的没有测过!此时服务器还可以继续进行其他的操作!
分享到:
相关推荐
综上所述,Java批量上传文件实例涉及到的关键技术包括:HTML5多文件选择、Multipart HTTP请求、Commons-FileUpload库的使用以及Servlet的文件处理。在实际开发中,还需要结合具体业务需求,进行安全性和性能优化。
JAVA SFTP文件上传、下载及批量下载实例 在本篇文章中,我们将详细介绍JAVA SFTP文件上传、下载及批量下载的实例,包括相关的概念、API介绍、代码实现等方面的内容。 首先,我们需要了解什么是SFTP?SFTP(Secure ...
Java批量读取Excel表格是一种常见的数据处理需求,特别是在大数据导入、报表生成或数据分析场景中。在Java中,我们可以借助Apache POI库来实现这一功能。Apache POI是一个强大的开源库,它允许Java开发者读写...
同时,了解如何有效地使用这些集合进行数据操作,如批量添加、删除、查找,以及集合转换,是提升程序性能的关键。 总结来说,Java集合框架中的HashSet、TreeSet、HashMap和TreeMap是处理数据的重要工具。理解它们的...
在Java编程中,批量执行POST请求是一项常见的任务,特别是在自动化测试、数据分析或者集成服务的场景下。本篇文章将深入探讨如何实现这个功能,并且对比不同请求的结果。 首先,我们需要了解HTTP POST请求的基本...
**Lucene 全文搜索引擎实例:Java Lucene 实例** Lucene 是 Apache 软件基金会的一个开源项目,它提供了一个高性能、可扩展的信息检索库。这个实例将深入讲解如何在 Java 中使用 Lucene 来创建索引并执行各种搜索...
本文将通过一个具体的实例来探讨如何在Java中实现对Oracle数据库的批量数据操作。 首先,批量插入数据通常涉及到PreparedStatement对象的使用。PreparedStatement是Statement的子类,它允许预编译SQL语句,从而提高...
Java代码中的XPDF实例主要涉及的是使用XPDF库在Java应用程序中处理PDF文档。XPDF是一套开源的PDF工具,包括了PDF文档的查看、转换、提取文本等能力。在这个实例中,我们可能会关注以下几个核心知识点: 1. **XPDF ...
6. **PPT展示**:在项目报告或演示中,可以生成一个PPT来展示整个流程,包括Java批量下载文件的逻辑、MinIO的存储功能介绍以及使用`ZipOutputStream`进行文件压缩的步骤。 通过以上步骤,可以实现Java环境下从MinIO...
在Java编程环境中,批量解压带密码...总的来说,Java批量解压带密码的RAR或ZIP文件涉及了文件流操作、压缩格式理解、第三方库的使用以及版权保护等多个知识点。通过合理运用这些知识,可以构建出高效、安全的解压工具。
"Java OSS批量下载并压缩为ZIP代码实例" Java OSS批量下载并压缩为ZIP代码实例是使用Java语言实现在OSS(Object Storage Service)中批量下载文件并将其压缩为ZIP文件的示例代码。下面将对该代码实例中的知识点进行...
本实例主要关注如何在Java中进行CSV导出操作。 CSV文件的基本结构是由字段(通常是字符串)组成的行,字段之间由逗号分隔。这种格式使得CSV文件可以在不同的应用程序间轻松共享数据,无需复杂的解析或转换过程。在...
通过Java实现FTP批量下载文件以及解压的功能,可以极大地提高工作效率,特别是在处理大量数据时。以下是一份详细的步骤介绍: 首先,我们需要引入Java的FTP客户端库,如Apache Commons Net库。这个库提供了丰富的...
`java.awt.Graphics2D`类是主要的绘图接口,允许我们进行像素级别的操作,如绘制线条、填充形状、添加文本等。`javax.imageio.ImageIO`类则用于读写各种图像格式,如JPEG、PNG等。 批量生成图片通常涉及到循环和...
本文将详细讨论如何在Java环境下连接Redis集群并实现批量插入String类型的数据。 首先,我们需要理解Redis集群的基本概念。Redis集群是通过分片(Sharding)技术来分散数据到多个节点,每个节点存储一部分数据。在...
在Java开发中,通过调用FFmpeg的命令行工具,可以方便地集成到应用程序中进行视频处理,例如本实例中的视频压缩。在百度AI和腾讯AI的活体验证场景中,高质量、低大小的视频文件是必要的,因此使用FFmpeg进行视频压缩...
Java数组倒置 简单 Java图片加水印,支持旋转和透明度设置 摘要:Java源码,文件操作,图片水印 util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印...
在Java编程环境中,文件批量快速加密是一个常见的需求,特别是在数据安全性和隐私保护方面。本项目提供的解决方案基于Java 1.8版本,这意味着它利用了Java 8的特性,如流(Stream) API,来提高处理效率。然而,需要...
可以通过Maven在`pom.xml`文件中添加依赖: ```xml <groupId>net.spy</groupId> <artifactId>spymemcached <version>2.12.3 ``` 安装Memcached服务器通常有两种方式:通过源码编译或使用预编译的二进制包。在...
本实例教程专注于使用Java与Access数据库的交互,Access是一款由Microsoft提供的轻量级数据库管理系统,适用于小型项目和个人数据管理。 首先,要进行Java和Access的交互,我们需要引入JDBC(Java Database ...