LoveUnix » ORACLE等数据库 » 关于BerkeleyDB的问题?请教大家!谢谢
让LU留住您的每

一天 让LU博客留住您的每一天
2005-12-26 11:26 lululu
关于BerkeleyDB的问题?请教大家!谢谢

我使用c++的API,这样使用的:
struct AddressBook

{

    char name[8];

    char number[20];

};



void main()

{
    Db db(NULL,0);
    db.open(NULL,DATABASE,NULL,DB_BTREE,DB_CREATE|DB_THREAD,0664);
    fprintf(stderr,"Open db succeed!\n");

    //save to db
    AddressBook address;
    QString tmpName="aaa";
    unsigned short tmpNameLength=tmpName.length();
    for(int i=0;i<tmpNameLength;i++)
    {
         address.name[i]=tmpName.constref(i);
    }
    address.name[tmpNameLength]='\0';
    QString tmpNumber="111";
    unsigned short tmpNumberLength=tmpNumber.length();
    for(int i=0;i<tmpNumberLength;i++)
    {
         address.number[i]=tmpNumber.constref(i);
    }
    address.number[tmpNumberLength]='\0';

    //put
    Dbt key(address.name,strlen(address.name)+1);
    Dbt data(&address,sizeof(AddressBook)+1);
    int ret=db.put(0,&key,&data,DB_NOOVERWRITE);
    fprintf(stderr,"ret=%d\n",ret);
    db.sync(0);

    db.close(0);

}

报错:Abort,也就是Pag Fault

我试了一下,好象只要我使用Db::put函数将新的记录加入到数据库之后,关闭close或者同步sync操作就会报错,如果把put注释掉就不会报错,或者记录因key重复没有加入成功,也可以正常关闭数据库。



请问是什么原因啊? 谢谢!

页: [1]


Powered by Discuz! Archiver 5.5.0  © 2001-2006 Comsenz Inc.