Проверьте, заполнен ли столбец таблицы sqlite3 или нет - PullRequest
0 голосов
/ 27 января 2020

Требование:

  • Проверьте, заполнен ли столбец таблицы sqlite3 или нет, и если он не заполнен, заполните значение.

  • Я предполагаю, что если данные не заполнены в поле, это поле будет иметь значение NULL.

Следующие команды, которые я пробовал, но команды у меня не работают.

УСТАНОВКА ОБНОВЛЕНИЯ = 1 ГДЕ = НУЛЬ -> Не работает

УСТАНОВКА ОБНОВЛЕНИЯ = 1 ГДЕ НУЛЯЕТ -> Не работает

УСТАНОВКА ОБНОВЛЕНИЯ = 1 ГДЕ = 0 - -> Не работает

УСТАНОВКА ОБНОВЛЕНИЯ = 1 ГДЕ = '' -> Не работает

Ниже приведен код c, который я использую:

#include <stdio.h> /* needed for vsnprintf */
#include <stdarg.h> /* needed for va_list */
#include <stdlib.h> /* needed for malloc-free */
#include <string.h>
#include <sqlite3.h>


int main(int argc, char* argv[]) 
{
    sqlite3 *db;
    sqlite3_stmt *stmt;
    char *query = NULL, *zErrMsg = 0, *sql = NULL;
    char name[20] = "SAM";
    int rc, i = 100;


    /* Open database */
    rc = sqlite3_open("test.db", &db);
    if (rc) {
        fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
        while (1);
        return(0);
    }
    else {
        fprintf(stderr, "Opened database successfully..NEW\n");
    }

    /* Create a table */
    rc = sqlite3_exec(db, "create table demo (name text, age integer);", NULL, NULL, &zErrMsg);
    if (rc != SQLITE_OK)
    {
        printf("Error: %s:Unable to create the table\n", zErrMsg);
        while (1);
    }    

    asprintf(&query, "insert into demo (name) values ('%s');", name);
    /* Insert into table */
    sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);                              /* 2 */ 
    if (sqlite3_step(stmt) == SQLITE_ROW)
    {
        printf("Inserted successfully\n");
    }
    if(stmt)
    {
        sqlite3_finalize(stmt);
        stmt = NULL;
    }   

    if(query)
    {
        free(query);
        query = NULL;   
    }

    asprintf(&query, "insert into demo (name, age) values ('%s',%d);", name, i);
    /* Insert into table */
    sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);                              /* 2 */ 
    if (sqlite3_step(stmt) == SQLITE_ROW)
    {
        printf("Inserted successfully\n");
    }
    if(stmt)
    {
        sqlite3_finalize(stmt);
        stmt = NULL;
    }   

    if(query)
    {
        free(query);
        query = NULL;   
    }

    asprintf(&query, "insert into demo (name) values ('%s');", name);
    /* Insert into table */
    sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);                              /* 3 */ 
    if (sqlite3_step(stmt) == SQLITE_ROW)
    {
        printf("Inserted successfully\n");
    }
    if(stmt)
    {
        sqlite3_finalize(stmt);
        stmt = NULL;
    }   

    if(query)
    {
        free(query);
        query = NULL;   
    }

    asprintf(&query, "UPDATE demo SET age = 1 WHERE age = NULL");
    stmt = NULL;
    rc = sqlite3_prepare_v2(db, query, -1, &stmt, 0);
    if (rc == SQLITE_OK)
    {
        printf("sqlite3_prepare_v2:Executed successfully\n");
    }   
    rc = sqlite3_step(stmt);                                                                    /* 3 */
    if (rc != SQLITE_DONE)
    {
        printf("ERROR inserting data: %s\n", sqlite3_errmsg(db));   
    }

    if(stmt)
    {
        sqlite3_finalize(stmt);
        stmt = NULL;
    }   

    if(query)
    {
        free(query);
        query = NULL;   
    }   
    sqlite3_close(db);      
    return 0;
}

Заранее спасибо

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