南大通用GBase 8s GSDK 错误处理与调试

0 阅读2分钟

原文链接:www.gbase.cn/community/p…
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。

今天,我们来说说 GCI 错误码体系,分享一套标准的错误处理代码模板,帮助大家构建健壮的应用程序。

错误码与错误信息

GCI 错误主要分为两类:

  • GCI 错误:由 GCI 函数调用返回的错误。小于900000的错误代码表明是GCI侧运行时产生的报错信息。 
    GCI_SUCCESS (0):操作成功
    GCI_SUCCESS_WITH_INFO (1):成功但有警告信息
    GCI_ERROR (-1):发生错误
    GCI_NEED_DATA (99):需要更多数据
    GCI_NO_DATA (100):没有数据

  • 数据库错误:SQL 语句执行时数据库返回的错误。大于900000的错误码表明是Server报错信息,需减900000后结合Server错误码查看。 Server错误码不区分正负值,取绝对值即可。

     

获取详细错误信息

使用GCIErrorGet获取gci操作失败的错误信息

static void checkerr(GCIError *errhp, int rc)
{
   GCItext errbuf[ERRMSG_LEN];
   ub4 buflen;
   sb4 errcode;
   sb1 errstate[256] = {0};
   if(rc == GCI_SUCCESS) return;
   switch (rc)
   {
       case GCI_SUCCESS_WITH_INFO:
           printf("Error - GCI_SUCCESS_WITH_INFO\n");
           break;
       case GCI_NEED_DATA:
           printf("Error - GCI_NEED_DATA\n");
           break;
       case GCI_NO_DATA:
           printf("Error - GCI_NO_DATA\n");
           break;
       case GCI_ERROR:
           GCIErrorGet(errhp, 0, errstate, &errcode, errbuf, ERRMSG_LEN, GCI_HTYPE_ERROR);
           fprintf(stdout, "Error code ----- %d\nError state ---- %s\nError message -- %s\n", errcode, errstate, errbuf);  
           break;
       case GCI_INVALID_HANDLE:
           printf("Error - GCI_INVALID_HANDLE\n");
           break;
       case GCI_STILL_EXECUTING:
           printf("Error - GCI_STILL_EXECUTING\n");
           break;
       case GCI_CONTINUE:
           printf("Error - GCI_CONTINUE\n");
           break;
       default:
           printf("Error - %d\n", rc);
           break;
   }
}

以上,掌握错误码分类规则、善用  GCIErrorGet  获取详细信息,并配合标准的  checkerr  函数模板,能够让你在开发中事半功倍。特别提醒大家注意:数据库错误码需减去 900000 后查看,这是定位 Server 端问题的关键一步。你在使用 GSDK 过程中遇到过哪些棘手的错误场景?是如何解决的?欢迎在评论区分享你的经验,或提出疑问与大家一起探讨!

原文链接:www.gbase.cn/community/p…
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。