首页 > 编程语言 >Java JDBC批处理添加出现问题,求解决方案

Java JDBC批处理添加出现问题,求解决方案

时间:2023-04-16 15:34:36浏览次数:39  
标签:JDBC Java java 批处理 static sql import null

晚辈使用JDBC批处理时出现一个问题,使用addBatch()方法将记录加入批处理中,我想让这五千条记录每达到一千条记录再执行,以此提高效率,可最后执行在数据库查看时仅五条记录,我尝试将 

preparedStatement.executeUpdate();
提出if语句,虽然是有五千条记录,但效率相当的慢
请求前辈们给出解决方案,谢谢

JDBC 的工具类,用于连接和关闭JDBC的相关资源

import java.io.FileReader;
import java.io.IOException;
import java.sql.*;
import java.util.Properties;

/**/
public class JDBC {
    private static String user; //用户名
    private static String password; //密码
    private static String url;  //url
    private static String driver;   //驱动
    //使用静态代码块将信息全部获取并赋值给4个属性
    static {
        try {
            //创建Properties文件对象
            Properties properties = new Properties();
            //读取文件位置
            properties.load(new FileReader("src\\MySQLConnectorUserPassword.Properties"));
            //get相关值并赋值
            user = properties.getProperty("user");
            password = properties.getProperty("password");
            url = properties.getProperty("url");
            driver = properties.getProperty("driver");
        }catch (IOException e){
            throw new RuntimeException(e);
        }
    }
    //定义静态方法获取连接,并返回连接
    public static Connection getConnection(){
        try {
            return DriverManager.getConnection(url,user,password);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
    //创建静态方法关闭连接等资源
    public static void close(ResultSet resultSet, PreparedStatement preparedStatement, Connection connection){
        //为了防止有null,需要使用if进行判断
        try {
            if(resultSet != null){
                resultSet.close();
            }
            if(preparedStatement != null){
                preparedStatement.close();
            }
            if(connection != null){
                connection.close();
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
}

然后下面就是批处理的相关代码
import jdbcutils.JDBC;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class A1Batch {
    //批处理   同时处理多条sql语句
    //使用批处理需要在url中加入rewriteBatchStatements=true
    public static void main(String[] args) throws SQLException {
        new A1Batch().batch();
    }
    public void batch() throws SQLException {
        //连接
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        //sql语句
        String sql = "insert into admin2 values (null,?);";
        //资源赋值
        connection = JDBC.getConnection();
        preparedStatement = connection.prepareStatement(sql);
        long start = System.currentTimeMillis();
        //处理多条语句
        for (int i = 1; i <= 5000; i++) {
            //赋值
            preparedStatement.setString(1,"jack"+i);
            //将sql语句加入到批处理中     addBatch()方法
            preparedStatement.addBatch();
            //当有1k条记录,再批量执行
            if (i%1000==0){
                //执行
                preparedStatement.executeUpdate();
                //清空
                preparedStatement.clearBatch();
            }
        }
        long stop = System.currentTimeMillis();
        System.out.println("使用时长:" + (stop-start));
        //关闭资源
        JDBC.close(resultSet,preparedStatement,connection);
    }
}

  

标签:JDBC,Java,java,批处理,static,sql,import,null
From: https://www.cnblogs.com/nl1027/p/17323333.html

相关文章

  • java多版本共存
    原理通过脚步改变path环境变量来实现java多版本切换.这里使用的是Win10.一,删除原有的java搜索路径.在安装高版本的java时,会添加一个路径到path环境变量中,如我的C:\ProgramFiles\CommonFiles\Oracle\Java\javapath,在该目录下存有java.exe和javac.exe等.在用cmd执行命令时,......
  • java语句
    语句语句是以;或}或)结尾的一段代码,目的是执行某些操作,并且没有返回值。语句块和方法体也算语句。所以,语句是可以嵌套的。函数体是一个有名称的语句。对于拥有子语句的语句,称为复合语句,否则就是简单语句。 简单语句空语句:;;;方法调用语句:setVal(34);表达式语句:i......
  • javascript 把嵌套的 map 转成 object,再转 json 字符串
    使用JSON.stringify转map时发现并没有转成想要的JSON数据,搜索发现要转成Object才能够转成完整的JSON,用递归转换:constconvertNestedMapToObject=(map)=>{if(mapinstanceofMap){map.forEach((v,k)=>{......
  • javascript常用的循环对比及性能分析
    结论:js中的for循环只有在处理百万条数据以上才会展示出他的强大性能,和看出明显优势,但是在百万条数据往下甚至到个位数的数据量通常都是for和while还有do...while不相上下,反而后两者更加优势明显下面是测试耗时截图(在不同浏览器也会有所不同,我这是Chrome版本111.0.5563.149)......
  • 使用文本编辑器和jdk开发简单JavaSE工程
    一个在eclipse下简单的示例 运行时可以在代码编辑器页面右键run测试发布时可以file->export->runnablejarfile 如果没有eclipse只有jdk和文本编辑器呢? 创建和eclipse工程相似的目录 目录JAVASE01binlibsrc\com\zt\javase01\IODemo.java 下面的命令是在编译class......
  • Java中常用排序算法及示例-冒泡排序、希尔排序、选择排序、插入排序、合并排序、基数
    场景Java中需要对数据进行排序处理,常用的排序算法以及示例进行归纳整理。注:实现1、冒泡排序冒泡排序法又称为交换排序法,原理是从第一个元素开始,比较相邻元素的大小,若大小顺序有误,则对调后再进行下一个元素的比较。如此扫描一次之后就可以确保最后一个元素位于正确的顺序,接着逐步进......
  • Java中常用算法及示例-分治、迭代、递归、递推、动态规划、回溯、穷举、贪心
    场景1、分治算法的基本思想是将一个计算复杂的问题分成规模较小、计算简单的小问题求解,然后综合各个小问题,得到最终答案。2、穷举(又称枚举)算法的基本思想是从所有可能的情况中搜索正确的答案。3、迭代法(IterativeMethod)无法使用公式一次求解,而需要使用重复结构(即循环)重复执......
  • Java中创建线程的方式以及线程池创建的方式、推荐使用ThreadPoolExecutor以及示例
    场景Java中创建线程的方式有三种1、通过继承Thread类来创建线程定义一个线程类使其继承Thread类,并重写其中的run方法,run方法内部就是线程要完成的任务,因此run方法也被称为执行体,使用start方法来启动线程。2、通过实现Runanle接口来创建线程首先定义Runnable接口,并重写Runnable接口......
  • Java面向对象编程中级
    IDEA常用快捷键删除当前行,默认是ctrl+Y自己配置ctrl+d复制当前行,自己配置ctrl+alt+向下光标补全代码alt+/添加注释和取消注释ctrl+/导入该行需要的类先配置autoimport,然后使用alt+enter即可快速格式化代码ctrl+alt+L快速运行程序自己定义alt+......
  • JavaScript运算符与表达式
    目录一、===二、||三、??与?.???.四、...五、[]{}[]{}一、===严格相等运算符,用作逻辑判断1==1 //返回true1=='1' //返回true,会先将右侧的字符串转为数字,再做比较1==='1' //返回false,类型不等,直接返回falsetypeof查看某个值的类型typeof1 //返回'number'ty......