Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用矢量<;字符串>;在OCCI setDataBuffer?_C++_Oracle_Occi - Fatal编程技术网

C++ 如何使用矢量<;字符串>;在OCCI setDataBuffer?

C++ 如何使用矢量<;字符串>;在OCCI setDataBuffer?,c++,oracle,occi,C++,Oracle,Occi,我有一个名为mytable2的简单表,只有一列,名称为varchar2(20)。 现在,我有一个名称列表,存储为std::string的vector,将插入到表中。 我想使用ExecutarrayUpdate,因此必须先执行setDataBuffer。 然而,正如我所看到的,人们总是使用char[][20]来设置数据缓冲区 这让我很头疼,因为这里有两个问题,第一个是从向量到数组的转换,第二个是将字符串转换为字符 首先,我厌倦了使用char[20]的vector,这无法编译。谷歌搜索了一下,他们说

我有一个名为mytable2的简单表,只有一列,名称为varchar2(20)。 现在,我有一个名称列表,存储为std::string的vector,将插入到表中。 我想使用ExecutarrayUpdate,因此必须先执行setDataBuffer。 然而,正如我所看到的,人们总是使用char[][20]来设置数据缓冲区

这让我很头疼,因为这里有两个问题,第一个是从向量到数组的转换,第二个是将字符串转换为字符

首先,我厌倦了使用char[20]的vector,这无法编译。谷歌搜索了一下,他们说vector不能接受char[],所以我把std::string的vector改为char*的vector

第二,我尝试使用“void*p=&names[0]”将向量转换为arrray,正如有些人所说的那样,我们可以将向量用作数组

我使用stmt->setDataBuffer(1,mystring,OCCI_SQLT_STR,20,NULL),程序编译和执行正常,但当我“从mytable2中选择名称”时,它只显示一些奇怪的字符

以前有人有过类似的问题吗?我该怎么办

我的代码如下所示:

    count=2;
    vector<char*> mystring;
    for(int i=0;i<count;i++)
    {
        char my[20];
        strcpy_s(my,"Michael");
        mystring.insert(mystring.end(),my);
             }
    stmt->setDataBuffer(1,&mystring[0],OCCI_SQLT_STR,20,NULL);

    stmt->setBatchErrorMode (true);

    stmt->executeArrayUpdate(count);
count=2;
向量mystring;
for(inti=0;isetDataBuffer(1,&mystring[0],OCCI\u SQLT\u STR,20,NULL);
stmt->setBatchErrorMode(真);
stmt->executeArrayUpdate(计数);

您需要动态创建放入向量中的字符数组,以便它有机会正常工作

我没有使用OCCI,但如果我必须使用要求char[][20]的API,我会给它char[][20]

如果你有向量中的现有数据,为什么不把它复制到2D字符数组中呢

// intialise vector with nonsense
unsigned int const VEC_SIZE = 2 ;
vector<string> v;
for (unsigned int i = 0; i < VEC_SIZE; ++i) {
    stringstream s;
    s << "Jon Paul " << i << endl;
    v.push_back ( s.str() ) ;
}

// create the required 2D char array
unsigned int const STR_LEN = 20 ;
char c [VEC_SIZE][STR_LEN];

// copy the data from the vector of strings to the 2D char array
for (unsigned int i = 0; i < VEC_SIZE; ++i) {
    string s = v[i].substr(0,STR_LEN);
    char const * const cc = s.c_str();      
    unsigned int j = 0;
    for (; j < STR_LEN && j < s.size(); ++j) {
        c[i][j] = cc[j];
    }
    c[i][ j==STR_LEN ? 20 : j ] = 0; // write NULL character
}
//用无意义初始化向量
无符号整数常量向量大小=2;
向量v;
for(无符号整数i=0;i非常感谢您的回答。非常感谢您的回答。我将包装用于查询、插入、删除和更新表(任意表)的OCCI函数然后,程序就应该自动读取模式,生成SQL并插入到Oracle中。我曾经在OPN.NET中使用过,但是我希望我的程序性能高,所以我再把C++中的所有东西都写出来,包括算法、数据库、WebService等。o编写一些函数将这些向量转换成类似于char *的东西?是的。你可以通过让你的转换函数也调用OCI来让你的生活更容易。在开始所有这些之前,我想知道C++中重新实现所有的东西会使事情变得更快。你需要一些分析BOT的方法。你现有的.Net代码中有高领毛衣。如果我不知道字符串的最大大小怎么办?@Arkady什么字符串的最大大小?如果你问的是OCCI,我对它不熟悉,你最好问一个新问题