我很好奇你是否可以将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,一些帮助会很棒。我在这里碰到了一堵墙。