Просто обновите базу данных sqlite3 - PullRequest
1 голос
/ 27 мая 2020

Я хотел бы обновить свои данные таким образом, чтобы свойства, которые имеют свои значения на 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'
}

1 Ответ

0 голосов
/ 28 мая 2020

Я нашел два способа сделать это:

ИСПОЛЬЗОВАНИЕ 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-> 'нуль'

UPDATE user 

SET name = CASE

WHEN ? != 'null' THEN ?

ELSE  name END

WHERE ID= ? ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...