qq_58459546 2023-11-25 15:16 采纳率: 0%
浏览 1

网编中,sqlite3_exec函数发送问题。

这两天写了一个小项目,但是出现了一点小问题,在线请求各位大咖不吝赐教。
服务器端查找所有信息,并把查到的信息发送到客户端


//全部查询的回调函数
int callback(void * prama,int f_num,char * f_value[],char * f_name[])
{
    int newfd = *(int *)prama;
    int i=0;
    char buf[1000] = {'\0'};
    //列名
    for(i=0;i<f_num-1;i++)
    {
        printf("%20s",f_name[i]);

    }
    printf("\n");
    //列值
    for(i=0;i<f_num;i++)
    {
        printf("%20s",f_value[i]);
        sprintf(buf+strlen(buf), "%15s", f_value[i]);
    }
    printf("\n");
    usleep(100);
    //发送给客户端
    int n = send(newfd, buf, strlen(buf), 0);
    printf("回调函数发送,n = %d\n", n);
    if(n < 0)
    {
        perror("send error");
        return -1;
    }
    bzero(buf,sizeof(buf));
    //printf("select_all ok!\n");
    return 0;
}

//全部查询
int select_all(int newfd, sqlite3 * mydb,const char * tbname)
{
    char end[10] = {'\0'};
    strcpy(end, "over"); 
    char sql[100] = {'\0'};
    sprintf(sql,"select * from %s",tbname);
    printf("%s\n",sql);
    int ret=0;
    char * errmsg=NULL;
    //参数3:函数指针,函数名可以随意取,但函数类型必须一直
    ret=sqlite3_exec(mydb, sql, callback, &newfd, &errmsg);
    if(ret!=SQLITE_OK)
    {
        printf("select error:%s\n",errmsg);
        return -1;
    }
    sleep(1);
    //发送结束命令
    int n = send(newfd, end, strlen(end), 0);
    printf("all select over = %d\n", n);
    if(n < 0)
    {
        perror("send error");
        return -1;
    }
    return 0;
}

客户端收服务器发过来的消息,并打印出来

//编写一子函数,实现查看所有医生信息
//参数1:newfd套接字
//返回值:成功返回0,失败返回-1
int select_doctors(int newfd)
{
    
    char buf[1000]= {'\0'};
    printf("All doctors are as follow\n");
    //接受服务器发送的doctor表,并打印
    while(1)
    {
        int n = recv(newfd, buf, sizeof(buf) ,0);
        printf("select_doctors n = %d\n", n);
        if(n < 0)
        {
            perror("send error");
            return -1;
        }
        printf("\n%s\n",buf);
        int i = 0;
        if(strncasecmp(buf, "over", 4) == 0) {
            break;//接受到结束的,结束循环
        }
    }
    return 0;
}

img

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-11-25 18:55
    关注

    【以下回答由 GPT 生成】

    您好,谢谢您提供的问题描述。关于您遇到的问题以及如何优化或改进代码,我需要您提供更多的细节才能给出更准确的建议。以下是一些针对可能的问题和改进方面的一般性建议。

    1. "您的代码中似乎使用了sqlite3_exec函数来实现这一目的":如果您在服务器端使用sqlite3_exec函数执行SQL查询,可以考虑使用sqlite3_prepare_v2来编译和绑定SQL查询语句,然后使用sqlite3_step逐行获取结果并将其发送到客户端。这可以提供更好的可控性和安全性。

    2. "查找所有信息并将查找到的信息发送到客户端":如果您需要将大量数据从服务器发送到客户端,您可以考虑使用分页的方式来获取数据,以减少一次性发送大量数据所带来的负担。可以使用LIMIT和OFFSET子句来控制每次查询的数据量,并在客户端通过分批处理的方式获取完整结果集。

    请提供更多关于您问题的具体细节,例如: - 您在使用sqlite3_exec函数时遇到了什么样的问题或困难? - 代码中是否存在性能问题或潜在的安全风险? - 您希望的优化方向是什么?例如,更好的性能、更好的安全性、更好的可维护性等。

    提供这些信息将帮助我更好地理解您的问题,并能给出更准确的建议。感谢您的合作!



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 11月25日

悬赏问题

  • ¥15 osm下载到arcgis出错
  • ¥15 Dell g15 每次打开eiq portal后3分钟内自动退出
  • ¥15 大二软件工程基础大题
  • ¥200 使用python编写程序,采用socket方式获取网页实时刷新的数据,能定时print()出来就行。
  • ¥15 matlab如何根据图片中的公式绘制e和v的曲线图
  • ¥15 我想用Python(Django)+Vue搭建一个用户登录界面,但是在运行npm run serve时报错了如何解决?
  • ¥15 QQ邮箱过期怎么恢复?
  • ¥15 登录他人的vue项目显示服务器错误
  • ¥15 (标签-android|关键词-app)
  • ¥15 comsol仿真压阻传感器