OCCI错误之ORA-01017: invalid username/password; logon denied

 

occi基本东西我就不讲了,怎么包含头文件啊,加载库文件之类的,网上有很多方法,不在此啰嗦。

这里主要记载一下我遇到的连接不上的错误情况。错误原因见标题:

代码如下:

occiAdapter.h

 1 #ifndef _OCCI_H_
 2 #define _OCCI_H_
 3 
 4 #include <iostream>
 5 #include "occi.h"
 6 #include "boost/shared_ptr.hpp"
 7 using namespace oracle::occi;
 8 using namespace std;
 9 typedef struct database_con
10 {
11     string db_name;
12     string db_username;
13     string db_passwd;
14 
15 }TDBCON;
16 
17 
18 class occiAdapter
19 {
20 public:
21     occiAdapter();
22     ~occiAdapter();
23 public:
24     bool create_connet(Environment::Mode mode = Environment::THREADED_MUTEXED);
25     bool create_connet(const char * db_name,const char * db_username,const char *db_passwd,Environment::Mode mode = Environment::THREADED_MUTEXED);
26     void disConnect();
27     static void set_db_info(string db_name,string username,string db_passwd);
28     Connection * get_connect();
29 
30     bool close_connect();
31 
32     Statement * create_statment(const char * sql_ptr);
33     bool close_statement(Statement* statement);
34     void commit();
35     void rollback();
36 
37 private:
38     static TDBCON m_db_config;
39     static Environment* m_env;
40 
41     Connection * m_connect;
42 
43     char m_error_msg[1024];
44 
45 };
46 
47 
48 #endif

 occiAdapter.cpp

#include "stdafx.h"

#include "occiAdapter.h"

#pragma comment(lib,"D:\\app\\Administrator\\product\\11.2.0\\dbhome_1\\OCI\\lib\\MSVC\\vc9\\oraocci11.lib")

TDBCON occiAdapter::m_db_config;
Environment* occiAdapter::m_env = NULL;
occiAdapter::occiAdapter()
{
    m_env = NULL;
    m_connect = NULL;
    m_error_msg[0] = 0;
}

occiAdapter::~occiAdapter()
{
    this->close_connect();

    m_connect = NULL;
}
Connection * occiAdapter::get_connect()
{
    return m_connect;
}
bool occiAdapter::close_connect()
{
    try
    {
        //如果使用数据库连接池,将获取的连接还给连接池
        if (m_connect != NULL && m_env != NULL)
        {
            m_env->terminateConnection(m_connect);
        }

        m_connect = NULL;
    }
    catch (SQLException &ex)
    {
        memset(m_error_msg, 0, sizeof(m_error_msg));

        sprintf_s(m_error_msg,sizeof(m_error_msg),"DataBase Close Connection Failed. Info:[%s]",ex.what());

        m_connect = NULL;

        return false;
    }
    catch(...)
    {
        m_connect = NULL;

        return false;
    }
    return true;
}

bool occiAdapter::create_connet(Environment::Mode mode /*= Environment::THREADED_MUTEXED*/)
{
    try
    {
        if (m_env == NULL)
        {
            m_env = Environment::createEnvironment(mode);
            if (NULL == m_env)
            {
                return false;
            }
        }

        if (m_connect == NULL)
        {
            m_connect = m_env->createConnection(m_db_config.db_username, m_db_config.db_passwd,m_db_config.db_name);


            if (NULL == m_connect)
            {
                return false;
            }
            cout<<"success connect\n";
        }
    }
    catch (SQLException &ex)
    {
        memset(m_error_msg, 0, sizeof(m_error_msg));
        
        cout<<"ex.what():"<<ex.what();
        sprintf_s(m_error_msg,sizeof(m_error_msg),"DataBase Connection Failed. Info:[%s]", ex.what());

        cout<<"m_error_msg:"<<m_error_msg<<endl;

        return false;
    }
    catch(...)
    {
        return false;
    }

    return true;

}
bool occiAdapter::create_connet(const char * db_name,const char * db_username,const char *db_passwd,Environment::Mode mode /*= Environment::THREADED_MUTEXED*/)
{
    try
    {
        if (m_env == NULL)
        {
            m_env = Environment::createEnvironment(mode);
            if (NULL == m_env)
            {
                return false;
            }
        }

        if (m_connect == NULL)
        {
            m_connect = m_env->createConnection(db_username, db_passwd,db_name);


            if (NULL == m_connect)
            {
                return false;
            }
            //cout<<"connect success\n";
        }
    }
    catch (SQLException &ex)
    {
        memset(m_error_msg, 0, sizeof(m_error_msg));

        sprintf_s(m_error_msg,sizeof(m_error_msg),"DataBase Connection Failed. Info:[%s]", ex.what());

        return false;
    }
    catch(...)
    {
        return false;
    }

    return true;


    return true;
}

