<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>评论：Berkeley DB示例程序详解 (1)</title>
	<atom:link href="http://www.bdbchina.com/2009/02/berkeley-db%e7%a4%ba%e4%be%8b%e7%a8%8b%e5%ba%8f%e8%af%a6%e8%a7%a3-1/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bdbchina.com/2009/02/berkeley-db%e7%a4%ba%e4%be%8b%e7%a8%8b%e5%ba%8f%e8%af%a6%e8%a7%a3-1/</link>
	<description>Oracle Berkeley DB 中国研发团队的博客</description>
	<lastBuildDate>Thu, 15 Dec 2011 10:53:01 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>来自：ayang</title>
		<link>http://www.bdbchina.com/2009/02/berkeley-db%e7%a4%ba%e4%be%8b%e7%a8%8b%e5%ba%8f%e8%af%a6%e8%a7%a3-1/comment-page-1/#comment-52</link>
		<dc:creator>ayang</dc:creator>
		<pubDate>Mon, 22 Jun 2009 08:09:25 +0000</pubDate>
		<guid isPermaLink="false">http://www.bdbchina.com/?p=112#comment-52</guid>
		<description>非常感谢。</description>
		<content:encoded><![CDATA[<p>非常感谢。</p>
]]></content:encoded>
	</item>
	<item>
		<title>来自：chaohuang</title>
		<link>http://www.bdbchina.com/2009/02/berkeley-db%e7%a4%ba%e4%be%8b%e7%a8%8b%e5%ba%8f%e8%af%a6%e8%a7%a3-1/comment-page-1/#comment-51</link>
		<dc:creator>chaohuang</dc:creator>
		<pubDate>Mon, 22 Jun 2009 05:40:14 +0000</pubDate>
		<guid isPermaLink="false">http://www.bdbchina.com/?p=112#comment-51</guid>
		<description>&lt;a href=&quot;#comment-48&quot; rel=&quot;nofollow&quot;&gt;@ayang&lt;/a&gt; 
ayang, 抱歉让你久等。再次申明，此网站不做support用！如果你是付费客户，请联系Oracle的销售支持团队；非付费客户，请到OTN的论坛提问。</description>
		<content:encoded><![CDATA[<p><a href="#comment-48" rel="nofollow">@ayang</a><br />
ayang, 抱歉让你久等。再次申明，此网站不做support用！如果你是付费客户，请联系Oracle的销售支持团队；非付费客户，请到OTN的论坛提问。</p>
]]></content:encoded>
	</item>
	<item>
		<title>来自：davidzhao</title>
		<link>http://www.bdbchina.com/2009/02/berkeley-db%e7%a4%ba%e4%be%8b%e7%a8%8b%e5%ba%8f%e8%af%a6%e8%a7%a3-1/comment-page-1/#comment-50</link>
		<dc:creator>davidzhao</dc:creator>
		<pubDate>Mon, 22 Jun 2009 02:11:25 +0000</pubDate>
		<guid isPermaLink="false">http://www.bdbchina.com/?p=112#comment-50</guid>
		<description>方法同上。  设置DB_NOOVERWRITE和DB_AUTO_COMMIT不能达到这个目的。这里你只需要Db::put 的flags 是0就可以了。</description>
		<content:encoded><![CDATA[<p>方法同上。  设置DB_NOOVERWRITE和DB_AUTO_COMMIT不能达到这个目的。这里你只需要Db::put 的flags 是0就可以了。</p>
]]></content:encoded>
	</item>
	<item>
		<title>来自：davidzhao</title>
		<link>http://www.bdbchina.com/2009/02/berkeley-db%e7%a4%ba%e4%be%8b%e7%a8%8b%e5%ba%8f%e8%af%a6%e8%a7%a3-1/comment-page-1/#comment-49</link>
		<dc:creator>davidzhao</dc:creator>
		<pubDate>Mon, 22 Jun 2009 02:08:48 +0000</pubDate>
		<guid isPermaLink="false">http://www.bdbchina.com/?p=112#comment-49</guid>
		<description>你插入的key/data pairs 当中， 有重复的key，后插入的key/data pair会覆盖之前插入的相同key的数据，相当于对它做了更新.  、

