原文链接: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技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。