java连接mysql数据库实现单条插入和批量插入

 更新时间:2019年08月30日 10:41:54   作者:静远小和尚  
这篇文章主要为大家详细介绍了java连接mysql数据库实现单条插入和批量插入,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了java连接mysql数据库实现单条和批量插入的具体代码,供大家参考,具体内容如下

本文插入数据库的数据来源:java + dom4j.jar提取xml文档内容

1、连接数据库

package com.njupt.ymh;
 
import java.sql.DriverManager;
import java.sql.SQLException;
import com.mysql.jdbc.Connection;
 
public class Connect_MySQL {
 
 private static final String URL="jdbc:mysql://127.0.0.1:3306/news"; // 一般默认3306,这里设置成6666 (33060) MYSQL8 WMPNetworkSvc
 private static final String USER="root";
 private static final String PASSWORD="12345";
 private static Connection connection=null;
 
 static{
 //1、加载驱动程序(反射的方法)
 try {
  Class.forName("com.mysql.jdbc.Driver");
 } catch (ClassNotFoundException e) {
  e.printStackTrace();
 }
 //2、连接数据库
 try {
 connection=(Connection) DriverManager.
   getConnection(URL, USER,PASSWORD);//地址,用户名,密码
 } catch (SQLException e) {
  e.printStackTrace();
 }
 }
 public static Connection getConnection(){
 return connection;
 }
 
}

 2、单条插入

package com.njupt.ymh;
/**
 * 单条插入数据
 */
 
import java.sql.SQLException;
import java.util.List;
 
import com.mysql.jdbc.Connection;
 
public class OperationPaper {
 
 private static Connection connection=Connect_MySQL.getConnection();
 
 public void addNewsPaper(NewsPaper newsPaper){//增
 // connection = Connect_MySQL.getConnection();
 String sql="insert into papertest (id, date, title, lead_pargraph, full_text) values(?, ?, ?, ?, ?)";
 
  java.sql.PreparedStatement ptmt = null;
  try {
  ptmt = connection.prepareStatement(sql);
  } catch (SQLException e1) {
  e1.printStackTrace();
  }
  
  try {
  ptmt.setLong(1, newsPaper.getID());
  ptmt.setString(2, newsPaper.getDate());
  ptmt.setString(3, newsPaper.getTitle());
  ptmt.setString(4, newsPaper.getLead());
  ptmt.setString(5, newsPaper.getfull());
  ptmt.execute();//执行给定的SQL语句,该语句可能返回多个结果
  
  } catch (SQLException e) {
  e.printStackTrace();
  }
 }
 public static void main(String[] args) {
 OperationPaper operationPaper = new OperationPaper();
 List<String> listFile = SearchFile.getAllFile("E:\\huadai\\1996\\07\\21", false); // 文件列表
 
 for (String string : listFile) {  
  NewsPaper newsPaper = new NewsPaper(string);
  if (newsPaper.isUseful()) 
  operationPaper.addNewsPaper(newsPaper); // 插入数据库
 }
 }
 
}

3、批量插入

package com.njupt.ymh;
 
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
 
import com.mysql.jdbc.Connection;
 
public class OperaOnNewsPaper implements Cloneable{
 
private static Connection connection=Connect_MySQL.getConnection();
 
 
 /**
 * 支持批量插入数据
 * @param newsPaper
 */
 
