C语言无法连接Oracle数据库的痛苦经历(c 连接不上oracle)
C语言无法连接Oracle数据库的痛苦经历
作为一名开发者,我们经常会遇到无法连接数据库的情况,但是如果你是用C语言编写数据库应用程序时无法连接Oracle数据库,就会有别样的痛苦。在这篇文章中,我将分享我的痛苦经历以及解决这个问题的方法。
まず、Oracle Instant Client 12.1のインストールを行い、libフォルダにパスを通しました。
接下来,我用C语言尝试连接Oracle数据库时,遇到了以下错误:
“ORA-12514: TNS:リスナーは現在、リクエストされた接続の識別子に対してサービスを提供していません”
这个错我翻译一下,大概就是 “ORA-12514: TNS: Listener does not currently know of service requested in connect descriptor”,也就是说在连接描述符中请求的服务可能还不存在或不可用。
尽管我不确定出现这个错误的原因是什么,但是在我的案例中,我检查了我的tnsnames.ora配置并确认我正在访问正确的数据库服务名称。
接下来,我转向搜索引擎来找到解决方法,发现了一些相关的文章并尝试了几项方法:
– 检查tnsnames.ora的内容是否正确
– 使用sqlplus连接数据库,检查连接是否可以使用
– 确定环境变量ORACLE_HOME是否正确设置
但是,无论我如何尝试,都无法解决这个问题。
最终,我找到了以下方法来解决我的问题。我首先在代码中添加了一些此前没有的错误处理代码来调试问题,以确认程序是否能够找到正确的库路径:
void print_error_and_exit(const char *err_msg) {
fprintf(stderr, “%s\n”, err_msg);
perror(“”);
exit(EXIT_FLURE);
}
int mn(int argc, char **argv) {
OCIEnv *envhp;
if (OCIEnvCreate(&envhp, OCI_THREADED|OCI_OBJECT, (dvoid *)0,
(dvoid * (*)(dvoid *,size_t))0,
(dvoid * (*)(dvoid *, dvoid *, size_t))0,
(void (*)(dvoid *, dvoid *))0, (size_t)0, (dvoid **)0))
print_error_and_exit(“OCIEnvCreate fled”);
exit(EXIT_SUCCESS);
}
然后,我得到了以下错误消息:
OCIEnvCreate fled
Error: No such file or directory
看到这个错误消息后,我意识到我的路径可能存在问题,因此我对我的环境变量进行了一次全面的检查。最终,我发现我的LD_LIBRARY_PATH环境变量中缺少Oracle Instant Client库路径。因此,我将以下命令添加到我的.bashrc文件中:
export LD_LIBRARY_PATH=/path/to/instant/client
运行了这行命令后,我重新运行程序并成功连接Oracle数据库。最终的解决办法是确认环境变量是否被正确设置,并验证应用程序路径是否正确。
这个问题困扰了我很久,但是最终我找到了一个解决方法。如果你曾经遇到类似的问题,请首先检查tnsnames.ora文件是否正确,以及环境变量是否正确设置,如果还是无法解决,那么你可以使用上面的方法来进行调试。