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.

5voto

XenKid Punkte 161

Ab der Version 3.7.11 unterstützt SQLite das Einfügen mehrerer Zeilen. Richard Kommentare von Hipp:

Ich benutze 3.6.13

Ich befehle so:

insert into xtable(f1,f2,f3) select v1 as f1, v2 as f2, v3 as f3 
union select nextV1+, nextV2+, nextV3+

Bei 50 eingefügten Datensätzen auf einmal dauert es nur eine Sekunde oder weniger.

Es ist wahr, dass die Verwendung von Sqlite zum Einfügen mehrerer Zeilen gleichzeitig sehr gut möglich ist. Von @Andy schrieb.

danke Andy +1

5voto

alex Punkte 479

Das Problem bei der Verwendung von Transaktionen ist, dass Sie die Tabelle auch zum Lesen sperren. Wenn Sie also wirklich viele Daten einfügen und auf Ihre Daten zugreifen müssen, z. B. auf eine Vorschau oder so, funktioniert diese Methode nicht gut.

Das Problem bei der anderen Lösung ist, dass Sie die Reihenfolge der Einfügung verlieren

insert into mytable (col)
select 'c'
union 
select 'd'
union 
select 'a'
union 
select 'b';

In der Sqlite werden die Daten unter a,b,c,d... gespeichert.

4voto

ademar111190 Punkte 13707
INSERT INTO tabela(coluna1,coluna2) 
SELECT 'texto','outro'
UNION ALL 
SELECT 'mais texto','novo texto';

3voto

Vaibhav Saran Punkte 12748

Ich bin in der Lage, die Abfrage dynamisch zu gestalten. Dies ist meine Tabelle:

CREATE TABLE "tblPlanner" ("probid" text,"userid" TEXT,"selectedtime" DATETIME,"plannerid" TEXT,"isLocal" BOOL,"applicationid" TEXT, "comment" TEXT, "subject" TEXT)

und ich erhalte alle Daten über eine JSON Nachdem Sie also alles in eine NSArray Ich habe dies befolgt:

    NSMutableString *query = [[NSMutableString alloc]init];
    for (int i = 0; i < arr.count; i++)
    {
        NSString *sqlQuery = nil;
        sqlQuery = [NSString stringWithFormat:@" ('%@', '%@', '%@', '%@', '%@', '%@', '%@', '%@'),",
                    [[arr objectAtIndex:i] objectForKey:@"plannerid"],
                    [[arr objectAtIndex:i] objectForKey:@"probid"],
                    [[arr objectAtIndex:i] objectForKey:@"userid"],
                    [[arr objectAtIndex:i] objectForKey:@"selectedtime"],
                    [[arr objectAtIndex:i] objectForKey:@"isLocal"],
                    [[arr objectAtIndex:i] objectForKey:@"subject"],
                    [[arr objectAtIndex:i] objectForKey:@"comment"],
                    [[NSUserDefaults standardUserDefaults] objectForKey:@"applicationid"]
                    ];
        [query appendString:sqlQuery];
    }
    // REMOVING LAST COMMA NOW
    [query deleteCharactersInRange:NSMakeRange([query length]-1, 1)];

    query = [NSString stringWithFormat:@"insert into tblPlanner (plannerid, probid, userid, selectedtime, isLocal, applicationid, subject, comment) values%@",query];

Und schließlich lautet die Ausgabeabfrage wie folgt:

insert into tblPlanner (plannerid, probid, userid, selectedtime, isLocal, applicationid, subject, comment) values 
<append 1>
('pl1176428260', '', 'US32552', '2013-06-08 12:00:44 +0000', '0', 'subj', 'Hiss', 'ap19788'),
<append 2>
('pl2050411638', '', 'US32552', '2013-05-20 10:45:55 +0000', '0', 'TERI', 'Yahoooooooooo', 'ap19788'), 
<append 3>
('pl1828600651', '', 'US32552', '2013-05-21 11:33:33 +0000', '0', 'test', 'Yest', 'ap19788'),
<append 4>
('pl549085534', '', 'US32552', '2013-05-19 11:45:04 +0000', '0', 'subj', 'Comment', 'ap19788'), 
<append 5>
('pl665538927', '', 'US32552', '2013-05-29 11:45:41 +0000', '0', 'subj', '1234567890', 'ap19788'), 
<append 6>
('pl1969438050', '', 'US32552', '2013-06-01 12:00:18 +0000', '0', 'subj', 'Cmt', 'ap19788'),
<append 7>
('pl672204050', '', 'US55240280', '2013-05-23 12:15:58 +0000', '0', 'aassdd', 'Cmt', 'ap19788'), 
<append 8>
('pl1019026150', '', 'US32552', '2013-06-08 12:15:54 +0000', '0', 'exists', 'Cmt', 'ap19788'), 
<append 9>
('pl790670523', '', 'US55240280', '2013-05-26 12:30:21 +0000', '0', 'qwerty', 'Cmt', 'ap19788')

die auch gut durch den Code läuft und ich kann alles erfolgreich in SQLite speichern.

Vorher habe ich UNION Abfrage Zeug dynamisch, aber das begann einige Syntaxfehler. Wie auch immer, dies ist gut für mich läuft.

3voto

Ich bin überrascht, dass niemand die folgenden Punkte erwähnt hat vorbereitete Erklärungen . Es sei denn, Sie verwenden SQL für sich und nicht innerhalb einer anderen Sprache, dann würde ich denken, dass vorbereitete Erklärungen eingewickelt in ein Transaktion wäre die effizienteste Art, mehrere Zeilen einzufügen.

1 Stimmen

Vorbereitete Erklärungen sind immer eine gute Idee, haben aber nichts mit der Frage zu tun, die der Antragsteller stellt. Er möchte wissen, wie die grundlegende Syntax für das Einfügen mehrerer Daten in einer Anweisung lautet.

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