C++ 如何使用矢量<;字符串>;在OCCI setDataBuffer?
我有一个名为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中选择名称”时,它只显示一些奇怪的字符 以前有人有过类似的问题吗?我该怎么办 我的代码如下所示:C++ 如何使用矢量<;字符串>;在OCCI setDataBuffer?,c++,oracle,occi,C++,Oracle,Occi,我有一个名为mytable2的简单表,只有一列,名称为varchar2(20)。 现在,我有一个名称列表,存储为std::string的vector,将插入到表中。 我想使用ExecutarrayUpdate,因此必须先执行setDataBuffer。 然而,正如我所看到的,人们总是使用char[][20]来设置数据缓冲区 这让我很头疼,因为这里有两个问题,第一个是从向量到数组的转换,第二个是将字符串转换为字符 首先,我厌倦了使用char[20]的vector,这无法编译。谷歌搜索了一下,他们说
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,我对它不熟悉,你最好问一个新问题