java连接mysql数据库实现单条和批量插入的具体代码

java连接mysql数据库实现单条和批量插入的具体代码

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分钟左右时间。因为每次单条插入就要和数据库建立一次连接,进行一次日志更新。但是,如果批量插入过程中,批量的数据值有一条不符合格式就将导致本次批量插入整体失败,因此需要对失败情况进行处理,或者对批量插入的数据进行预处理,保证批量插入能够成功。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值