你可以重新创建一个数据库，设置DB_DUP flag （在Db::open之前调用 Db::set_flags(DB_DUP)）, 然后再插入数据，就相同了。</description>
		<content:encoded><![CDATA[<p>你插入的key/data pairs 当中， 有重复的key，后插入的key/data pair会覆盖之前插入的相同key的数据，相当于对它做了更新.  、</p>
<p>你可以重新创建一个数据库，设置DB_DUP flag （在Db::open之前调用 Db::set_flags(DB_DUP)）, 然后再插入数据，就相同了。</p>
]]></content:encoded>
	</item>
	<item>
		<title>来自：ayang</title>
		<link>http://www.bdbchina.com/2009/02/berkeley-db%e7%a4%ba%e4%be%8b%e7%a8%8b%e5%ba%8f%e8%af%a6%e8%a7%a3-1/comment-page-1/#comment-48</link>
		<dc:creator>ayang</dc:creator>
		<pubDate>Mon, 22 Jun 2009 00:43:10 +0000</pubDate>
		<guid isPermaLink="false">http://www.bdbchina.com/?p=112#comment-48</guid>
		<description>怎么没人回帖呢？</description>
		<content:encoded><![CDATA[<p>怎么没人回帖呢？</p>
]]></content:encoded>
	</item>
	<item>
		<title>来自：ayang</title>
		<link>http://www.bdbchina.com/2009/02/berkeley-db%e7%a4%ba%e4%be%8b%e7%a8%8b%e5%ba%8f%e8%af%a6%e8%a7%a3-1/comment-page-1/#comment-46</link>
		<dc:creator>ayang</dc:creator>
		<pubDate>Fri, 19 Jun 2009 08:54:06 +0000</pubDate>
		<guid isPermaLink="false">http://www.bdbchina.com/?p=112#comment-46</guid>
		<description>在插入时我用分别用DB_NOOVERWRITE与DB_AUTO_COMMIT进行测试，发现它一样，最后
遍历出来的记录数还是跟插入时的不一至。

ret = db.put(0, &amp;key, &amp;data, DB_NOOVERWRITE);</description>
		<content:encoded><![CDATA[<p>在插入时我用分别用DB_NOOVERWRITE与DB_AUTO_COMMIT进行测试，发现它一样，最后<br />
遍历出来的记录数还是跟插入时的不一至。</p>
<p>ret = db.put(0, &amp;key, &amp;data, DB_NOOVERWRITE);</p>
]]></content:encoded>
	</item>
	<item>
		<title>来自：ayang</title>
		<link>http://www.bdbchina.com/2009/02/berkeley-db%e7%a4%ba%e4%be%8b%e7%a8%8b%e5%ba%8f%e8%af%a6%e8%a7%a3-1/comment-page-1/#comment-45</link>
		<dc:creator>ayang</dc:creator>
		<pubDate>Fri, 19 Jun 2009 08:48:13 +0000</pubDate>
		<guid isPermaLink="false">http://www.bdbchina.com/?p=112#comment-45</guid>
		<description>long dwCount = 0;
while (dbcp-&gt;get(&amp;key, &amp;data, DB_NEXT) == 0) {

// 获取Dbt中的数据，也就是字节串的首地址。由于key和data对象
// 使用了默认的flags，所以它们所引用的内存由Berkeley Db负责
// 分配和回收。你也可以使用其他的内存管理方式。
// 详情Dbt的文档。
char *key_string = (char *)key.get_data();
char *data_string = (char *)data.get_data();
cout &lt;&lt; key_string &lt;&lt; ” : ” &lt;&lt; data_string &lt;&lt; “n”;

++ dwCount;
}
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
在这里我有个问题,为什么我遍历出来的数据要比我实际插入的少呢，如我插入28000条，可这里dwCount却显示为18929, 如果我插入2800000(280w)则只有32768条，我想知道为什么？
？？？？</description>
		<content:encoded><![CDATA[<p>long dwCount = 0;<br />
while (dbcp-&gt;get(&amp;key, &amp;data, DB_NEXT) == 0) {</p>
<p>// 获取Dbt中的数据，也就是字节串的首地址。由于key和data对象<br />
// 使用了默认的flags，所以它们所引用的内存由Berkeley Db负责<br />
// 分配和回收。你也可以使用其他的内存管理方式。<br />
// 详情Dbt的文档。<br />
char *key_string = (char *)key.get_data();<br />
char *data_string = (char *)data.get_data();<br />
cout &lt;&lt; key_string &lt;&lt; ” : ” &lt;&lt; data_string &lt;&lt; “n”;</p>
<p>++ dwCount;<br />
}<br />
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++<br />
在这里我有个问题,为什么我遍历出来的数据要比我实际插入的少呢，如我插入28000条，可这里dwCount却显示为18929, 如果我插入2800000(280w)则只有32768条，我想知道为什么？<br />
？？？？</p>
]]></content:encoded>
	</item>
	<item>
		<title>来自：davidzhao</title>
		<link>http://www.bdbchina.com/2009/02/berkeley-db%e7%a4%ba%e4%be%8b%e7%a8%8b%e5%ba%8f%e8%af%a6%e8%a7%a3-1/comment-page-1/#comment-42</link>
		<dc:creator>davidzhao</dc:creator>
		<pubDate>Thu, 18 Jun 2009 02:32:05 +0000</pubDate>
		<guid isPermaLink="false">http://www.bdbchina.com/?p=112#comment-42</guid>
		<description>这种情况，不需要设置DB_DBT_USERMEM。 事实上，在调用put的时候，dbt对象所指向的内存一定是你自己分配的。 所以，你不应该调用set_ulen，而是调用key/data.set_size(32);

