List數據批量插入數據庫


為了提高大數據量的插入數據,對將要存入的list集合進行切割   此處的dulTpList 為百萬級別的數據對象集合

            // 數據傳輸,為提高插入效率,對數據進行切割
            int size = 1000;    
            if (dulTpList.size() <= size) {
                // 若數據量小於size時,直接插入
                insertDulDataForSqlServer(con, dulTpList);
            } else {
                int times = (int) Math.ceil(dulTpList.size() / size);
                System.out.println("總插入批次   times: " + times);
                for (int i = 0; i <= times; i++) {
                    System.out.println("截取的開始角標"+i * size +"  截止角標" + Math.min((i + 1) * size, dulTpList.size()) + " min"+(i + 1) * size+" max"+dulTpList.size());
                    // Math.min()方法,取較小值
                    subList = dulTpList.subList(i * size, Math.min((i + 1) * size, dulTpList.size()));
                    // 插入
                    insertDulDataForSqlServer(con, subList);
                }
            }

切割源數據就保證了每次插入的數據為0-1000,1000-2000,2000-3000.....分階段但有連續性的數據

此處的插入方法為原始的JDBC連接sqlserver 進行的插入操作,連接過程不再贅述,插入代碼也一並貼出

    /**
     * 執行SqlServer數據庫的插入操作
     * 
     * @param con        數據庫連接對象
     * @param dulAllList 需要進行插入的數據
     * @param database
     * @throws SQLException
     */
    public void insertDulDataForSqlServer(Connection con, List<TemplatePojo> dulAllList) throws SQLException {
        // 執行插入語句
        PreparedStatement cmd = con
                .prepareStatement("insert into [EMR4].[dbo].[ET_DOCUMENT_STRUCTURED] values(?,?,?,?,?,?,?,?,?,?)");
        // 執行
        for (TemplatePojo templatePojo : dulAllList) {
            cmd.setString(1, templatePojo.getObjectId());
            cmd.setString(2, templatePojo.getObjectName());
            cmd.setString(3, templatePojo.getObjectType());
            cmd.setString(4, templatePojo.getOwnersection());
            cmd.setString(5, templatePojo.getObjectData());
            cmd.setString(6, templatePojo.getObjectDataText());
            cmd.setString(7, templatePojo.getObjectDataJson());
            cmd.setString(8, templatePojo.getItemText());
            cmd.setString(9, templatePojo.getDeptDocId());
            cmd.setString(10, templatePojo.getEtType());
            cmd.addBatch();
        }
        cmd.executeBatch();
        System.out.println("執行插入語句:");
        // 提交需要執行的語句
        con.commit();
        cmd.close();
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM