📄 berkeley db for c 使用手册.htm
字号:
<h3>公告</h3>
<span id="SubscriptionList"><h3 class="listtitle">订阅博客</h3><ul class="list"><li class="listitem"><a href="http://blog.csdn.net/muyannian/Rss.aspx" ><img border="0" alt="XML聚合" src="/images/xml.gif" /></a> <a href="http://feeds.feedsky.com/csdn.net/muyannian" target="_blank"><img border="0" alt="FeedSky" src="/images/feedsky.gif" /></a></li></ul></span>
<span id="RecentVisitors"></span>
<h3 class="listtitle">文章</h3>
<ul class="list"><li class="listitem"><a href="http://blog.csdn.net/muyannian/category/324788.aspx">BDB</a><a href="http://blog.csdn.net/muyannian/category/324788.aspx/rss">(RSS)</a></li><li class="listitem"><a href="http://blog.csdn.net/muyannian/category/325965.aspx">算法</a><a href="http://blog.csdn.net/muyannian/category/325965.aspx/rss">(RSS)</a></li><li class="listitem"><a href="http://blog.csdn.net/muyannian/category/341356.aspx">职场 </a><a href="http://blog.csdn.net/muyannian/category/341356.aspx/rss">(RSS)</a></li></ul><h3 class="listtitle">收藏</h3>
<ul class="list"><li class="listitem"><a href="http://blog.csdn.net/muyannian/category/324784.aspx">BDB</a></li><li class="listitem"><a href="http://blog.csdn.net/muyannian/category/324785.aspx">javascript</a></li><li class="listitem"><a href="http://blog.csdn.net/muyannian/category/324783.aspx">lucene</a></li><li class="listitem"><a href="http://blog.csdn.net/muyannian/category/324787.aspx">工作</a></li><li class="listitem"><a href="http://blog.csdn.net/muyannian/category/324786.aspx">生活</a></li><li class="listitem"><a href="http://blog.csdn.net/muyannian/category/341355.aspx">职场生涯</a></li></ul><h3 class="listtitle">相册</h3><!--category title-->
<ul class="list"></ul><h3 class="listtitle">个人连接</h3>
<ul class="list"><li class="listitem"><a href="http://you.video.sina.com.cn/muyannian" target="_self">我的播客</a></li><li class="listitem"><a href="http://www.sina.com.cn/muyannian" target="_self">我的新浪博客</a></li></ul><h3 class="listtitle">存档</h3>
<ul class="list"><li><a href="/muyannian/archive/2007/12.aspx">2007年12月(4)</a></li><li><a href="/muyannian/archive/2007/11.aspx">2007年11月(2)</a></li><li><a href="/muyannian/archive/2007/10.aspx">2007年10月(1)</a></li><li><a href="/muyannian/archive/2007/08.aspx">2007年08月(2)</a></li><li><a href="/muyannian/archive/2007/07.aspx">2007年07月(1)</a></li></ul>
<span id="Anthem_RecentComments_ltlComments__"><span id="RecentComments_ltlComments"><h3 class="listtitle">最近评论</h3>
<ul class="list"><li class="listitem">火星拿拿:<a href="http://blog.csdn.net/muyannian/archive/2007/12/20/1956449.aspx#753909" Title="点击查看《回复:郁闷,真的不知道自己到底喜欢什么》">加油呀,小母子,我觉得要把握自己的核心竞争力</a></li><li class="listitem">interim:<a href="http://blog.csdn.net/muyannian/archive/2007/11/21/1897139.aspx#744872" Title="点击查看《回复:关于c#实现影音嗅探的问题》">探测的是程序自己的包吧?</a></li><li class="listitem">liliangjava:<a href="http://blog.csdn.net/muyannian/archive/2007/08/03/1723971.aspx#741130" Title="点击查看《回复:Berkeley DB Java Edition 使用手册》">太好了,正准备用这个呢,感谢楼主!!!!</a></li></ul>
</span></span>
<br />
<br />
</div>
<div id="main">
<span id="viewpost.ascx_PreviousAndNextEntriesUp" class="PreAndNext"><div align="center"><a href="http://blog.csdn.net/muyannian/archive/2007/12/12/1932057.aspx">上一篇: .net datagrid.datasource绑定不知道算不是算BUG</a> | <a href="http://blog.csdn.net/muyannian/archive/2007/11/21/1897139.aspx">下一篇: 关于c#实现影音嗅探的问题</a></div></span><br />
<script>function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</script><div class="post"> <div class="postTitle"> <script src="http://wz.csdn.net/javascripts/vote.js"></script><a href="http://blog.csdn.net/muyannian/archive/2007/12/11/1929712.aspx"><img src='/images/authorship.gif' border='0' width='15' height='13' /> Berkeley DB for C 使用手册</a>  <script src="http://blog.csdn.net/count.aspx?ID=1929712&Type=Rank"></script> </div> <div class="postText"> <p align="center" style="text-align: center;" class="MsoNormal"><strong><em><span lang="EN-US" style="font-size: 24pt; font-family: TimesNewRomanPS-BoldItalicMT;">Berkeley DB for C</span></em></strong><span lang="EN-US" style="font-size: 10pt; font-family: TimesNewRomanPS-BoldItalicMT;"><o:p></o:p></span></p><p class="MsoNormal"><strong><span lang="EN-US" style="font-size: 16pt;"><!--[if !supportEmptyParas]--> <!--[endif]--><o:p></o:p></span></strong></p><h3><span style="font-family: 宋体;">简单介绍</span><span lang="EN-US">Brekeley DB</span></h3><h3><span style="font-family: 宋体;">打开</span><span lang="EN-US">databases</span></h3><p align="left" style="text-align: left; text-indent: 21pt;" class="MsoNormal"><span style="font-size: 10pt; font-family: 宋体; color: black;">在开打数据库前必须通过<span lang="EN-US">db_create()方法来初始化一个db句柄, 然后你可以通过他的open方法来打开一个数据库</span></span><span lang="EN-US" style="font-size: 10pt; font-family: TrebuchetMS; color: black;"><o:p></o:p></span></p><p class="MsoNormal"><span lang="EN-US"><!--[if !supportEmptyParas]--> <!--[endif]--><o:p></o:p></span></p><p class="MsoNormal"><span style="font-family: 宋体;">示例:</span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">#include <db.h><span style=""> </span>//</span><span style="font-size: 10pt; font-family: 宋体;">必要的包含文件</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"><o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">...<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">DB *dbp; /* </span><span style="font-size: 10pt; font-family: 宋体;">数据库结构句柄</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"> */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">u_int32_t flags; /* </span><span style="font-size: 10pt; font-family: 宋体;">数据库打开标志</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"> */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">int ret; /* </span><span style="font-size: 10pt; font-family: 宋体;">用来接收通过</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">db_create</span><span style="font-size: 10pt; font-family: 宋体;">来创建的数据库是否成功</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"> */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">/* </span><span style="font-size: 10pt; font-family: 宋体;">初始化结构体</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"><o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">* </span><span style="font-size: 10pt; font-family: 宋体;">因为数据库没有在环境中打开</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"><o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">* </span><span style="font-size: 10pt; font-family: 宋体;">所以环境指针为</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">null. */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">ret = db_create(&dbp, NULL, 0);<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">if (ret != 0) {<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">/* </span><span style="font-size: 10pt; font-family: 宋体;">错误处理</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"> */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">}<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">/* </span><span style="font-size: 10pt; font-family: 宋体;">数据库打开标志</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"> */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">flags = DB_CREATE; /* </span><span style="font-size: 10pt; font-family: 宋体;">如果数据库不存在的化则创建一个新的</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">*/<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">/* </span><span style="font-size: 10pt; font-family: 宋体;">打开数据库</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"> */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">ret = dbp->open(dbp, /* </span><span style="font-size: 10pt; font-family: 宋体;">数据库结构指针</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"> */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">NULL, /* </span><span style="font-size: 10pt; font-family: 宋体;">事务处理指针</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"> */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">"my_db.db", /* </span><span style="font-size: 10pt; font-family: 宋体;">数据库名</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"> */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">NULL, /* Optional logical database name */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">DB_BTREE, /* </span><span style="font-size: 10pt; font-family: 宋体;">数据库访问方式</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"> */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">flags, /* </span><span style="font-size: 10pt; font-family: 宋体;">打开标识</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"> */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">0); /* </span><span style="font-size: 10pt; font-family: 宋体;">文件模式</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"> (</span><span style="font-size: 10pt; font-family: 宋体;">使用默认的</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">) */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">if (ret != 0) {<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">/* </span><span style="font-size: 10pt; font-family: 宋体;">错误处理</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"> */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">}<o:p></o:p></span></p><h3><span style="font-family: 宋体;">关闭</span><span lang="EN-US">databases</span></h3><p align="left" style="text-align: left; text-indent: 21pt;" class="MsoNormal"><span style="font-family: 宋体;">一旦你使用完毕某个数据库,你必须通过</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">DB->close()</span><span style="font-size: 10pt; font-family: 宋体;">来关闭他。除非你再次打开他否则关闭后的数据库是不能在使用的。在关闭数据库之前请确保与之相关的游标先关闭,否则会有很多想不到的后果。关闭数据库后很多缓存在内存中的数据会被同步到你的硬盘中去,而且你也可以随时通过</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">DB->sync()</span><span style="font-family: 宋体;">方法来随时同步数据库。</span></p><p align="left" style="text-align: left;" class="MsoNormal"><span style="font-family: 宋体;">使用示例:</span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">#include <db.h><o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">...<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">DB *dbp; /* </span><span style="font-size: 10pt; font-family: 宋体;">数据库句柄</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"> */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">...<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">/*<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">* </span><span style="font-size: 10pt; font-family: 宋体;">在这里进行一些数据库有关的操作</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"><o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">*/<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">...<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">/* </span><span style="font-size: 10pt; font-family: 宋体;">当你不在使用他的时候关闭他</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">. */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">if (dbp != NULL)<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">dbp->close(dbp, 0);<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US"><!--[if !supportEmptyParas]--> <!--[endif]--><o:p></o:p></span></p><h3><span style="font-family: 宋体;">数据库打开表识(</span><span lang="EN-US">flags</span><span style="font-family: 宋体;">)</span></h3><p class="MsoNormal"><span style="font-family: 宋体;">如果在打开数据库的时候使用多个标识则可以通过按位或来添加多个标示</span></p><p class="MsoNormal"><span style="font-family: 宋体;">示例:</span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 9pt; font-family: Courier;">u_int32_t open_flags = DB_CREATE | DB_EXCL;</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"><o:p></o:p></span></p><p class="MsoNormal"><span lang="EN-US"><!--[if !supportEmptyParas]--> <!--[endif]--><o:p></o:p></span></p><p style="margin-left: 21pt; text-indent: -21pt;" class="MsoNormal"><!--[if !supportLists]--><span lang="EN-US" style="font-family: Wingdings;">l<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"> </span></span><!--[endif]--><span style="font-family: 宋体;">标示说明:</span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">DB_CREATE</span><span style="font-size: 10pt; font-family: 宋体;">:当数据不存在的时候创建一个新的</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"><o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">DB_EXCL:</span><span style="font-size: 10pt; font-family: 宋体;">创建专用数据库,如果数据库已经存在则将会打开失败,这个标识只能与</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">DB_CREATE</span><span style="font-size: 10pt; font-family: 宋体;">联合使用</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"><o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">DB_RDONLY</span><span style="font-size: 10pt; font-family: 宋体;">:以只读方式打开数据库,所有的写操作都被禁止。</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"><o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">DB_TRUNCATE</span><span style="font-size: 10pt; font-family: 宋体;">:打开数据库的同时清空数据库中原有的记录。</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"><o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"><!--[if !supportEmptyParas]--> <!--[endif]--><o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span style="font-size: 10pt; font-family: 宋体;">下面这些方法可能会对你管理数据库有用</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"><o:p></o:p></span></p><p align="left" style="margin-left: 21pt; text-align: left; text-indent: -21pt;" class="MsoNormal"><!--[if !supportLists]--><span lang="EN-US" style="font-size: 10pt; font-family: Wingdings;">l<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"> </span></span><!--[endif]--><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">DB->get_open_flags()</span><span style="font-size: 10pt; font-family: 宋体;">:返回当前的数据库打开标识,如果在打开数据库前调用此方法会出错。</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"><o:p></o:p></span></p><p align="left" style="margin-left: 21pt; text-align: left;" class="MsoNormal"><span style="font-size: 10pt; font-family: 宋体;">使用示例:</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"><o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">#include <db.h><o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">...<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">DB *dbp;<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">u_int32_t open_flags;<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">/* Database open and subsequent operations omitted for clarity */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">dbp->get_open_flags(dbp, &open_flags);<o:p></o:p></span></p><p align="left" style="margin-left: 21pt; text-align: left; text-indent: -21pt;" class="MsoNormal"><!--[if !supportLists]--><span lang="EN-US" style="font-size: 10pt; font-family: Wingdings;">l<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"> </span></span><!--[endif]--><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">DB->remove()<o:p></o:p></span></p><p align="left" style="margin-left: 21pt; text-align: left;" class="MsoNormal"><span style="font-size: 10pt; font-family: 宋体;">如果一个数据库已经不再需要,则可以使用这个方法来删除。</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"><o:p></o:p></span></p><p align="left" style="margin-left: 21pt; text-align: left;" class="MsoNormal"><span style="font-size: 10pt; font-family: 宋体;">示例:</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"><o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">#include <db.h><o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">...<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">DB *dbp;<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">/* Database open and subsequent operations omitted for clarity */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">dbp->remove(dbp, /* </span><span style="font-size: 10pt; font-family: 宋体;">数据库句柄</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"> */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">"mydb.db", /* </span><span style="font-size: 10pt; font-family: 宋体;">要移除的数据库</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"> */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">NULL, /* Database to remove. This is<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">* NULL so the entire file is<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">* removed. */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">0); /* Flags. None used. */<o:p></o:p></span></p><p align="left" style="margin-left: 21pt; text-align: left; text-indent: -21pt;" class="MsoNormal"><!--[if !supportLists]--><span lang="EN-US" style="font-size: 10pt; font-family: Wingdings;">l<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"> </span></span><!--[endif]--><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">DB->rename()<o:p></o:p></span></p><p align="left" style="margin-left: 21pt; text-align: left;" class="MsoNormal"><span style="font-size: 10pt; font-family: 宋体;">给目标数据库改名,不要试图给一个已经打开了的数据库改名,那样会出错的。</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"><o:p></o:p></span></p><p align="left" style="margin-left: 21pt; text-align: left;" class="MsoNormal"><span style="font-size: 10pt; font-family: 宋体;">使用示例:</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"><o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">#include <db.h><o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">...<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">DB *dbp;<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">/* Database open and subsequent operations omitted for clarity */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">dbp->rename(dbp, /* Database pointer */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">"mydb.db", /* </span><span style="font-size: 10pt; font-family: 宋体;">要被改名的数据库</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"> */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">NULL, /* Database to rename. This is<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">* NULL so the entire file is<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">* renamed. */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">"newdb.db", /* </span><span style="font-size: 10pt; font-family: 宋体;">新的数据库名</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"> */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">0);<o:p></o:p></span></p><p align="left" style="margin-left: 21pt; text-align: left; text-indent: -21pt;" class="MsoNormal"><!--[if !supportLists]--><span lang="EN-US" style="font-size: 10pt; font-family: Wingdings;">l<span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"> </span></span><!--[endif]--><span style="font-size: 10pt; font-family: 宋体;">与错误报告有关的几个函数</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"><o:p></o:p></span></p><p align="left" style="text-align: left; text-indent: 21pt;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">set_errcall():</span><span style="font-size: 10pt; font-family: 宋体;">设置出错的时候调用的函数</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"><o:p></o:p></span></p><p align="left" style="text-align: left; text-indent: 21pt;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">set_errfile():</span><span style="font-size: 10pt; font-family: 宋体;">设置出错的时候</span><span style="font-size: 10pt; font-family: Courier;"> </span><span style="font-size: 10pt; font-family: 宋体;">把错误信息写进去的文件指针(</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">file *</span><span style="font-size: 10pt; font-family: 宋体;">)</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"><o:p></o:p></span></p><p align="left" style="text-align: left; text-indent: 21pt;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">set_errpfx():</span><span style="font-size: 10pt; font-family: 宋体;">设置有数据库产生的错误类型</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"><o:p></o:p></span></p><p align="left" style="text-align: left; text-indent: 21pt;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">err():</span><span style="font-size: 10pt; font-family: 宋体;">产生一个错误,如果指定了错误的回调函数或文件指针则把错误发送给相应的处理方法或文件,否则发送到标准出错。</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"><o:p></o:p></span></p><p align="left" style="text-align: left; text-indent: 21pt;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">errx():</span><span style="font-size: 10pt; font-family: 宋体;">与</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">err()</span><span style="font-size: 10pt; font-family: 宋体;">雷同</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"><o:p></o:p></span></p><p align="left" style="text-align: left; text-indent: 21pt;" class="MsoNormal"><span style="font-size: 10pt; font-family: 宋体;">除此之外你可以通过</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">db_strerror()</span><span style="font-size: 10pt; font-family: 宋体;">来直接的返回错误代号。</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"><o:p></o:p></span></p><p align="left" style="text-align: left; text-indent: 21pt;" class="MsoNormal"><span style="font-size: 10pt; font-family: 宋体;">使用示例:</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"><o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">/*<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">* Function called to handle any database error messages<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">* issued by DB.<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">*/<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">void<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">my_error_handler(const char *error_prefix, char *msg)<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">{<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">/*<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">* </span><span style="font-size: 10pt; font-family: 宋体;">相关的错误处理</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"><o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">*/<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">}<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: TrebuchetMS;"><span style=""> </span></span><span style="font-size: 10pt; font-family: 宋体;">注册错误回调函数的方法如下<span lang="EN-US"><o:p></o:p></span></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"><!--[if !supportEmptyParas]--> <!--[endif]--><o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">#include <db.h><o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">#include <stdio.h><o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">...<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">DB *dbp;<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">int ret;<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">/*<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">* </span><span style="font-size: 10pt; font-family: 宋体;">为错误创建一个初始化的环境</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"><o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">*/<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">ret = db_create(&dbp, NULL, 0);<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">if (ret != 0) {<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">fprintf(stderr, "%s: %s\n", "my_program",<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">db_strerror(ret));//</span><span style="font-size: 10pt; font-family: 宋体;">直接输出错误信息</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"><o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">return(ret);<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">}<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">/* </span><span style="font-size: 10pt; font-family: 宋体;">设置回调函数</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"> */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">dbp->set_errcall(dbp, my_error_handler);<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">dbp->set_errpfx(dbp, "my_example_program");//</span><span style="font-size: 10pt; font-family: 宋体;">设置回调前缀</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"><o:p></o:p></span></p><p align="left" style="text-align: left; text-indent: 21pt;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"><!--[if !supportEmptyParas]--> <!--[endif]--><o:p></o:p></span></p><p align="left" style="text-align: left; text-indent: 21pt;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"><!--[if !supportEmptyParas]--> <!--[endif]--><o:p></o:p></span></p><p align="left" style="margin-left: 21pt; text-align: left;" class="MsoNormal"><span style="font-size: 10pt; font-family: 宋体;">发出错误信息示例:</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"><o:p></o:p></span></p><p align="left" style="text-align: left; text-indent: 21pt;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">ret = dbp->open(dbp,<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">NULL,<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">"mydb.db",<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">NULL,<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">DB_BTREE,<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">DB_CREATE,<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">0);<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">if (ret != 0) {<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">dbp->err(dbp, ret,<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">"Database open failed: %s", "mydb.db");//</span><span style="font-size: 10pt; font-family: 宋体;">发送错误信息</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"><o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">return(ret);<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">}<o:p></o:p></span></p><h3><span style="font-family: 宋体;">数据库环境管理</span><span lang="EN-US" style=""><o:p></o:p></span></h3><p class="MsoNormal"><span lang="EN-US"><span style=""> </span></span><span style="font-family: 宋体;">要想设置数据库环境,首先你需要创建一个环境句柄并且打开他,在打开的时候你必须确保存在指定的目录,同样你页可以设置环境所使用的内存</span><span lang="EN-US">cache.</span></p><p class="MsoNormal"><span lang="EN-US"><span style=""> </span></span><span style="font-family: 宋体;">使用示例:</span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">#include <db.h><o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">...<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">DB_ENV *myEnv; /* db</span><span style="font-size: 10pt; font-family: 宋体;">环境结构句柄</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"> */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">DB *dbp; /* db</span><span style="font-size: 10pt; font-family: 宋体;">结构句柄</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"> */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">u_int32_t db_flags; /* </span><span style="font-size: 10pt; font-family: 宋体;">数据库打开标识</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"> */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">u_int32_t env_flags; /* </span><span style="font-size: 10pt; font-family: 宋体;">环境打开标识</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"> */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">int ret; /* </span><span style="font-size: 10pt; font-family: 宋体;">用来存储打开结果(成功还是失败)</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"> */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">/*<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span style="font-size: 10pt; font-family: 宋体;">创建一个数据库环境</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"><o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">*/<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">ret = db_env_create(&myEnv, 0);<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">if (ret != 0) {<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">//</span><span style="font-size: 10pt; font-family: 宋体;">错误处理</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"><o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">return -1;<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">}<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">/* </span><span style="font-size: 10pt; font-family: 宋体;">打开环境</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">. */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">env_flags = DB_CREATE | /* </span><span style="font-size: 10pt; font-family: 宋体;">如果环境不存在则创建一个新的</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">*/<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">DB_INIT_MPOOL; /* </span><span style="font-size: 10pt; font-family: 宋体;">初始化内存大小</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">. */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">ret = myEnv->open(myEnv, /* </span><span style="font-size: 10pt; font-family: 宋体;">数据库环境指针</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"> */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">"/export1/testEnv", /* </span><span style="font-size: 10pt; font-family: 宋体;">环境目录</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"> */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">env_flags, /* </span><span style="font-size: 10pt; font-family: 宋体;">打开标识</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"> */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">0); /* File mode (default) */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">if (ret != 0) {<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">fprintf(stderr, "Environment open failed: %s", db_strerror(ret));<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">//</span><span style="font-size: 10pt; font-family: 宋体;">错误处理</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"><o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">return -1;<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">}<o:p></o:p></span></p><p class="MsoNormal"><span lang="EN-US"><!--[if !supportEmptyParas]--> <!--[endif]--><o:p></o:p></span></p><p style="text-indent: 21pt;" class="MsoNormal"><span style="font-family: 宋体;">一但打开一个数据库环境后,你就可以通过他来打开数据库。通常情况下数据库默认存储在环境的根目录或其相对路径</span></p><p class="MsoNormal"><span style="font-family: 宋体;">使用示例:</span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">/*<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">* </span><span style="font-size: 10pt; font-family: 宋体;">创建数据库</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"><o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">*/<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">ret = db_create(&dbp, myEnv, 0);<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">if (ret != 0) {<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">/* Error handling goes here */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">}<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">/* </span><span style="font-size: 10pt; font-family: 宋体;">数据库打开标志</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"> */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">db_flags = DB_CREATE; /* If the database does not exist,<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">* create it.*/<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">/* </span><span style="font-size: 10pt; font-family: 宋体;">打开数据库</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"> */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">ret = dbp->open(dbp, /* db</span><span style="font-size: 10pt; font-family: 宋体;">结构指针</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"> */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">NULL, /* </span><span style="font-size: 10pt; font-family: 宋体;">事务处理指针</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"> */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">"my_db.db", /* </span><span style="font-size: 10pt; font-family: 宋体;">数据库名</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"> */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">NULL, /* Optional logical database name */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">DB_BTREE, /* </span><span style="font-size: 10pt; font-family: 宋体;">数据库访问方式</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"> */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">db_flags, /* </span><span style="font-size: 10pt; font-family: 宋体;">打开标识符</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"> */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">0); /* File mode (using defaults) */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">if (ret != 0) {<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">/* </span><span style="font-size: 10pt; font-family: 宋体;">错误处理</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"> */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">}<o:p></o:p></span></p><p class="MsoNormal"><span lang="EN-US"><!--[if !supportEmptyParas]--> <!--[endif]--><o:p></o:p></span></p><p class="MsoNormal"><span lang="EN-US"><span style=""> </span></span><span style="font-family: 宋体;">当你使用完一个环境后必须关闭他,请确保在关闭一个数据库环境前先关闭所有数据库。</span></p><p class="MsoNormal"><span style="font-family: 宋体;">使用示例:</span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">/*<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">* </span><span style="font-size: 10pt; font-family: 宋体;">关闭数据库和环境</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;"><o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">*/<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">if (dbp != NULL) {<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">dbp->close(dbp, 0);<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">}<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">if (myEnv != NULL) {<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">myEnv->close(myEnv, 0);<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">}<o:p></o:p></span></p><h3><span style="font-family: 宋体;">使用记录</span></h3><p class="MsoNormal"><span style="font-family: 宋体;">每条数据库记录是由两个</span><span lang="EN-US">DBT</span><span style="font-family: 宋体;">结构体所组成,一个代表键名</span><span lang="EN-US">(key),</span><span style="font-family: 宋体;">一个代表键值</span><span lang="EN-US">(value);</span></p><p class="MsoNormal"><span style="font-family: 宋体;">为了存储数据我们只需要拿一个指针指向这段数据的首地址,并且标识出这段数据的长度就行了。具体使用示例如下:</span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">DBT key, data; //</span><span style="font-size: 10pt; font-family: 宋体;">分别定义</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">key</span><span style="font-size: 10pt; font-family: 宋体;">和</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">value<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">float money = 122.45;<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">char *description = "Grocery bill.";<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">/* </span><span style="font-size: 10pt; font-family: 宋体;">开始使用</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">DBT</span><span style="font-size: 10pt; font-family: 宋体;">的时候给</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">DBT</span><span style="font-size: 10pt; font-family: 宋体;">清</span><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">0 */<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">memset(&key, 0, sizeof(DBT));<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">memset(&data, 0, sizeof(DBT));<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">key.data = &money;<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">key.size = sizeof(float);<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">data.data = description;<o:p></o:p></span></p><p align="left" style="text-align: left;" class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; font-family: Courier;">data.size = strlen(description) + 1;<o:p></o:p></span></p><p class="MsoNormal"><span lang="EN-US"><!--[if !supportEmptyParas]--> <!--[endif]--><o:p></o:p></span></p><p class="MsoNormal"><span style="font-family: 宋体;">为了能够得到这条记录,可以通过</span><span lang="EN-US">void</span><span style="font-family: 宋体;">指针指向</span><span lang="EN-US">DBT.</span></p><p class="MsoNormal"><span style="font-family: 宋体;">某些系统的</span><span lang="EN-US">float</span><span style="font-family: 宋体;">和</span><span lang="EN-US">struct</span><span style="font-family: 宋体;">类型的内存对齐方式比较特殊,为了兼容性,应该使用</span><span lang="EN-US">Dbt</span><span style="font-family: 宋体;">的</span><span lang="EN-US">set_ulen</span><span style="font-family: 宋体;">函数设置内存长度,并且用</span><span lang="EN-US">set_flag(DB_DBT_USERMEM)</span><span style="font-family: 宋体;">函数注明使用</span><span lang="EN-US">BDB</span><span style="font-family: 宋体;">的内存处理方式</span><span lang="EN-US">.</span></p><p class="MsoNormal"><span style="font-family: 宋体;">只有在获取数据的时候,才需要</span><span lang="EN-US">ulen</span><span style="font-family: 宋体;">的值。</span><span lang="EN-US">get()</span><span style="font-family: 宋体;">操作后,</span><span lang="EN-US">DBT</span><span style="font-family: 宋体;">的</span><span lang="EN-US">sizefield</span><span style="font-family: 宋体;">会设置为</span><span lang="EN-US">data</span><span style="font-family: 宋体;">的实际大小。可以通过设置</span><span lang="EN-US">flag</span><span style="font-family: 宋体;">为</span><span lang="EN-US">0</span><span style="font-family: 宋体;">,获得</span><span lang="EN-US">data</span><span style="font-family: 宋体;">的实际大小。如果设置了</span><span lang="EN-US">flag</span><span style="font-family: 宋体;">为</span><span lang="EN-US">DB_DBT_USERMEM</span><span style="font-family: 宋体;">,那么必须使用</span><span lang="EN-US">try-catch</span><span style="font-family: 宋体;">模板包围</span><span lang="EN-US">get()</span><span style="font-family: 宋体;">操作,如果返回的</span><span lang="
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -