Eingehende Analyse von Problemen mit SQLite-Multithread-Datenbanken
今天经理给了我一个三十多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)!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



So erstellen Sie ein Benutzeranmeldesystem mit PHP und SQLite. Im heutigen Internetzeitalter ist ein Benutzeranmeldesystem eine der Grundfunktionen vieler Websites und Anwendungen. In diesem Artikel erfahren Sie, wie Sie mit PHP und SQLite ein einfaches und leistungsstarkes Benutzeranmeldesystem erstellen. SQLite ist eine eingebettete Datenbank-Engine. Es handelt sich um eine serverseitige Datenbank-Engine ohne Konfiguration. PHP ist eine beliebte serverseitige Skriptsprache, die in Verbindung mit SQLite verwendet werden kann, um ein flexibles und effizientes Benutzeranmeldesystem zu erstellen. von

Benutzerberechtigungen und Zugriffskontrolle mit PHP und SQLite implementieren In modernen Webanwendungen sind Benutzerberechtigungen und Zugriffskontrolle ein sehr wichtiger Bestandteil. Mit einer ordnungsgemäßen Berechtigungsverwaltung können Sie sicherstellen, dass nur autorisierte Benutzer auf bestimmte Seiten und Funktionen zugreifen können. In diesem Artikel erfahren Sie, wie Sie mit PHP und SQLite grundlegende Benutzerberechtigungen und Zugriffskontrolle implementieren. Zuerst müssen wir eine SQLite-Datenbank erstellen, um Informationen über Benutzer und ihre Berechtigungen zu speichern. Das Folgende ist die Struktur einer einfachen Benutzertabelle und einer Berechtigungstabelle

PHP und SQLite: So komprimieren und verschlüsseln Sie Daten In vielen Webanwendungen sind Datensicherheit und Speicherplatznutzung sehr wichtige Überlegungen. PHP und SQLite sind zwei sehr weit verbreitete Tools. In diesem Artikel erfahren Sie, wie Sie sie zur Datenkomprimierung und -verschlüsselung verwenden. SQLite ist eine leichtgewichtige eingebettete Datenbank-Engine, die keinen separaten Serverprozess hat, sondern direkt mit Anwendungen interagiert. PHP ist eine beliebte serverseitige Skriptsprache, die häufig zum Erstellen dynamischer Dateien verwendet wird

Verwendung von PHP und SQLite zur Implementierung von Datendiagrammen und Visualisierungsübersicht: Mit dem Aufkommen des Big-Data-Zeitalters sind Datendiagramme und Visualisierungen zu einer wichtigen Methode zur Anzeige und Analyse von Daten geworden. In diesem Artikel stellen wir vor, wie Sie PHP und SQLite zum Implementieren von Datendiagrammen und Visualisierungsfunktionen verwenden. Nehmen Sie ein Beispiel, um zu zeigen, wie Daten aus einer SQLite-Datenbank gelesen und eine gemeinsame Datendiagrammbibliothek zum Anzeigen der Daten verwendet werden. Vorbereitung: Zunächst müssen Sie sicherstellen, dass PHP- und SQLite-Datenbanken installiert sind. Wenn es nicht installiert ist, können Sie es tun

Mit der Entwicklung des Internets sind Blogs für immer mehr Menschen zu einer Plattform geworden, auf der sie ihr Leben, Wissen und Ideen teilen können. Wenn Sie auch ein eigenes Blog erstellen möchten, erfahren Sie in diesem Artikel, wie Sie mit PHP und SQLite ein einfaches Blog erstellen. Bestimmen Sie die Anforderungen Bevor wir mit der Erstellung eines Blogs beginnen, müssen wir die Funktionen bestimmen, die wir erreichen möchten. Zum Beispiel: Einen Blog-Beitrag erstellen Einen Blog-Beitrag bearbeiten Einen Blog-Beitrag löschen Eine Liste von Blog-Beiträgen anzeigen Blog-Beitragsdetails anzeigen Benutzerauthentifizierung und Berechtigungskontrolle PHP und SQLite installieren Wir müssen PHP und S installieren

PHP und SQLite: Umgang mit langen Verbindungen sowie Trennung und Wiederverbindung Einführung: In der Webentwicklung sind PHP und SQLite zwei häufig verwendete Technologien. Lange Verbindungen sowie das Trennen und erneute Verbinden gehören jedoch zu den Problemen, die bei der Verwendung von PHP und SQLite häufig auftreten. In diesem Artikel wird erläutert, wie mit den Problemen langer Verbindungen und Verbindungsabbrüchen und erneuten Verbindungen in PHP umgegangen werden kann. Außerdem werden einige Beispielcodes bereitgestellt, die Entwicklern dabei helfen sollen, diese Probleme besser zu verstehen und zu lösen. 1. Dauerhaftes Verbindungsproblem Bei der Verwendung von PHP zum Herstellen einer Verbindung zur SQLite-Datenbank kommt es zu einer langen Verbindung (Persis

Verwendung von PHP und SQLite für Volltextsuch- und Indexierungsstrategien Einführung: In der modernen Anwendungsentwicklung sind Volltextsuchfunktionen in vielen Bereichen unverzichtbar. Ob auf Blogs, Nachrichten-Websites oder E-Commerce-Plattformen, Benutzer sind es gewohnt, für die Suche Schlüsselwörter zu verwenden. Um die Benutzererfahrung zu verbessern und bessere Suchergebnisse bereitzustellen, müssen wir daher Volltextsuchfunktionen mithilfe geeigneter Such- und Indexierungsstrategien bereitstellen. In diesem Artikel erfahren Sie, wie Sie mithilfe von PHP- und SQLite-Datenbanken eine Volltextsuche implementieren

So importieren und exportieren Sie Daten mit PHP und SQLite Das Importieren und Exportieren von Daten ist eine der häufigsten Aufgaben bei der Entwicklung einer Website oder Anwendung. Mit PHP und SQLite können wir problemlos Daten aus externen Dateien in die SQLite-Datenbank importieren und Daten aus der Datenbank in externe Dateien exportieren. In diesem Artikel wird die Verwendung von PHP und SQLite zum Importieren und Exportieren von Daten vorgestellt und entsprechende Codebeispiele bereitgestellt. Datenimport Zunächst müssen wir eine externe Datei vorbereiten, die die zu importierenden Daten enthält. diese Datei