另外，key.set_data(k)就可以了。

DB_DBT_USERMEM在读取数据的时候使用。</description>
		<content:encoded><![CDATA[<p>这种情况，不需要设置DB_DBT_USERMEM。 事实上，在调用put的时候，dbt对象所指向的内存一定是你自己分配的。 所以，你不应该调用set_ulen，而是调用key/data.set_size(32);</p>
<p>另外，key.set_data(k)就可以了。</p>
<p>DB_DBT_USERMEM在读取数据的时候使用。</p>
]]></content:encoded>
	</item>
	<item>
		<title>来自：legendsino</title>
		<link>http://www.bdbchina.com/2009/02/berkeley-db%e7%a4%ba%e4%be%8b%e7%a8%8b%e5%ba%8f%e8%af%a6%e8%a7%a3-1/comment-page-1/#comment-22</link>
		<dc:creator>legendsino</dc:creator>
		<pubDate>Mon, 01 Jun 2009 10:13:55 +0000</pubDate>
		<guid isPermaLink="false">http://www.bdbchina.com/?p=112#comment-22</guid>
		<description>请问用Db::put添加key/data时,key/data是必须要用Dbt(void *data, size_t size)构造吗？
用Dbt()构造，set_flags(DB_DBT_USERMEM)后为什么无法向数据库正常放入数据？
代码如下：

char discreption[32]=&quot;aaa&quot;;
char k[32]=&quot;111&quot;;

Dbt key,data;

///////////////////////////////
//没有用Dbt(void *data, size_t size)构造
key.set_data(&amp;k);
key.set_ulen(32);
key.set_flags(DB_DBT_USERMEM);
data.set_data(&amp;discreption);
data.set_ulen(32);
data.set_flags(DB_DBT_USERMEM);
///////////////////////////////

if(ret=db_prc-&gt;put(NULL,&amp;key,&amp;data,DB_NOOVERWRITE)==0)
{
	std::cout&lt;err(ret,&quot;DB-&gt;put&quot;);
}

看了下源代码，还是不明白啊。。</description>
		<content:encoded><![CDATA[<p>请问用Db::put添加key/data时,key/data是必须要用Dbt(void *data, size_t size)构造吗？<br />
用Dbt()构造，set_flags(DB_DBT_USERMEM)后为什么无法向数据库正常放入数据？<br />
代码如下：</p>
<p>char discreption[32]=&#8221;aaa&#8221;;<br />
char k[32]=&#8221;111&#8243;;</p>
<p>Dbt key,data;</p>
<p>///////////////////////////////<br />
//没有用Dbt(void *data, size_t size)构造<br />
key.set_data(&amp;k);<br />
key.set_ulen(32);<br />
key.set_flags(DB_DBT_USERMEM);<br />
data.set_data(&amp;discreption);<br />
data.set_ulen(32);<br />
data.set_flags(DB_DBT_USERMEM);<br />
///////////////////////////////</p>
<p>if(ret=db_prc-&gt;put(NULL,&amp;key,&amp;data,DB_NOOVERWRITE)==0)<br />
{<br />
	std::cout&lt;err(ret,&#8221;DB-&gt;put&#8221;);<br />
}</p>
<p>看了下源代码，还是不明白啊。。</p>
]]></content:encoded>
	</item>
</channel>
</rss>
Դ
