मेरे पास लेबल नामक निम्न वर्ग है:

class Label{
    constructor(imageid, plotid, camera, date, x, y, w, h, id, hash){
      this.imageid = imageid;
      this.plotid = plotid;
      this.camera = camera;
      this.date = date;
      this.x = x;
      this.y = y;
      this.w = w;
      this.h = h;
      this.id = id;
      this.hash = hash
    }
  }

मेरे पास इन क्लास ऑब्जेक्ट्स की एक सूची है जिसे labels कहा जाता है जिसे मैं सम्मिलित करना चाहता हूं, या बल्कि अपने एसक्लाइट डेटाबेस में थोक सम्मिलित करना चाहता हूं, जो निम्न जैसा दिखता है:

Label table in db

मैंने वर्ग वस्तुओं की इस सरणी को सम्मिलित करने का प्रयास किया:

function addRowsToDb(){
    console.log("Adding rows to the db")
    db = new sqlite3.Database('./annotator.db');
    db.serialize(function() {

        var stmt = db.prepare("INSERT INTO Label(ImageID, PlotID, Camera, Date, x, y, w, h, LabelHash) VALUES (?,?,?,?,?,?,?,?,?)");
        labels.forEach((label) => {
            stmt.run(label.imageid, label.plotid, label.camera, label.date, label.x, label.y, label.w, label.h, label.hash);
        })
        stmt.finalize();
    });
    db.close();
}

जिसने मुझे कंसोल में निम्नलिखित त्रुटियां दीं:

ध्यान में न आया त्रुटि: SQLITE_CONSTRAINT: नहीं पूर्ण बाधा विफल: Label.ImageID

ध्यान में न आया त्रुटि: SQLITE_CONSTRAINT: नहीं पूर्ण बाधा विफल: लेबल.LabelHash

क्या कोई मुझे यह बता सकता है कि इसे ठीक से कैसे करें और थोक डेटा के साथ इसे कैसे करें, इसलिए प्रत्येक के लिए लेबल सरणी के साथ नहीं?

0
Brian Barbieri 30 अक्टूबर 2019, 16:57

1 उत्तर

सबसे बढ़िया उत्तर

मुझे लगता है कि त्रुटि बहुत सीधी है - आप NULL मानों को गैर-शून्य डीबी कॉलम (Label.ImageID और Label.LabelHash) में डालने का प्रयास करते हैं।

इसे कैसे हल करें यह इस बात पर निर्भर करता है कि आपके ऐप के लिए सबसे ज्यादा क्या मायने रखता है:

  • उन स्तंभों पर NOT NULL बाधा को हटा दें
  • उन लेबलों को छोड़ दें जिनमें ImageID और LabelHash सेट नहीं हैं
  • ImageID और LabelHash कॉलम के लिए एक डिफ़ॉल्ट मान (उदाहरण के लिए खाली स्ट्रिंग) प्रदान करें
1
Tudor Constantin 30 अक्टूबर 2019, 14:10