`

java 批量添加实例

阅读更多

最近由于工作需要 需要做一个生成海量数据的程序!开始分析这个问题 最终总结如下:

方案一 用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万条数据!在大的没有测过!此时服务器还可以继续进行其他的操作!

 

6
1
分享到:
评论
6 楼 y122749315 2010-01-20  
请问为什么我用 this.getSession().connection();得不到连接呢?总是报java.lang.NullPointerException空异常
5 楼 yanshuihualiveses 2009-05-05  
4 楼 skywen 2009-01-20  
你好 刚看到你的信息!你说的问题我做出如下解释

this.getSession().flush();//数据库与缓存同步
this.getSession().clear();//清空缓存
原本的时候我也没有加 this.getSession().clear();//清空缓存
可是造成的问题是我第一次生成20万条  然后在生成20万条!此时内存泄漏!
这就是问什么要加this.getSession().clear();//清空缓存这句话的原因
3 楼 wangxuliangboy 2009-01-18  
this.getSession().flush();//数据库与缓存同步
     this.getSession().clear();//清空缓存
这有意义吗
2 楼 skywen 2009-01-16  
[color=brown]所有的问题 如果都向你说的哪像!那么岂不是连程序都可以不写了?不满你说:我是oracle DBA!难道我不知道,交给数据库处理吗!问题是我们的程序是交给客户的!难道让客户还要请一个DBA吗?着可能吗?做为一个程序员,应该清楚:我们面向的是客户!不是自己!更不是所有的程序员![/color]
1 楼 liujunsong 2009-01-16  
这个问题我有不同的意见.
简单来说,一句话, java根本就不是来干这个用的.
要批量生成数据,最简单,最可靠的办法就是利用数据库的开发环境,写一段脚本让数据库自己去玩,或者生成一个标准的数据文件,通过数据库工具或者脚本去装入.
例如:PL/SQL,isql,写成一个脚本或者存储过程.

建议:找个DBA咨询一下吧.

相关推荐

    Java 批量上传文件实例

    综上所述,Java批量上传文件实例涉及到的关键技术包括:HTML5多文件选择、Multipart HTTP请求、Commons-FileUpload库的使用以及Servlet的文件处理。在实际开发中,还需要结合具体业务需求,进行安全性和性能优化。

    JAVA SFTP文件上传、下载及批量下载实例

    JAVA SFTP文件上传、下载及批量下载实例 在本篇文章中,我们将详细介绍JAVA SFTP文件上传、下载及批量下载的实例,包括相关的概念、API介绍、代码实现等方面的内容。 首先,我们需要了解什么是SFTP?SFTP(Secure ...

    java批量读取Excel表格

    Java批量读取Excel表格是一种常见的数据处理需求,特别是在大数据导入、报表生成或数据分析场景中。在Java中,我们可以借助Apache POI库来实现这一功能。Apache POI是一个强大的开源库,它允许Java开发者读写...

    java集合使用实例

    同时,了解如何有效地使用这些集合进行数据操作,如批量添加、删除、查找,以及集合转换,是提升程序性能的关键。 总结来说,Java集合框架中的HashSet、TreeSet、HashMap和TreeMap是处理数据的重要工具。理解它们的...

    java批量执行post请求分析并对比结果

    在Java编程中,批量执行POST请求是一项常见的任务,特别是在自动化测试、数据分析或者集成服务的场景下。本篇文章将深入探讨如何实现这个功能,并且对比不同请求的结果。 首先,我们需要了解HTTP POST请求的基本...

    lucene全文搜素实例 java lucene 实例

    **Lucene 全文搜索引擎实例:Java Lucene 实例** Lucene 是 Apache 软件基金会的一个开源项目,它提供了一个高性能、可扩展的信息检索库。这个实例将深入讲解如何在 Java 中使用 Lucene 来创建索引并执行各种搜索...

    实例讲解Java批量插入、更新数据

    本文将通过一个具体的实例来探讨如何在Java中实现对Oracle数据库的批量数据操作。 首先,批量插入数据通常涉及到PreparedStatement对象的使用。PreparedStatement是Statement的子类,它允许预编译SQL语句,从而提高...

    java代码xpdf实例

    Java代码中的XPDF实例主要涉及的是使用XPDF库在Java应用程序中处理PDF文档。XPDF是一套开源的PDF工具,包括了PDF文档的查看、转换、提取文本等能力。在这个实例中,我们可能会关注以下几个核心知识点: 1. **XPDF ...

    Java实现批量下载并压缩文件.pptx.pptx

    6. **PPT展示**:在项目报告或演示中,可以生成一个PPT来展示整个流程,包括Java批量下载文件的逻辑、MinIO的存储功能介绍以及使用`ZipOutputStream`进行文件压缩的步骤。 通过以上步骤,可以实现Java环境下从MinIO...

    java实现批量解压带密码的 rar or zip 文件

    在Java编程环境中,批量解压带密码...总的来说,Java批量解压带密码的RAR或ZIP文件涉及了文件流操作、压缩格式理解、第三方库的使用以及版权保护等多个知识点。通过合理运用这些知识,可以构建出高效、安全的解压工具。

    Java OSS批量下载并压缩为ZIP代码实例

    "Java OSS批量下载并压缩为ZIP代码实例" Java OSS批量下载并压缩为ZIP代码实例是使用Java语言实现在OSS(Object Storage Service)中批量下载文件并将其压缩为ZIP文件的示例代码。下面将对该代码实例中的知识点进行...

    JAVA CVS导出实例

    本实例主要关注如何在Java中进行CSV导出操作。 CSV文件的基本结构是由字段(通常是字符串)组成的行,字段之间由逗号分隔。这种格式使得CSV文件可以在不同的应用程序间轻松共享数据,无需复杂的解析或转换过程。在...

    java实现Ftp批量下载文件及解压

    通过Java实现FTP批量下载文件以及解压的功能,可以极大地提高工作效率,特别是在处理大量数据时。以下是一份详细的步骤介绍: 首先,我们需要引入Java的FTP客户端库,如Apache Commons Net库。这个库提供了丰富的...

    java 生成图片

    `java.awt.Graphics2D`类是主要的绘图接口,允许我们进行像素级别的操作,如绘制线条、填充形状、添加文本等。`javax.imageio.ImageIO`类则用于读写各种图像格式,如JPEG、PNG等。 批量生成图片通常涉及到循环和...

    redis集群批量插入

    本文将详细讨论如何在Java环境下连接Redis集群并实现批量插入String类型的数据。 首先,我们需要理解Redis集群的基本概念。Redis集群是通过分片(Sharding)技术来分散数据到多个节点,每个节点存储一部分数据。在...

    ffmpeg压缩java实例

    在Java开发中,通过调用FFmpeg的命令行工具,可以方便地集成到应用程序中进行视频处理,例如本实例中的视频压缩。在百度AI和腾讯AI的活体验证场景中,高质量、低大小的视频文件是必要的,因此使用FFmpeg进行视频压缩...

    JAVA上百实例源码以及开源项目源代码

    Java数组倒置 简单 Java图片加水印,支持旋转和透明度设置 摘要:Java源码,文件操作,图片水印 util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印...

    (java)文件批量快速加密

    在Java编程环境中,文件批量快速加密是一个常见的需求,特别是在数据安全性和隐私保护方面。本项目提供的解决方案基于Java 1.8版本,这意味着它利用了Java 8的特性,如流(Stream) API,来提高处理效率。然而,需要...

    Memcached java的使用实例

    可以通过Maven在`pom.xml`文件中添加依赖: ```xml &lt;groupId&gt;net.spy&lt;/groupId&gt; &lt;artifactId&gt;spymemcached &lt;version&gt;2.12.3 ``` 安装Memcached服务器通常有两种方式:通过源码编译或使用预编译的二进制包。在...

    java数据库编程实例 Access数据库

    本实例教程专注于使用Java与Access数据库的交互,Access是一款由Microsoft提供的轻量级数据库管理系统,适用于小型项目和个人数据管理。 首先,要进行Java和Access的交互,我们需要引入JDBC(Java Database ...

Global site tag (gtag.js) - Google Analytics