亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

深入Sqlite多線程入庫的問題

2019-11-26 16:06:30
字體:
來源:轉載
供稿:網友
今天經理給了我一個三十多M的sql文件,讓我測試數據定位的問題。按照慣例,我使用navicat for sqlite創建一個表,然后將sql文件導入。我然后去干其他事兒了,大約過了一個多小時,我想數據應該導入的差不多了吧。我打開一看,汗,死在那兒了。我關掉軟件又重新導入一遍,還是那個德行。又得知經理曾經自己也導過,沒有成功??磥?,用工具導入的方法行不通了。

但是,想想就十多萬條數據,就是十多萬條insert sql語句,有那么難嗎?于是,我想還是自己寫一個程序導入吧。雖然中間也遇到一些小插曲,但是還是成功地把數據導進去了。
程序的代碼如下:
復制代碼 代碼如下:

package com.geoway.pad.common.tool;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
/**
 * @author likehua
 * @note   SQLite建庫以及批量入庫
 * */
public class BatchTool{
    //ddl  
    private static String ddl="CREATE TABLE IF NOT EXISTS pbeijing_point (OBJECTID  INTEGER,NAME  TEXT,ADDRESS  TEXT,PHONE TEXT,FAX  TEXT,TYPE TEXT,CITYCODE TEXT,URL  TEXT,EMAIL  TEXT,NAME2  TEXT,X  INTEGER,Y  INTEGER)";
    Connection jCon=null;
    //get connection
    public synchronized Connection  getConnection(){    
        if(jCon==null){
//          json=
                Statement state=null;
                try {
                    Class.forName("org.sqlite.JDBC");
                    jCon=DriverManager.getConnection("jdbc:sqlite:c://newD.db");
                    state=jCon.createStatement();
                    state.executeUpdate(ddl);                   
                } catch (SQLException e) {
                    e.printStackTrace();
                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                }
        }
        return jCon;
    }
    //創建500個線程
    ExecutorService  service=Executors.newFixedThreadPool(500);
    //讀取sql文件     每五百個insert 語句由一個線程批量操作  
    public  void   readBatchSQL(InputStream is) throws IOException{
        BufferedReader bufferReader=new BufferedReader(new InputStreamReader(is,"UTF-8"));
        String line;
        String one="";
        int tag=0;
        String  batchSql="";
        while((line=bufferReader.readLine())!=null){
            one+=line;
            if(one.indexOf(";")!=-1){
                batchSql+=one;
                one="";//reset
                tag++;
            };
            //符合條件   開辟一個線程
            if(tag!=0&&tag/500!=0){
                service.execute(new SQLiteBatchHandler(batchSql));
                batchSql="";//reset
                tag=0;//reset
            }           
        }
        //最后執行 剩余的sql
        if(batchSql.length()>0){
            System.out.println("finalSQL:"+batchSql);
            Runnable r=new SQLiteBatchHandler(batchSql);
            service.execute(r);
        };
        try {
            //關閉線程池
            this.service.shutdown();            
        this.service.awaitTermination(1, TimeUnit.HOURS);<BR>                getConnection().close();<BR>       } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }

    };
    /**
     * @note  分割sql
     * */
    private static String[] splitSQL(String batchSQl){
        if(batchSQl!=null){
            return batchSQl.split(";");
        };
        return null;
    }
    /**
     * @note  執行批量更新操作
     *        由于connection.comit 操作時   如果存在 statement沒有close  就會報錯   因此將此方法加上同步    。
     * */
    private  synchronized  void  exucteUpdate(String batch){
        Statement ste=null;
        Connection con=null;
        try{
        con=getConnection();
        con.setAutoCommit(false);
        ste=con.createStatement();
        String[] sqls=this.splitSQL(batch);
        for(String sql:sqls){
            if(sql!=null){
                ste.addBatch(sql);
            };
        };
        ste.executeBatch();<BR>                ste.close();
        con.commit();//提交       
        }catch(Exception e){
            e.printStackTrace();
            System.out.println("執行失敗:"+batch);
            try {
                con.rollback();//回滾
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
        }finally{
            if(ste!=null){
                try {
                    ste.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    /**
     * @author likehua
     * @note   入庫線程
     * */
    private  class SQLiteBatchHandler implements Runnable{
        private String batch;
        public  SQLiteBatchHandler(String sql){
            this.batch=sql;
        };
        @SuppressWarnings("static-access")
        @Override
        public void run() {         
            try {
                Thread.currentThread().sleep(50);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            if(this.batch.length()>0){
                exucteUpdate(batch);

            };

        }       
    }
    /**
     * @author likehua
     * @note   主函數入口
     * */
    public  static  void main(String[] args) throws FileNotFoundException, IOException{
        BatchTool s=new BatchTool();
        s.readBatchSQL(new FileInputStream(new File("c://poi.sql")));
    }
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美黑人一区二区三区| 国产色婷婷国产综合在线理论片a| 欧美大片欧美激情性色a∨久久| 国产福利精品视频| 亚洲黄色av女优在线观看| 亚洲午夜av久久乱码| 国产91九色视频| 日本欧美爱爱爱| 欧美日韩高清区| 国产小视频91| 亚洲成人精品视频在线观看| 欧美xxxx做受欧美.88| 91精品国产91久久久| 欧美激情图片区| 国产精品影片在线观看| 日本久久精品视频| 国产成人久久久| 欧美另类99xxxxx| 亚洲欧洲xxxx| 成人免费观看a| 久久夜色精品国产亚洲aⅴ| 日韩成人中文字幕在线观看| 亚洲视频视频在线| 精品日韩美女的视频高清| 亚洲的天堂在线中文字幕| 狠狠干狠狠久久| 欧美人在线视频| 国产在线拍偷自揄拍精品| 福利视频导航一区| 亚洲欧美日韩高清| 国产日韩欧美一二三区| 国产精品美女主播| 亚洲国产精品国自产拍av秋霞| 日韩亚洲欧美中文高清在线| 不卡av电影在线观看| 久久视频中文字幕| 国产一区二区黄| 国内揄拍国内精品少妇国语| 91在线精品播放| 91欧美精品成人综合在线观看| 久久久电影免费观看完整版| 精品成人av一区| 日本精品久久电影| 在线日韩日本国产亚洲| 88国产精品欧美一区二区三区| 69av视频在线播放| 亚洲va欧美va国产综合久久| 国产精品欧美亚洲777777| 久久的精品视频| 精品久久中文字幕| 日韩成人xxxx| 成人综合国产精品| 欧美激情一级二级| 亚洲国产成人在线播放| 欧美一区二区三区精品电影| 国产精品扒开腿做爽爽爽男男| 日韩av在线电影网| 国产成人av在线播放| 亚洲美女www午夜| 精品高清美女精品国产区| 热久久视久久精品18亚洲精品| 日本中文字幕久久看| 欧美大片免费观看| 欧美丝袜美女中出在线| 日韩成人激情在线| 国产视频福利一区| 欧美国产日韩中文字幕在线| 91av中文字幕| 日韩欧美一区二区三区久久| 日韩性xxxx爱| 国产精品夜间视频香蕉| 亚洲国产成人在线播放| 久久99久久亚洲国产| 久热精品视频在线免费观看| 4438全国成人免费| 日韩免费观看网站| 国产成人jvid在线播放| 国产成人自拍视频在线观看| 这里精品视频免费| 国产精品永久在线| 欧美亚洲激情在线| 久久97久久97精品免视看| 亚洲网站在线看| 日韩精品一区二区三区第95| 亚洲国产免费av| 久久免费精品日本久久中文字幕| 91亚洲国产成人精品性色| 亚洲精品小视频在线观看| 亚洲精品电影在线| 精品久久久久久亚洲精品| 97精品国产97久久久久久春色| 成人a级免费视频| 久久视频国产精品免费视频在线| 久久久久久国产精品久久| 精品日本美女福利在线观看| 黑人与娇小精品av专区| 亚洲欧美日韩天堂一区二区| 国产午夜精品视频免费不卡69堂| 国产免费一区二区三区在线能观看| 久久夜色撩人精品| 亚洲精品永久免费| 91久久精品国产91久久性色| 成人黄色片网站| 久久精品国产视频| 伊人久久免费视频| 中文字幕亚洲欧美一区二区三区| 亚洲国产精品福利| 91久久精品国产91久久性色| 尤物yw午夜国产精品视频明星| 亚洲欧美国产精品久久久久久久| 91美女片黄在线观看游戏| 国产丝袜精品视频| 国产精品视频资源| 中文字幕日韩欧美| 欧美丰满少妇xxxxx做受| 亚洲精品成a人在线观看| 按摩亚洲人久久| 亚洲天堂成人在线| 免费91在线视频| 国产视频精品va久久久久久| 日本亚洲欧美成人| 色综合老司机第九色激情| 国产欧美中文字幕| 欧洲精品毛片网站| 亚洲国产高清高潮精品美女| 在线看片第一页欧美| 亚洲第一视频网站| 波霸ol色综合久久| 综合国产在线视频| 亚洲 日韩 国产第一| 亚洲激情第一页| 久久琪琪电影院| 91成人在线观看国产| 亚洲精品在线91| 国产欧美日韩免费| 亚洲国产99精品国自产| 91精品综合久久久久久五月天| 国产精品jizz在线观看麻豆| 亚洲欧美成人一区二区在线电影| 国产日韩欧美日韩| 日韩在线一区二区三区免费视频| 日本中文字幕成人| 日韩成人av网| 久久精品视频在线播放| 欧美激情一区二区三级高清视频| 久久精品国产久精国产思思| zzijzzij亚洲日本成熟少妇| 成人做爽爽免费视频| 狠狠躁天天躁日日躁欧美| 欧美极品少妇与黑人| 一个色综合导航| 久久久久久亚洲| 国产精品极品尤物在线观看| 日韩电影中文 亚洲精品乱码| 岛国视频午夜一区免费在线观看| 91chinesevideo永久地址| 欧美日韩亚洲成人| 97香蕉久久夜色精品国产| 91久久久精品| 久久综合色88| 最好看的2019的中文字幕视频| 97人洗澡人人免费公开视频碰碰碰| 欧美午夜精品在线| 亚洲国产成人精品一区二区|