深入Sqlite多线程入库的问题
今天经理给了我一个三十多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"))); } }
以上就是深入Sqlite多线程入库的问题的内容,更多相关内容请关注PHP中文网(www.php.cn)!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Cara mencipta sistem log masuk pengguna menggunakan PHP dan SQLite Dalam era Internet hari ini, sistem log masuk pengguna merupakan salah satu fungsi asas bagi banyak laman web dan aplikasi. Artikel ini akan memperkenalkan cara mencipta sistem log masuk pengguna yang ringkas dan berkuasa menggunakan PHP dan SQLite. SQLite ialah enjin pangkalan data terbenam Ia adalah enjin pangkalan data bahagian pelayan tanpa konfigurasi. PHP ialah bahasa skrip sebelah pelayan yang popular yang boleh digunakan bersama dengan SQLite untuk mencipta sistem log masuk pengguna yang fleksibel dan cekap. oleh

Melaksanakan kebenaran pengguna dan kawalan akses menggunakan PHP dan SQLite Dalam aplikasi web moden, kebenaran pengguna dan kawalan akses adalah bahagian yang sangat penting. Dengan pengurusan kebenaran yang betul, anda boleh memastikan bahawa hanya pengguna yang diberi kuasa boleh mengakses halaman dan fungsi tertentu. Dalam artikel ini, kita akan belajar cara melaksanakan kebenaran pengguna asas dan kawalan akses menggunakan PHP dan SQLite. Pertama, kita perlu mencipta pangkalan data SQLite untuk menyimpan maklumat tentang pengguna dan kebenaran mereka. Berikut ialah struktur jadual pengguna ringkas dan jadual kebenaran

PHP dan SQLite: Cara Memampat dan Menyulitkan Data Dalam kebanyakan aplikasi web, keselamatan data dan penggunaan ruang storan adalah pertimbangan yang sangat penting. PHP dan SQLite ialah dua alat yang digunakan secara meluas, dan artikel ini akan memperkenalkan cara menggunakannya untuk pemampatan dan penyulitan data. SQLite ialah enjin pangkalan data terbenam ringan yang tidak mempunyai proses pelayan yang berasingan tetapi berinteraksi secara langsung dengan aplikasi. PHP ialah bahasa skrip sebelah pelayan yang popular yang digunakan secara meluas untuk membina dinamik

Menggunakan PHP dan SQLite untuk melaksanakan carta data dan gambaran keseluruhan visualisasi: Dengan kemunculan era data besar, carta data dan visualisasi telah menjadi cara penting untuk memaparkan dan menganalisis data. Dalam artikel ini, kami akan memperkenalkan cara menggunakan PHP dan SQLite untuk melaksanakan carta data dan fungsi visualisasi. Ambil contoh sebagai contoh untuk menunjukkan cara membaca data daripada pangkalan data SQLite dan menggunakan pustaka carta data biasa untuk memaparkan data. Penyediaan: Pertama, anda perlu memastikan bahawa pangkalan data PHP dan SQLite telah dipasang. Jika ia tidak dipasang, anda boleh

Dengan perkembangan Internet, blog telah menjadi platform untuk lebih ramai orang berkongsi kehidupan, pengetahuan dan idea mereka. Jika anda juga ingin membuat blog sendiri, maka artikel ini akan memperkenalkan cara menggunakan PHP dan SQLite untuk membuat blog yang mudah. Tentukan keperluan Sebelum mula membuat blog, kita perlu tentukan fungsi yang ingin kita capai. Contohnya: Buat catatan blog Edit catatan blog Padam catatan blog Paparkan senarai catatan blog Paparkan butiran catatan blog Pengesahan pengguna dan kawalan kebenaran Pasang PHP dan SQLite Kita perlu memasang PHP dan S

PHP dan SQLite: Cara menangani sambungan yang panjang dan memutuskan sambungan dan penyambungan semula Pengenalan: Dalam pembangunan web, PHP dan SQLite ialah dua teknologi yang biasa digunakan. Walau bagaimanapun, sambungan panjang dan pemotongan dan penyambungan semula adalah beberapa masalah yang sering dihadapi apabila menggunakan PHP dan SQLite. Artikel ini akan memperkenalkan cara menangani masalah sambungan panjang dan pemotongan dan penyambungan semula dalam PHP, serta menyediakan beberapa contoh kod untuk membantu pembangun memahami dan menyelesaikan masalah ini dengan lebih baik. 1. Masalah sambungan berterusan Apabila menggunakan PHP untuk menyambung ke pangkalan data SQLite, sambungan panjang (Persis

Cara menggunakan PHP dan SQLite untuk strategi pencarian dan pengindeksan teks penuh Pengenalan: Dalam pembangunan aplikasi moden, keupayaan carian teks penuh amat diperlukan dalam banyak bidang. Sama ada di blog, laman web berita atau platform e-dagang, pengguna sudah biasa menggunakan kata kunci untuk mencari. Oleh itu, untuk meningkatkan pengalaman pengguna dan memberikan hasil carian yang lebih baik, kami perlu menyediakan keupayaan carian teks penuh menggunakan strategi carian dan pengindeksan yang sesuai. Dalam artikel ini, kami akan meneroka cara menggunakan pangkalan data PHP dan SQLite untuk melaksanakan carian teks penuh dan

Cara Mengimport dan Mengeksport Data Menggunakan PHP dan SQLite Mengimport dan mengeksport data adalah salah satu tugas biasa semasa membangunkan laman web atau aplikasi. Menggunakan PHP dan SQLite, kami boleh mengimport data daripada fail luaran ke pangkalan data SQLite dengan mudah dan mengeksport data daripada pangkalan data ke fail luaran. Artikel ini akan memperkenalkan cara menggunakan PHP dan SQLite untuk import dan eksport data, serta memberikan contoh kod yang sepadan. Import data Pertama, kita perlu menyediakan fail luaran yang mengandungi data yang akan diimport. fail ini