void occiAdapter::commit()
{
    try
    {
        if (m_connect)
        {
            m_connect->commit();
        }
    }
    catch (SQLException &ex)
    {
        memset(m_error_msg, 0, sizeof(m_error_msg));

        sprintf_s(m_error_msg,sizeof(m_error_msg), \
            "DataBase RollBack Failed. Info:[%s]",
            ex.what());
    }
    catch(...)
    {
        return ;
    }
    

}

Statement * occiAdapter::create_statment(const char * sql_ptr)
{
    if (m_connect == NULL)
    {
        return NULL;
    }

    try
    {
        if (sql_ptr != NULL)
        {
            return m_connect->createStatement(sql_ptr);
        }
        else
        {
            return m_connect->createStatement();
        }
    }
    catch (SQLException &ex)
    {
        memset(m_error_msg, 0, sizeof(m_error_msg));

        sprintf_s(m_error_msg, sizeof(m_error_msg),\
            "DataBase Create Statement Failed. Info:[%s]",
            ex.what());

        return NULL;
    }
    catch(...)
    {
        return NULL;
    }

}

void occiAdapter::set_db_info(string _db_name,string _username,string _db_passwd)
{
    occiAdapter::m_db_config.db_name = _db_name;
    occiAdapter::m_db_config.db_username = _username;
    occiAdapter::m_db_config.db_passwd = _db_passwd;
}

void occiAdapter::rollback()
{
    try
    {
        if (m_connect)
        {
            m_connect->rollback();
        }
    }
    catch (SQLException &ex)
    {
        memset(m_error_msg, 0, sizeof(m_error_msg));

        sprintf_s(m_error_msg, sizeof(m_error_msg),\
            "DataBase RollBack Failed. Info:[%s]",
            ex.what());
    }
    catch(...)
    {
        return ;
    }
}
bool occiAdapter::close_statement(Statement* statement)
{
    if (statement == NULL || m_connect == NULL)
    {
        return false;
    }

    try
    {
        m_connect->terminateStatement(statement);
    }
    catch (SQLException &ex)
    {
        memset(m_error_msg, 0, sizeof(m_error_msg));

        sprintf_s(m_error_msg,sizeof(m_error_msg),\
            "DataBase Close Statement Failed. Info:[%s]",
            ex.what());

        return false;
    }
    catch(...)
    {
        return false;
    }
    return true;
}

 

main.cpp

main.cpp

#include "stdafx.h"
#include "occiAdapter.h"

int main()
{
    occiAdapter occiObj;
    occiAdapter::set_db_info("127.0.0.1:1521/oracle","djs","123456789");
    occiObj.create_connet();

}

 编译执行:

ex.what():ORA-01017: invalid username/password; logon denied
m_error_msg:DataBase Connection Failed. Info:[ORA-01017: invalid username/passwo
rd; logon denied
]
请按任意键继续. . .

我核对了很多遍用户名和密码,没发现任何问题,然后使用sqlplus工具 以及sqlplus命令连接,都可以连上,这就纳闷儿了,用户名密码都正确啊,怎么就成标题那个错误了呢。

于是,我不使用封装,直接在main.cpp建立连接:

#include "stdafx.h"
//#include "occiAdapter.h"
#include <iostream>
#include "occi.h"
using namespace std;
using namespace oracle::occi;

int main()
{
    //occiAdapter occiObj;
    //occiAdapter::set_db_info("127.0.0.1:1521/oracle","djs","123456789");
    //occiObj.create_connet();
    Environment *env = Environment::createEnvironment(Environment::THREADED_MUTEXED);
    Connection *con =NULL;
    if (env)
    {
        try
        {
            con = env->createConnection("djs","123456789","127.0.0.1:1521/oracle");
            cout<<"connect success\n";
        }
        catch (SQLException e)
        {
            cout<<e.what()<<endl;
        }

        catch (...)
        {
            cout<<"other exception\n";
        }
    }

    env->terminateConnection(con);
    con = NULL;
    Environment::terminateEnvironment(env);
    env =NULL;
    return 0;

}

编译执行发现报下面错误:

ORA-24960: 属性 OCI_ATTR_USERNAME 的长度大于最大允许长度 255
请按任意键继续. . .

 现在开始在网上搜索,该种错误的解决办法,居然是把编译模式改成release

于是试了试,果然连接成功了。

在将代码改成封装模式,使用release编译执行,也连接成功了。

疑问:此处为什么要使用release模式,为什么封装之后报的错误与不封装报的错误不一样?

待高人解决啊!!!

posted on 2015-09-01 22:07  xiaoerbuku  阅读(297)  评论(0)    收藏  举报

导航