• 简单的批量读取外部insert文并插入DB


    package com.tongxiang.item.base.dao;
    
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.Arrays;
    
    import org.apache.commons.lang.StringUtils;
    
    public class ImportFromSql
    {
        
        private static final String URL = "jdbc:oracle:thin:@xxx.xxx.xxx.xxx:1521:orcl";
        
        private static final String USER = "user";
        
        private static final String PASSWORD = "password";
        
        private static Connection CONN = null;
        
        static
        {
            try
            {
                Class.forName("oracle.jdbc.driver.OracleDriver");
                CONN = DriverManager.getConnection(URL, USER, PASSWORD);
            }
            catch (SQLException e)
            {
                e.printStackTrace();
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
        }
        
        public static void main(String[] args) throws Exception
        {
            try
            {
                // insert 文件数据格式
                // C:\TEST.sql
                // --------------------------
                // insert into (...) values (...);
                // insert into (...) values (...);
                // insert into (...) values (...);
                // --------------------------
                String sqlFile = "C:\TEST.sql";
                
                // 每次批处理数目
                int batchCnt = 100;
                
                insertSqlBacth(CONN, sqlFile, batchCnt);
            }
            finally
            {
                CONN.close();
            }
        }
        
        /**
         * 传入连接来执行 SQL 脚本文件,这样可与其外的数据库操作同处一个事物中
         * 
         * @param 数据库连接
         * @param 文件路径
         * @param 每次批处理数
         * 
         */
        public static void insertSqlBacth(Connection conn, String sqlFile,
                int batchCnt) throws Exception
        {
            Statement stmt = null;
            //从给定位置获取文件
            File file = new File(sqlFile);
            BufferedReader reader = null;
            try
            {
                reader = new BufferedReader(new FileReader(file));
                //每次读取文件的缓存
                String temp = null;
                int i = 0;
                int mod = 0;
                stmt = conn.createStatement();
                while ((temp = reader.readLine()) != null)
                {
                    i++;
                    stmt.addBatch(StringUtils.chomp(temp.trim(), ";"));
                    mod = i % batchCnt;
                    if (mod == 0)
                    {
                        int[] rows = stmt.executeBatch();
                        conn.commit();
                        System.out.println("Row count:" + Arrays.toString(rows));
                        stmt.close();
                        stmt = conn.createStatement();
                    }
                }
                if (mod != 0)
                {
                    int[] rows = stmt.executeBatch();
                    conn.commit();
                    System.out.println("Row count:" + Arrays.toString(rows));
                    stmt.close();
                }
            }
            catch (FileNotFoundException e)
            {
                e.printStackTrace();
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
            finally
            {
                //关闭文件流
                if (reader != null)
                {
                    try
                    {
                        reader.close();
                    }
                    catch (IOException e)
                    {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
  • 相关阅读:
    C#实现仪器的自动化控制
    .Net FrameWork常用类
    编码:隐匿在计算机软硬件背后的语言(8)--自动操作(三)
    深入理解计算机系统(4)-- 整数和浮点数
    编码:隐匿在计算机软硬件背后的语言(8)--自动操作(二)
    C#中二进制、十进制和十六进制互相转换的方法
    深入理解计算机系统(3)-- 信息存储
    mysql-5.7.17-winx64免安装版环境配置 问题小记
    python生成随机数:uniform(), randint(), gauss(), expovariate()
    深度学习翻译 效果优于各类翻译器
  • 原文地址:https://www.cnblogs.com/notDog/p/4521635.html
Copyright © 2020-2023  润新知