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
热门帖子
- 12025-12-01浏览数:182759
- 22023-05-09浏览数:25049
- 42023-09-25浏览数:18521
- 52020-05-11浏览数:17526