使用SQLite3在C

时间:2016-11-23 22:00:37

标签: c arrays sqlite char calloc

我很好奇你是否可以将SQL语句的结果存储为单个"字符串"在C.我正在进行一个网络项目,我需要能够查询一个平面中的可用座位数,并让服务器以单个字符串将其返回给客户端。我是一名Java程序员,C语言中缺少字符串真的让我很紧张。

static int callback(void *NotUsed, int argc, char **argv, char **azColName) {
    printf("%s ", argv[0]);
    return 0;
}

static void querySeatsAvailable(sqlite3 *db, int flightNumber) {
    char *zErrMsg = 0;
    int  dbCheck;
    char *sql;

    switch(flightNumber) {
        case 1: 
            sql = "BEGIN TRANSACTION;" \
                "SELECT seat_number FROM plane1 WHERE is_available=1;";
            break;      
    }

    // Execute SQL statement 
    dbCheck = sqlite3_exec(db, sql, callback, 0, &zErrMsg);
    if( dbCheck != SQLITE_OK && dbCheck != SQLITE_BUSY){
        printf("SQL error: %s\n", zErrMsg);
        sqlite3_free(zErrMsg);
    } else {
        printf("SQL executed successfully\n");
    }
}

我目前在SQL查询字符串上使用sqlite3_exec并希望使用callback函数来执行我的脏工作,但我可以轻松地移动使用{{1 }和prepare。回调当前打印到屏幕上的确是我想要放入一个字符串返回给客户端,即`1 2 3 4 5'。

我有更好更坚实的想法如下:

创建一个step指针作为全局变量,当我设置char *str时,将数组的大小设置为平面中已知的席位数,如下所示:sql,然后将每次回调调用分配给str = (char*)calloc(4, sizeof(char));中的空格。回调将改变如下:

str

但是我收到以下警告: int tick = 0; static int callback(void *NotUsed, int argc, char **argv, char **azColName){ str[tick] = argv[0]; tick++; return 0; }

我的另一个想法是使用sprintf打印到缓冲区,然后以某种方式将缓冲区返回给客户端。但是,我不知道如何制作warning: assignment makes integer from pointer without a cast [-Wint-conversion] str[tick] = argv[0]; ^缓冲区或将其转换为字符串,我找不到任何帮助。

ANYWHO,一些帮助会很棒。我在这里碰到了一堵墙。

0 个答案:

没有答案