Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.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++中的字符串和字符串 我是一个java开发者,但我必须在C++中开发应用程序。_C++_Database_String_Oracle_Char - Fatal编程技术网

C++中的字符串和字符串 我是一个java开发者,但我必须在C++中开发应用程序。

C++中的字符串和字符串 我是一个java开发者,但我必须在C++中开发应用程序。,c++,database,string,oracle,char,C++,Database,String,Oracle,Char,我只想从数据库中读取一些数据,并将其设置为: struct Line{ char* pdf1; char* pdf2; char* ident; char* reportpath ; }; 我有这个方法: void DBConnect() { char* pdf1; char* pdf2; SAConnection con; lines=0; page[lines] = new Line(); SACommand

我只想从数据库中读取一些数据,并将其设置为:

struct Line{
    char* pdf1;
    char* pdf2;
    char* ident;
    char* reportpath ;
};
我有这个方法:

void DBConnect()
{
    char* pdf1;
    char* pdf2;
    SAConnection con;
    lines=0;
    page[lines] = new Line();

    SACommand cmd(&con,"select from pdf where rownum<3 ");
    try
    {
        // connect to database (Oracle in our example)
        con.Connect("DB", "user", "password", SA_Oracle_Client);
        // Select from our test table
        cmd.Execute();
        // fetch results row by row and print results
        page[lines]->pdf1="PDF_CM";
        page[lines]->pdf2="PDF_LATEST";
        lines++;

        char *c1=new char(CELLSIZE);
        char *c2=new char(CELLSIZE);
        while(cmd.FetchNext())
        {
            page[lines] = new Line();
            string s1=cmd.Field("org_doc").asString();
            string s2=cmd.Field("rev_doc").asString();
            size_t t1=s1.find("text1");
            size_t t2=s2.find("text1");
            s1.replace(t1,std::string("text1").length(),"text2");
                s2.replace(t2,std::string("text1").length(),"text2");
            c1=new char(s1.size()+1);
            c2=new char(s2.size()+1);
            std::copy(s1.begin(), s1.end(), c1);
            std::copy(s2.begin(), s2.end(), c2);
            c1[s1.size()]='\0';
            c2[s2.size()]='\0';


            page[lines]->pdf1 =c1; 
            page[lines]->pdf2 =c2;
            s1.erase();
            s2.erase();
            ++lines;

        }
        con.Commit();
        con.Disconnect();
    }
    catch(SAException &x)
    {
        try
        {
            con.Rollback();
        }
        catch(SAException &)
        {
        }
        printf("%s\n", (const char*)x.ErrText());
    }
}

但是我不知道错误是什么,因为我正在使用插件:

sql字符串看起来可疑,不是吗

select * from pdf where rownum<3

如果您试图访问在这种情况下不存在的字段org\u doc,实际的sql命令可能会返回一个包含零列的表,这将导致错误。

sql字符串看起来可疑,不是吗

select * from pdf where rownum<3

<>实际的SQL命令可能返回一个零列的表,如果您试图访问字段OrgODoc,那么它将出现错误,否则将不存在。

< P>除此之外,这不是正确的C++。它是C和C++代码的混合。 如果您只是用适当的std::strings替换char*成员,您将消除一系列问题,例如错误地分配char缓冲区


<> P>这是,你的第一步应该是完全消除你的代码中的char和新,并使用STD::String和AutoStor代替.< /P> < P>除了其他所有的东西,这不是正确的C++。它是C和C++代码的混合。 如果您只是用适当的std::strings替换char*成员,您将消除一系列问题,例如错误地分配char缓冲区

也就是说,您的第一步应该是完全从代码中删除char*和new,并使用std::string和自动存储。

查看SACommand的文档,SAString和string似乎是不相关的类型。SACommand是MFC样式的字符串,需要访问底层缓冲区才能将其用作字符串类型对象

如果SAChar类型被定义为常规字符,则可以执行以下操作

string s1 = cmd.Field("org_doc").AsString().GetBuffer(min_length);
浏览一下SACommand的文档,似乎SAString和string是不相关的类型。SACommand是MFC样式的字符串,需要访问底层缓冲区才能将其用作字符串类型对象

如果SAChar类型被定义为常规字符,则可以执行以下操作

string s1 = cmd.Field("org_doc").AsString().GetBuffer(min_length);