使用jdbc批量插入数据

news/2024/5/18 21:42:59 标签: java, 数据库, sql, jdbc

PreparedStatement 和Statement 各分享一个,直接看代码:
以MySQL为例,原理就是sql的这种语法:

sql">insert into tableName(字段一, 字段二)
VALUE (数据一, 数据二), (数据X, 数据Y),(...,...), (...,...)

Statement 对象处理方式;

java">try {
            Class.forName(driver);
            conn = DriverManager.getConnection(url, username, password);
            Statement statement = null;
            String csvFilePath = "D:\\t_c804.csv";
            CsvReader r = new CsvReader(csvFilePath,',', Charset.forName("UTF-8"));
            //读取表头
            r.readHeaders();
            //逐条读取记录,直至读完
            int i = 0;
            String sql = "insert into story804  (ID,LAC,CI,AbJie," + 
                    "cellId,rsrp,rsrq)  values ";
            String bufferSql = "";
            while (r.readRecord()) {
                JSONObject obj = JSONObject.parseObject(r.get("DisplayData"));
                String cellId = obj.getString("N383");
                Double rsrp = null;
                if (null != obj.getString("N384")) {
                    rsrp = Double.parseDouble(obj.getString("N384"));
                }
                Double rsrq = null;
                if (null != obj.getString("N385")) {
                    rsrq = Double.parseDouble(obj.getString("N385"));
                }
                if("".equals(bufferSql)){
                    bufferSql = "('" + r.get("ID") + "','" + r.get("LAC") + "','" + r.get("CI") + "','" +
                            r.get("AbJie") + "','" + cellId + "'," +
                            rsrp + "," + rsrq  + ")";
                }else{
                    bufferSql = bufferSql +
                            ",('" + r.get("ID") + "','" + r.get("LAC") + "','" + r.get("CI") + "','" +
                            r.get("AbJie")  + "','" + cellId + "'," +
                            rsrp + "," + rsrq + ")";
                }
                i++;
                if(i > 1000){
                    if(null == statement){
                        statement = conn.createStatement();
                    }
                    System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + "---执行一次");
                    statement.execute(sql + bufferSql);
                    bufferSql = "";
                    i = 0;
                }
            }
            if(i > 0){
                System.out.println("最后一次插入  " + i +  "   行");
                if(null == statement){
                    statement = conn.createStatement();
                }
                statement.execute(sql + bufferSql);
            }
            conn.close();
            r.close();
            System.out.println("-------------------------------------------------");
            System.out.println("--------------------执行结束---------------------");
            System.out.println("-------------------------------------------------");
        } catch (Exception e) {
            e.printStackTrace();
        }

PreparedStatement 的处理方式

java">String sql = "insert into story804  (id, name) VALUES (?,?)";
        PreparedStatement ps = null;
        try {
            ps = conn.prepareStatement(sql);
            for (int i = 1; i <= 2848000; i++) {
                ps.setObject(1, i);
                ps.setObject(2, NameUtil.getName());
                ps.addBatch();
                if (i % 1000 == 0) {
                    ps.executeBatch();
                    ps.clearBatch();
                }
            }
            ps.executeBatch();
            ps.clearBatch();
        } catch (Exception e) {
            e.printStackTrace();
        } 

一般使用jdbc都是自己写个工具或者处理手动一点数据,正式项目中几乎没有这么用的,仅供大家参考


http://www.niftyadmin.cn/n/1032336.html

相关文章

Java里将List批量一次性插入oracle数据库

最近一直再做List的批量入库操作,总结了两种批量入库的方式&#xff1a; 第一种&#xff1a; <insert id"insertBatch" parameterType"java.util.List">INSERT INTO BeatDataTable (MSGTIMESTAMP,DEVICENUM,LINENUM,RAILLINENUM,LOCOMOTIVE,TRAINN…

2.6 exec函数族

目录 exec函数族作用图解&#xff1a; execl函数&#xff1a; execlp函数&#xff1a; execv函数&#xff1a; execve函数&#xff1a; 一系列功能相同或相似的函数统称为函数族。 exec函数族的一般使用方法&#xff1a;先fork一个子进程&#xff0c;然后在子进程中调用ex…

2-1选择排序法

思想&#xff1a;选择最小的元素&#xff0c;放在未排序数组之首&#xff0c;即位置i 0到i-1是已经排序好的数组 定义一个变量&#xff0c;记录本次循环中找到的最小值的下标 将最小元素与i位置元素互换 #include <iostream>using namespace std; //参数为数组和数组…

2-2使用模板编写算法

上一节中的排序算法只能对整型数组进行排序 下面用函数模板进行改进&#xff1a; #include <iostream> #include "student.h"using namespace std; //参数为数组和数组中元素的个数 template<class T> void selectionSort(T a[],int n) {int i0;int mi…

2-3随机生成算法测试用例

前面两节的测试用例是手工输入的&#xff0c;下面用随机函数生成测试用例&#xff1a; #include <iostream> #include "testhelper.h"using namespace std; //参数为数组和数组中元素的个数 template<class T> void selectionSort(T a[],int n) {int i0…

2-4测试算法的性能

#include <iostream> #include "testhelper.h"using namespace std; //参数为数组和数组中元素的个数 template<class T> void selectionSort(T a[],int n) {int i0;int minIndex0;for(i0;i<n;i){ //寻找[i,n)区间里的最小值minIndexi; //minIndex表…

2.7进程退出、孤儿进程、僵尸进程

目录 1.进程退出 2.孤儿进程 3.僵尸进程 1.进程退出 #include <stdlib.h> void exit(int status);#include <unistd.h> void _exit(int status);status参数&#xff1a;是进程退出时的一个状态信息。父进程回收子进程资源的时候可以获取到。测试exit函数的程序&…

2.8wait函数

目录 1.进程回收 2.wait函数 程序版本1&#xff1a; 程序版本2&#xff1a; 程序版本3&#xff1a; 程序版本4&#xff1a; 1.进程回收 2.wait函数 #include <sys/types.h> #include <sys/wait.h> pid_t wait(int *status);功能&#xff1a;等待任意一个子进…