【问题标题】:Update sqlite3 database simply简单更新 sqlite3 数据库
【发布时间】:2020-09-14 17:28:00
【问题描述】:

我想以某种方式更新我的数据,以保持其值为 null 的属性与它们在表中一样,并且只更改那些具有新值作为参数的属性。

这是我的请求,当我的对象中有空值时它会向我发送错误:

/* THE OBJECT */

    let chick = { ID: 3, name: null, lastname: 'soup', phone: '60-58-22-12', password: null , mail: 'chicken@gmail.com' }

    /* UPDATE REQUEST */

     this.state._stmt = db.prepare("UPDATE user SET 

        name = CASE WHEN (? = NULL) THEN name ELSE ? END ,

        lastname = CASE WHEN (? = NULL) THEN lastname ELSE ? END  , 

        phone= CASE WHEN (? = NULL) THEN phone ELSE ? END ,

        password = CASE WHEN (? = NULL) THEN password ELSE ? END, 

        mail = CASE WHEN (? = NULL) THEN mail ELSE ? END  

       WHERE ID=? ;");

     this.state._stmt.run(obj.name, obj.name, obj.lastname, obj.lastname , obj.phone, obj.phone, obj.password, obj.password, obj.mail, obj.mail, obj.ID);

/

/* 我得到的错误是:*/

[Error: SQLITE_CONSTRAINT: NOT NULL constraint failed: user.name
Emitted 'error' event on Statement instance at:
] {
  errno: 19,
  code: 'SQLITE_CONSTRAINT'
}

【问题讨论】:

    标签: javascript node.js sqlite


    【解决方案1】:

    我找到了两种方法:

    使用 COALESCE THE SHORTER ONE

    this.state._stmt = db.prepare("UPDATE user SET 
    
            name = COALESCE(?, name) ,
    
            lastname = COALESCE(?, lastname)  , 
    
            phone= COALESCE(?, phone) ,
    
            password = COALESCE(?, password), 
    
            mail = COALESCE(?, mail)  
    
           WHERE ID=? ;
    ");
    

    保留我的请求但更改条件 NULL->'null'

    UPDATE user 
    
    SET name = CASE
    
    WHEN ? != 'null' THEN ?
    
    ELSE  name END
    
    WHERE ID= ? ;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-24
      • 1970-01-01
      • 2012-11-15
      • 2013-11-23
      相关资源
      最近更新 更多