677 Stimmen

Ist es möglich, mehrere Zeilen auf einmal in eine SQLite-Datenbank einzufügen?

In MySQL können Sie mehrere Zeilen wie folgt einfügen:

INSERT INTO 'tablename' ('column1', 'column2') VALUES
    ('data1', 'data2'),
    ('data1', 'data2'),
    ('data1', 'data2'),
    ('data1', 'data2');

Allerdings erhalte ich eine Fehlermeldung, wenn ich versuche, etwas wie dieses zu tun. Ist es möglich, mehrere Zeilen auf einmal in eine SQLite-Datenbank einzufügen? Wie lautet die Syntax dafür?

6 Stimmen

5 Stimmen

Ja, ab der Version 2012-03-20 (3.7.11) wird Ihre Syntax unterstützt.

2voto

caglaror Punkte 447

Ich habe eine Abfrage wie unten, aber mit ODBC-Treiber SQLite hat einen Fehler mit "," es sagt. Ich führe vbscript in HTA (Html-Anwendung) aus.

    INSERT INTO evrak_ilac_iliskileri (evrak_id, ilac_id, 
baglayan_kullanici_id, tarih) VALUES (4150,762,1,datetime()),
(4150,9770,1,datetime()),(4150,6609,1,datetime()),(4150,3628,1,datetime()),
(4150,9422,1,datetime())

2voto

ashakirov Punkte 11503

Auf sqlite 3.7.2:

INSERT INTO table_name (column1, column2) 
                SELECT 'value1', 'value1' 
          UNION SELECT 'value2', 'value2' 
          UNION SELECT 'value3', 'value3' 

und so weiter

2voto

Chris S Punkte 63542

Wenn Sie die Sqlite-Manager Firefox-Plugin, es unterstützt Masseneinfügungen von INSERT SQL-Anweisungen.

Es unterstützt dies zwar nicht, aber Sqlite-Browser tut (funktioniert unter Windows, OS X, Linux)

0voto

Mahmoud Badri Punkte 1118

Sie können InsertHelper verwenden, es ist einfach und schnell

Dokumentation: http://developer.Android.com/reference/Android/database/DatabaseUtils.InsertHelper.html

Tutorium: http://www.outofwhatbox.com/blog/2010/12/Android-using-databaseutils-inserthelper-for-faster-insertions-into-sqlite-database/

Bearbeiten: InsertHelper ist ab API Level 17 veraltet

3 Stimmen

Der InsertHelper ist seit API 17 veraltet.

-4voto

test30 Punkte 3166

Wenn Sie die Bash-Shell benutzen, können Sie dies verwenden:

time bash -c $'
FILE=/dev/shm/test.db
sqlite3 $FILE "create table if not exists tab(id int);"
sqlite3 $FILE "insert into tab values (1),(2)"
for i in 1 2 3 4; do sqlite3 $FILE "INSERT INTO tab (id) select (a.id+b.id+c.id)*abs(random()%1e7) from tab a, tab b, tab c limit 5e5"; done; 
sqlite3 $FILE "select count(*) from tab;"'

Oder wenn Sie in sqlite CLI sind, dann müssen Sie dies tun:

create table if not exists tab(id int);"
insert into tab values (1),(2);
INSERT INTO tab (id) select (a.id+b.id+c.id)*abs(random()%1e7) from tab a, tab b, tab c limit 5e5;
INSERT INTO tab (id) select (a.id+b.id+c.id)*abs(random()%1e7) from tab a, tab b, tab c limit 5e5;
INSERT INTO tab (id) select (a.id+b.id+c.id)*abs(random()%1e7) from tab a, tab b, tab c limit 5e5;
INSERT INTO tab (id) select (a.id+b.id+c.id)*abs(random()%1e7) from tab a, tab b, tab c limit 5e5;
select count(*) from tab;

Wie funktioniert das? Es macht Gebrauch von der if-Tabelle tab :

id int
------
1
2

dann select a.id, b.id from tab a, tab b gibt zurück.

a.id int | b.id int
------------------
    1    | 1
    2    | 1
    1    | 2
    2    | 2

und so weiter. Nach der ersten Ausführung fügen wir 2 Zeilen ein, dann 2^3=8. (drei, denn wir haben tab a, tab b, tab c )

Nach der zweiten Ausführung fügen wir zusätzliche (2+8)^3=1000 Zeilen

Danach legen wir über max(1000^3, 5e5)=500000 Zeilen und so weiter...

Dies ist die schnellste mir bekannte Methode zum Auffüllen der SQLite-Datenbank.

2 Stimmen

Dies funktioniert nicht, wenn Sie Folgendes einfügen möchten nützlich Daten.

0 Stimmen

@CL. Das stimmt nicht. Sie können es mit zufälligen Daten und IDs mischen, wie Sie wollen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X