2016-12-02 2 views
3

Я вставляю данные JSON в MariaDB с помощью NodeJs. Ошибка при вводе данных. Пожалуйста, сообщите, какую причину получить ошибку. Фактически Column data1 не имеет пустых или нулевых значений. Почему я становлюсь ниже ошибки?Как вставить данные json в MariaDB с помощью Nodejs?

{ [Error: Column 'data1' cannot be null] code: 1048 } 

Структура таблицы

CREATE TABLE `from_excel` (
    `ID` INT(11) NOT NULL AUTO_INCREMENT, 
    `data1` VARCHAR(50) NULL DEFAULT NULL, 
    `data2` VARCHAR(100) NULL DEFAULT NULL, 
    PRIMARY KEY (`ID`) 
) 
COLLATE='latin1_swedish_ci' 
ENGINE=InnoDB 
; 

код, который я использую для вставки данных.

var Client = require('mariasql'); 
var c = new Client({ 
    host  : 'localhost', 
    user  : 'xxxx', 
    password : 'xxxx', 
    db : 'Metrics' 
}); 




const workbook = xlsx.readFile(__dirname + '/test.xlsx'); 
const worksheet = workbook.Sheets[workbook.SheetNames[0]]; 
var json=xlsx.utils.sheet_to_json(worksheet); 
console.log(json.length); 
     for(var i=0;i<json.length;i++) 
    { 
     var post = {data1: json[i].data1, data2: json[i].data2}; 

     var sql = c.query('INSERT INTO elements_from_excel (data1,data2) VALUES (?,?)', post, function(err, result) { 
      console.log(sql); 
     if(err){console.log(err);} 
      else {console.log("success");} 

    }); 

    } 
    c.end(); 
+0

Вы хотите, чтобы JSON вставлен в виде строки? Или столбцы 'data1' и' data2', в которые вы хотите ввести значения? –

+0

да, нужно вставить json в две колонки таблицы. имя первого столбца data1 и данные второго столбца2. – user2848031

ответ

0

Это должно быть INSERT INTO from_excel VALUES (?), хотя вполне возможно, что вы будете сталкиваться другие ошибки, когда вы исправить это.

+0

Спасибо. Хороший улов! Теперь я получаю {[Ошибка: количество столбцов не соответствует количеству значений в строке 1]: 1136} – user2848031

+0

Это потому, что вы вставляете одно значение, но, видимо, в таблице больше, чем один столбец. Тогда это должно быть 'INSERT INTO from_excel (column_name) VALUES (?)'. Или, если это два столбца, тогда 'INSERT INTO из _excel (data1, data2) VALUES (?,?)' И связывается соответственно. – elenst

+0

Спасибо. Теперь вставляем только значения NULL. Таким образом, я сделал не null в структуре таблицы, и ее выдача ошибки data1 не может быть null] code: 1048.But no null value в столбце data1. Пожалуйста, порекомендуйте. – user2848031

0

Убедитесь, что функция, которую вы вызываете, получает точный тип данных, которые они ожидают.

0

Попробуй так:

var post = {data1: json[i].data1, data2: json[i].data2}; 

var sql = c.query('INSERT INTO elements_from_excel (data1,data2) VALUES (:data1, :data2)', post, function(err, result) { ... }) 

или

var post = [json[i].data1, json[i].data2]; 

var sql = c.query('INSERT INTO elements_from_excel (data1,data2) VALUES (?,?)', post, function(err, result) { 
0

Что могло случиться, что в результате вставки заявление бежится выглядит следующим образом:

INSERT into from_excel (data1, data2) VALUES (`data1` = \'data1value\', `data2` = \'value\', ?) 

Попробуйте заменить строка запроса со следующим:

var post = {data1: json[i].data1, data2: json[i].data2}; 

var sql = c.query('INSERT INTO from_excel SET ?', post, function(err, result) { 
      console.log(sql); 
     if(err){console.log(err);} 
      else {console.log("success");} 
Смежные вопросы