OCI编程,像这样子参数怎么传递 std::string user = "test"; std::string password = "test"; std::string conn_str = "192.168.10.2:21001/window"; 怎么登录oracle数据库
时间: 2024-02-22 14:56:40 浏览: 61
使用OCI访问Oracle数据库。包含基本的数据库连接、访问、更新等操作
3星 · 编辑精心推荐
在OCI编程中,可以使用OCILogon2函数来连接Oracle数据库。对于std::string类型的参数,可以使用c_str()方法获取其C风格的字符串表示,然后传递给OCILogon2函数。具体来说,可以按以下步骤进行登录:
1. 创建OCI环境句柄和错误句柄,如下所示:
```
OCIEnv* envhp;
OCIError* errhp;
int res = OCIEnvCreate(&envhp, OCI_DEFAULT, (void*)0, (void*(*)(void*,size_t))0,
(void*(*)(void*,void*,size_t))0, (void(*)(void*,void*))0,
(size_t)0, (void**)0);
if (res != OCI_SUCCESS) {
// 处理错误
}
res = OCIHandleAlloc((void*)envhp, (void**)&errhp, OCI_HTYPE_ERROR, (size_t)0, (void**)0);
if (res != OCI_SUCCESS) {
// 处理错误
}
```
2. 调用OCILogon2函数连接到Oracle数据库,如下所示:
```
OCISvcCtx* svchp;
OCIAuthInfo* authhp;
OCIConnection* connp;
std::string user = "test";
std::string password = "test";
std::string conn_str = "192.168.10.2:21001/window";
res = OCILogon2(envhp, errhp, &svchp, &authhp,
(OraText*)user.c_str(), user.length(),
(OraText*)password.c_str(), password.length(),
(OraText*)conn_str.c_str(), conn_str.length(),
OCI_DEFAULT);
if (res != OCI_SUCCESS) {
// 处理错误
}
```
在OCILogon2函数中,第一个参数是OCI环境句柄,第二个参数是错误句柄,第三个参数是服务上下文句柄,第四个参数是身份验证句柄,第五个参数是用户名,第六个参数是用户名长度,第七个参数是密码,第八个参数是密码长度,第九个参数是连接字符串,第十个参数是连接字符串长度,最后一个参数是连接属性。在这里,我们传递了OCI_DEFAULT作为连接属性,表示使用默认值。
3. 创建OCI连接句柄,如下所示:
```
res = OCIHandleAlloc((void*)envhp, (void**)&connp, OCI_HTYPE_CONNECTION, (size_t)0, (void**)0);
if (res != OCI_SUCCESS) {
// 处理错误
}
```
4. 将服务上下文句柄设置到连接句柄中,如下所示:
```
res = OCIAttrSet((void*)connp, OCI_HTYPE_CONNECTION, (void*)svchp, (ub4)0, OCI_ATTR_SERVER, errhp);
if (res != OCI_SUCCESS) {
// 处理错误
}
```
5. 使用OCI连接句柄进行数据库操作,如下所示:
```
OCIStmt* stmthp;
res = OCIHandleAlloc((void*)envhp, (void**)&stmthp, OCI_HTYPE_STMT, (size_t)0, (void**)0);
if (res != OCI_SUCCESS) {
// 处理错误
}
res = OCIStmtPrepare(stmthp, errhp, (OraText*)"SELECT * FROM table1", strlen("SELECT * FROM table1"),
OCI_NTV_SYNTAX, OCI_DEFAULT);
if (res != OCI_SUCCESS) {
// 处理错误
}
res = OCIStmtExecute(svchp, stmthp, errhp, 0, 0, 0, 0, OCI_DEFAULT);
if (res != OCI_SUCCESS) {
// 处理错误
}
...
```
需要注意的是,还需要对OCI函数的返回值进行错误处理,以确保程序的正确性。
阅读全文