GBase 8s
其他
文章

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

发表于2026-05-27 13:56:3076次浏览32个评论

今天,我们来说说 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 过程中遇到过哪些棘手的错误场景?是如何解决的?欢迎在评论区分享你的经验,或提出疑问与大家一起探讨!

评论

登录后才可以发表评论
GBase用户19279发表于 2个月前
11
深蓝之波发表于 2个月前
11
GBase用户50900发表于 2个月前
00:15:29 总结得很到位,学习。
GBase用户51966发表于 2个月前
00:15:32 好文章,支持一下!
GBase用户51511发表于 2个月前
00:16:38 写得很好,学习了!
GBase用户51510发表于 2个月前
00:16:40 写得很好,学习了!
塔山发表于 2个月前
00:16:40 干货满满,感谢楼主分享。
佛洛伊得发表于 2个月前
00:16:42 感谢分享,非常有帮助。
一个老汉发表于 2个月前
00:16:43 非常实用的内容,收藏了。
GBase用户21143发表于 2个月前
优秀
GBase用户21143发表于 2个月前
很好
用户头像
GBase用户28017发表于 2个月前
优秀
GBase用户19279发表于 2个月前
GBase用户50900发表于 2个月前
00:15:14 好文章,支持一下!
GBase用户51966发表于 2个月前
00:15:15 好文章,支持一下!
GBase用户51510发表于 2个月前
00:16:24 好文章,支持一下!
GBase用户51511发表于 2个月前
00:16:25 非常实用的内容,收藏了。
塔山发表于 2个月前
00:16:25 总结得很到位,学习。
一个老汉发表于 2个月前
00:16:27 好文章,支持一下!
佛洛伊得发表于 2个月前
00:16:31 分析得很透彻,学习了。
GBase用户51829发表于 2个月前
总结很好,收藏了,谢谢分享
GBase用户51829发表于 2个月前
字符集不匹配导致中文乱码、预处理语句参数绑定失败,这类问题排查周期长、日志不直观。
GBase用户51829发表于 2个月前
高并发下连接池复用异常、游标未正常释放引发句柄泄漏,最终导致数据库连接耗尽。
GBase用户51829发表于 2个月前
GSDK 客户端与服务端字符集不一致,导致插入或查询中文乱码,预处理 SQL 绑定变量类型不匹配时报错模糊,难以快速定位。
GBase用户51829发表于 2个月前
高并发场景下连接未正常释放、事务未提交或回滚,造成 GSDK 句柄泄漏,最终出现连接数超限、无法新建会话的问题。
GBase用户21143发表于 2个月前
很好!
GBase用户47954发表于 2个月前
感谢作者的精彩分享!
GBase用户19279发表于 2个月前
1
GBase用户19279发表于 2个月前
2
GBase用户19279发表于 2个月前
3
GBase用户19279发表于 2个月前
4
GBase用户19279发表于 2个月前
5