 public void addNewsPaper(ArrayList<NewsPaper> listNewsPaper){//增
 String sql="insert into papertest (id, date, title, lead_pargraph, full_text) values(?, ?, ?, ?, ?)";
 java.sql.PreparedStatement ptmt = null;
 
 try {
  connection.setAutoCommit(false);// 关闭事务
  ptmt = connection.prepareStatement(sql);
 
 } catch (SQLException e2) {
  e2.printStackTrace();
 } 
 
 for (NewsPaper paperaper : listNewsPaper) {
  
  try {
  ptmt.setLong(1, paperaper.getID());
  ptmt.setString(2, paperaper.getDate());
  ptmt.setString(3, paperaper.getTitle());
  ptmt.setString(4, paperaper.getLead());
  ptmt.setString(5, paperaper.getfull());
  ptmt.addBatch(); 
  } 
  catch (SQLException e) {
  e.printStackTrace();
  }
 }
 try {
  ptmt.executeBatch();//执行给定的SQL语句,该语句可能返回多个结果
  connection.commit();
 } catch (SQLException e) {
  e.printStackTrace();
 }
 }
 
 
 public static void main(String[] args) {
 OperaOnNewsPaper operation = new OperaOnNewsPaper();
 List<String> listFile = SearchFile.getAllFile("E:\\huadai\\2007", false); // 文件列表
 ArrayList<NewsPaper> listPaper = new ArrayList<>();
 int count = 0;
 int sizenum = 1000;
 for (String string : listFile) {
  NewsPaper newsPaper = new NewsPaper(string);
  
  if (newsPaper.isUseful()) {
  count++;
  listPaper.add(newsPaper);  // 新闻列表
  if (count % sizenum == 0) {
   //System.out.println("ok");
   System.out.println("  " + count);
   operation.addNewsPaper(listPaper); //插入数据库
   
   System.out.println(count);
   listPaper.clear();
  }
  } 
 }
 if (count %sizenum != 0) {
  operation.addNewsPaper(listPaper);
  System.out.println("zui hou ");
 } 
 }
}

通过实际测试,大概十万级数据批量插入要不单条插入节省10分钟左右时间。因为每次单条插入就要和数据库建立一次连接,进行一次日志更新。但是,如果批量插入过程中,批量的数据值有一条不符合格式就将导致本次批量插入整体失败,因此需要对失败情况进行处理,或者对批量插入的数据进行预处理,保证批量插入能够成功。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • java迭代器中删除元素的实例操作详解

    java迭代器中删除元素的实例操作详解

    在本篇内容里小编给各位分享了一篇关于java迭代器中删除元素的实例操作详解内容,有兴趣的朋友们可以学习下。
    2021-01-01
  • SpringBoot Security实现单点登出并清除所有token

    SpringBoot Security实现单点登出并清除所有token

    Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架。提供了完善的认证机制和方法级的授权功能。是一款非常优秀的权限管理框架。它的核心是一组过滤器链,不同的功能经由不同的过滤器
    2023-01-01
  • Java Map.getOrDefault方法详解

    Java Map.getOrDefault方法详解

    Map.getOrDefault(Object key, V defaultValue)是Java中Map接口的一个方法,用于获取指定键对应的值,如果键不存在,则返回一个默认值,这篇文章主要介绍了Java Map.getOrDefault方法详解,需要的朋友可以参考下
    2024-01-01
  • SpringCloud Webflux过滤器增加header传递方式

    SpringCloud Webflux过滤器增加header传递方式

    这篇文章主要介绍了SpringCloud Webflux过滤器增加header传递方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • Java实现聊天机器人完善版

    Java实现聊天机器人完善版

    这篇文章主要为大家详细介绍了Java实现聊天机器人完善版,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • Java解除文件占用即Dom4j操作后实现xml关流

    Java解除文件占用即Dom4j操作后实现xml关流

    这篇文章主要介绍了Java解除文件占用即Dom4j操作后实现xml关流,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • Java初学者入门之继承和多态

    Java初学者入门之继承和多态

    Java 面向对象编程有三大特性:封装、继承、多态,学好继承和多态是面向对象开发语言中非常重要的一个环节,这篇文章主要给大家介绍了关于Java初学者入门之继承和多态的相关资料,需要的朋友可以参考下
    2021-07-07
  • 浅谈java中的移动位运算:,>>>

    浅谈java中的移动位运算:,>>>

    这篇文章主要介绍了java中的移动位运算:,>>>文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • 利用Java多线程技术导入数据到Elasticsearch的方法步骤

    利用Java多线程技术导入数据到Elasticsearch的方法步骤

    这篇文章主要介绍了利用Java多线程技术导入数据到Elasticsearch的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • Springboot接口参数校验的方法

    Springboot接口参数校验的方法

    在设计接口时我们通常需要对接口中的非法参数做校验,以降低在程序运行时因为一些非法参数而导致程序发生异常的风险,这篇文章给大家介绍Springboot接口参数校验的方法,感兴趣的朋友一起看看吧
    2024-03-03

最新评论