2016-12-02 15 views
3

NodeJsを使用してMariaDBにJSONデータを挿入しています。データの挿入中にエラーが発生しました。エラーの原因を教えてください。実際には列data1は空でもnull値でもありません。なぜ私はエラー以下になりますか?私はデータを挿入するために使用していNodejsを使用してMariaDBにjsonデータを挿入するにはどうすればよいですか?

{ [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

はい、テーブルの2つの列にjsonを挿入します。第1列名data1および第2列名data2を含む。 – user2848031

答えて

0

それはあなたがこれを修正するときに他のエラーが発生しただろうということは非常に可能ですが、それは、INSERT INTO from_excel VALUES (?)でなければなりません。

+0

ありがとうございます。いいキャッチ!今では、{[エラー:列数が行1の値と一致しません]コード:1136} – user2848031

+0

これは、1つの値を挿入しているにもかかわらず、表に複数の列があるためです。次に、 'INSERT INTO from_excel(column_name)VALUES(?)'にする必要があります。または、2つの列の場合は、 '_excel(data1、data2)VALUES(?、?)'からINSERT INTOを作成し、それに応じてバインドします。 – elenst

+0

ありがとうございます。 NULL値のみを挿入するようになりました。だから私はテーブル構造でnullではなく、そのエラーを与えるdata1はnull]することはできません:コード:1048.Nutデータ値の列に値。お知らせ下さい。 – 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文があるということです。

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");} 
関連する問題