zoukankan      html  css  js  c++  java
  • 简单的批量读取外部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();
                    }
                }
            }
        }
    }
  • 相关阅读:
    CodeForces 510C Fox And Names (拓扑排序)
    Codeforces 1153D Serval and Rooted Tree (简单树形DP)
    HDU 6437 Problem L.Videos (最大费用)【费用流】
    Luogu P3381 (模板题) 最小费用最大流
    Codeforces 741B Arpa's weak amphitheater and Mehrdad's valuable Hoses (并查集+分组背包)
    Codeforces 1144F Graph Without Long Directed Paths (DFS染色+构造)
    HDU 2204 Eddy's 爱好 (容斥原理)
    Codeforces 939E Maximize! (三分 || 尺取)
    Codeforces 938D. Buy a Ticket (最短路+建图)
    CodeForces 959E Mahmoud and Ehab and the xor-MST (MST+找规律)
  • 原文地址:https://www.cnblogs.com/notDog/p/4521635.html
Copyright © 2011-2022 走看看