2016-07-15 4 views
-1

Мне нужно вставить 10 строк в таблицу sqlite3, и как только вставки будут выполнены, передайте 10 идентификаторов новых строк функции обратного вызова в массиве.Как выполнить объемную вставку с использованием sqlite3 в node.js?

Моя проблема заключается в том, что я не могу понять, как сделать подготовленный оператор выполнять несколько вставок сразу. Я нашел этот пост о том, как это сделать с помощью mySQL.

Bulk Inserts in mySQL

Но это не работает с SQLite. Мой код ниже:

params = [[1,2],[3,4],[5,6],[7,8]] 

stmt = db.prepare("INSERT INTO test (num1, num2) VALUES (?)"); 
stmt.all([params], function(err, res) { 
    if(err) { 
     console.log(err); 
     return; 
    } else { 
     createdIDs = [] 
     for (i in result) { 
      createdIDs.push(result[i].id); 
     } 
     nextFunction(createdIDs); 
    } 
}); 

который дает следующее сообщение об ошибке:

Error: SQLITE_ERROR: 1 values for 2 columns 
at Error (native) 

схема стола, как это:

Edit: Используя решение Альваро, теперь я получаю эту ошибку сообщение:

{ [Error: SQLITE_CONSTRAINT: NOT NULL constraint failed: test.num1] errno: 19, code: 'SQLITE_CONSTRAINT' } 
+0

вы уверены, что вы сделали так же, как ответ? –

+0

@AlvaroJoao Да, код должен быть таким же, как этот другой ответ. Разница в том, что я использую sqlite3, а не mysql –

+0

просто ответил на ваш вопрос ... PLS upvote и отметьте как правильный ответ, если я помог вам –

ответ

1

Вы h пр перечислить значения в порядке их появления:

stmt = db.prepare("INSERT INTO test (num1, num2) VALUES (?1,?2)");

Вот почему только одна переменная обнаружена вместо ожидаемого два.

Ссылка here.

Еще один способ сделать это:

var mode = process.argv[2], runs = "100"; 
db.serialize(function() { 
    db.run("begin transaction"); 
    db.run("drop table if exists data"); 
    db.run("create table data (value integer)"); 
    var stmt = db.prepare("insert into data values (?)"); 
    // Three different methods of doing a bulk insert 
    for (var i = 0; i < runs; i++) { 
      db.run("insert into data values (?)", i); 
      process.exit(1); 
     } 
    } 
    db.run("commit"); 
}); 

ссылка: https://gist.github.com/NelsonMinar/2db6986d5b3cda8ad167

GitHub относятся: https://gist.github.com/NelsonMinar/2db6986d5b3cda8ad167

+0

Хм. Кажется, все еще работает, но теперь у меня есть отдельная ошибка. Значения, которые я вставляю, имеют ограничение NOT NULL, которое не срабатывает при вставке. Делает мне то, что переход в [params] работает неправильно. –

+0

@JohnPalmer Я почти уверен, что код в порядке, вы должны напечатать новую ошибку после? 1,? 2 Я думаю, что смогу помочь –

+0

Да, на основании этой ссылки ссылка выглядит неправдой. Вы можете привязывать значения отдельно, но вы не можете передать массив со значениями для нескольких вставок. –

 Смежные вопросы

  • Нет связанных вопросов^_^