免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: ffmaomao
打印 上一主题 下一主题

[C++] C++连接oracle必须安装客户端吗? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2008-05-15 11:24 |只看该作者
关键是要搞清楚occi连接串格式,给你一个连接示例:

ez_bool_t CDBManager_oracle::OnDBOpen(const char *dbname,
                                         const char *ip,
                                         const char *port,
                                         const char *username,
                                         const char *password,
                                         const char *charset)
{
        char connectString[256];
       
        //the connect string parameter format is 'host:port/database'.
        snprintf(connectString, sizeof(connectString), "%s:%s/%s", ip, port, dbname);
        try {
                if (charset && strlen(charset) > 0)
                        m_Env = Environment::createEnvironment(charset, "UTF8", Environment::OBJECT);
                else
                        m_Env = Environment::createEnvironment(Environment::OBJECT);
                m_Conn = m_Env->createConnection(username, password, connectString);
                m_Stmt = m_Conn->createStatement();
                m_Stmt->setAutoCommit(TRUE);
        } catch (SQLException &e) {
                SetErrMsg("%d: %s", e.getErrorCode(), e.getMessage().c_str());
                if (m_Stmt) m_Conn->terminateStatement(m_Stmt);
                if (m_Conn) m_Env->terminateConnection(m_Conn);
                   if (m_Env) Environment::terminateEnvironment(m_Env);
                return FALSE;
        }
       
        try {
                m_Stmt->setSQL("ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD HH24:MI:SS'");
            m_Stmt->executeUpdate();
            m_Stmt->setSQL("ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS'");
            m_Stmt->executeUpdate();
        } catch (SQLException &e) {
                SetErrMsg("%d: %s", e.getErrorCode(), e.getMessage().c_str());
                if (m_Stmt) m_Conn->terminateStatement(m_Stmt);
                if (m_Conn) m_Env->terminateConnection(m_Conn);
                   if (m_Env) Environment::terminateEnvironment(m_Env);
                return FALSE;
        }
       
    return TRUE;
}

论坛徽章:
0
12 [报告]
发表于 2008-05-15 11:39 |只看该作者
首先谢谢eagle518
      我照例子做了 。。。
      不过,还是老问题:
                      Error while trying to retrieve text for error ORA-32101
                      Segmentation fault
      我认为是在Environment::createEnvironment(Environment::OBJECT);这里出了错误。
      不知道这个Environment要事先配置些什么东西。。。。。

论坛徽章:
0
13 [报告]
发表于 2008-05-15 12:04 |只看该作者
倒腾了一下,好像在
   Error while trying to retrieve text for error ORA-32101
   Segmentation fault
中,“Segmentation fault”是因为Environment对象没有创建,但是在程序尾部把它关闭掉了。所以出了这个错误。。。
终于找到问题了:
    Environment对象的创建是不是事先需要什么环境变量或者什么配置文件?

论坛徽章:
0
14 [报告]
发表于 2008-05-15 13:15 |只看该作者

LD_LIBRARY_PATH

兄弟有没有设置
LD_LIBRARY_PATH_32
LD_LIBRARY_PATH_64
这2个环境变量??
一般的
env = Environment:: createEnvironment(Environment:EFAULT);
是没有问题的 。
或者DEFAULT实在不行,那你就换换别的看看。

论坛徽章:
0
15 [报告]
发表于 2008-05-15 13:28 |只看该作者
原帖由 initadmin 于 2008-5-15 13:15 发表
兄弟有没有设置
LD_LIBRARY_PATH_32
LD_LIBRARY_PATH_64
这2个环境变量??
一般的
env = Environment:: createEnvironment(Environment:EFAULT);
是没有问题的 。
或者DEFAULT实在不行,那你就换换别 ...


只设置了LD_LIBRARY_PATH变量
这两个也要吗?
LD_LIBRARY_PATH_32
LD_LIBRARY_PATH_64
怎么设置啊?

论坛徽章:
0
16 [报告]
发表于 2008-05-15 16:25 |只看该作者
终于环境配好了,但是又出了这个错误了。。。
!!! WARNING !!! --> libstdc++-2.2.5-stub.so

This is a stub library which can be used for linking only.  It must *not*
be used as a runtime library.  Please make sure this library is not found
in LD_LIBRARY_PATH.

查了查,不知道怎么回事。。。
听说是缺少一个.so
哪位好心的大哥能告诉我啊?

论坛徽章:
0
17 [报告]
发表于 2008-05-15 19:43 |只看该作者
终于有了一点结果了。。。
在这里总结一下,希望对其他有点用处:
使用occi连接oracle步骤:
第一步:去oracle官方网站下载即时客户端。。。最好附带下几个examples(客户端一般下载最新版本的,因为它都是向下兼容的)

第二步:解压缩,如果是linux系统的话配置变量LD_LIBRARY_PATH到刚刚解压的目录,
            有时候要把几个.so文件放到/usr/lib 目录下面,这样的话可以不配置LD_LIBRARY_PATH,
            把带版本号的加个链接,让其结尾为.so,然后就可以使用了。

第三步:写自己的occi Application (这个时候刚刚那些examples就可以大派用场了)
            这里,一般都是不配置sqlnet.ora和tnsnames.ora文件的(至少我没有, 我比较懒)
            连接属性在connectString里面直接配置,格式是:  //host:port/sid   即可了。
            
第四步:enjoy it吧。。。

补充一点,occi和jdbc的感觉用起来差不多的。。。
用管了jdbc的话,occi应该很容易上手。。

以上纯属自己瞎总结。。希望有高手补充不足,指出错误。。。。

[ 本帖最后由 ffmaomao 于 2008-5-17 06:39 编辑 ]

论坛徽章:
0
18 [报告]
发表于 2008-05-15 23:05 |只看该作者

恭喜兄弟

恭喜兄弟,。。。

论坛徽章:
0
19 [报告]
发表于 2008-05-16 11:01 |只看该作者
有时候还是有这样的错误:

!!! WARNING !!! --> libaio-2.2.5-stub.so

This is a stub library which can be used for linking only.  It must *not*
be used as a runtime library.  Please make sure this library is not found
in LD_LIBRARY_PATH.


连connection都创建不了。。。
郁闷啊~~~~
有谁知道怎么解决的啊!~~~

[ 本帖最后由 ffmaomao 于 2008-5-16 11:49 编辑 ]

论坛徽章:
0
20 [报告]
发表于 2008-05-16 12:09 |只看该作者
到我网站 http://www.ezdbc.com  上去下载oracle即时客户端吧(已经精减过了),oralce官方新版已经要求安装aio包了。

http://www.ezdbc.com/counter.asp?id=ORACLE_10.tar.gz
下载后解压,ORACLE目录下的文件即为 oracle即时客户端 所需文件。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP