<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	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/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Oracle Berkeley DB 中国研发团队的博客 &#187; Winter Zhang</title>
	<atom:link href="http://www.bdbchina.com/category/winterzhang/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bdbchina.com</link>
	<description>Oracle Berkeley DB 中国研发团队的博客</description>
	<lastBuildDate>Fri, 09 Jul 2010 06:44:36 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>在Windows平台上应用BerkeleyDB 11gR2 SQL Shell</title>
		<link>http://www.bdbchina.com/2010/04/%e5%9c%a8windows%e5%b9%b3%e5%8f%b0%e4%b8%8a%e5%ba%94%e7%94%a8berkeleydb-11gr2-sql/</link>
		<comments>http://www.bdbchina.com/2010/04/%e5%9c%a8windows%e5%b9%b3%e5%8f%b0%e4%b8%8a%e5%ba%94%e7%94%a8berkeleydb-11gr2-sql/#comments</comments>
		<pubDate>Thu, 01 Apr 2010 06:58:56 +0000</pubDate>
		<dc:creator>Winter</dc:creator>
				<category><![CDATA[Berkeley DB]]></category>
		<category><![CDATA[Winter Zhang]]></category>

		<guid isPermaLink="false">http://www.bdbchina.com/?p=1059</guid>
		<description><![CDATA[1 前言
应嵌入式平台对SQL支持的需求， 利用自身在数据存储上的优势， Oracle BerkeleyDB在最新发布的11gR2中添加了对SQL的支持，极大的增强了其在嵌入式平台上的易用性。
本文通过一个简单的例子介绍如何在Windows平台上编译（使用Microsoft Visual C++2005）并运行Oracle BerkeleyDB 11gR2提供的sql shell 。

2 下载Oracle Berkeley DB 11gR2。
Oracle Berkeley DB 11gR2可以从此处下载：http://www.oracle.com/technology/software/products/berkeley-db/index.html

点击Berkeley DB 5.0.21.zip，由于本文有描述如何从源代码编译出Berkeley  DB sql shell，故而不选择下载Windows安装程序。下载完成后，解压该文件，解压后进入db-5.0.21，我们可以发现该文件夹具有如下内容：

3 编译sql shell
进入build_windows目录，双击Berkeley_DB.sln（请确保已经使用安装程序安装了Microsoft Visual C++2005或更高版本）。
而后选择编译类型（本文是Debug  Win32），鼠标右键单击db_sql_shell， 选择build，就开始了编译过程：

db_sql_shell编译默认会编译BerkeleyDB C程序库， BerkeleyDB SQL程序库以及sql shell。
编译完成后，可以看到build_windows底下多了一个Win32目录，进入Win32后再进入Debug，我们可以看到编译出来的文件：
这里，db_sql.exe 就是编译出来的sql shell程序.
4 使用sql shell
本处将使用sql shell创建一个数据库（person)， 插入3条记录， 而后显示他们：

5 总结
本文简单介绍了如何使用Microsoft Visual C++2005编译Oracle BerkeleyDB sql shell，并通过一个简单的示例介绍了sql shell的使用， 希望对大家有所帮助。
]]></description>
			<content:encoded><![CDATA[<h2>1 前言</h2>
<p>应嵌入式平台对SQL支持的需求， 利用自身在数据存储上的优势， Oracle BerkeleyDB在最新发布的11gR2中添加了对SQL的支持，极大的增强了其在嵌入式平台上的易用性。</p>
<p>本文通过一个简单的例子介绍如何在Windows平台上编译（使用Microsoft Visual C++2005）并运行Oracle BerkeleyDB 11gR2提供的sql shell 。</p>
<p><span id="more-1059"></span></p>
<h2><strong>2 下载Oracle Berkeley DB 11gR2。</strong></h2>
<p>Oracle Berkeley DB 11gR2可以从此处下载：<a href="http://www.oracle.com/technology/software/products/berkeley-db/index.html">http://www.oracle.com/technology/software/products/berkeley-db/index.html</a></p>
<p style="text-align: center;"><a href="http://www.bdbchina.com/wp-content/uploads/2010/04/12.jpg"><img class="size-full wp-image-1076 aligncenter" title="1" src="http://www.bdbchina.com/wp-content/uploads/2010/04/12.jpg" alt="" width="539" height="633" /></a></p>
<p>点击Berkeley DB 5.0.21.zip，由于本文有描述如何从源代码编译出Berkeley  DB sql shell，故而不选择下载Windows安装程序。下载完成后，解压该文件，解压后进入db-5.0.21，我们可以发现该文件夹具有如下内容：</p>
<p style="text-align: center;"><a href="http://www.bdbchina.com/wp-content/uploads/2010/04/22.jpg"><img class="aligncenter size-full wp-image-1077" title="2" src="http://www.bdbchina.com/wp-content/uploads/2010/04/22.jpg" alt="" width="670" height="633" /></a></p>
<h2>3 编译sql shell</h2>
<p>进入build_windows目录，双击Berkeley_DB.sln（请确保已经使用安装程序安装了Microsoft Visual C++2005或更高版本）。</p>
<p>而后选择编译类型（本文是Debug  Win32），鼠标右键单击db_sql_shell， 选择build，就开始了编译过程：</p>
<p><a href="http://www.bdbchina.com/wp-content/uploads/2010/04/31.jpg"><img class="aligncenter size-full wp-image-1078" title="3" src="http://www.bdbchina.com/wp-content/uploads/2010/04/31.jpg" alt="" width="566" height="830" /></a></p>
<p>db_sql_shell编译默认会编译BerkeleyDB C程序库， BerkeleyDB SQL程序库以及sql shell。</p>
<p>编译完成后，可以看到build_windows底下多了一个Win32目录，进入Win32后再进入Debug，我们可以看到编译出来的文件：</p>
<p><a href="http://www.bdbchina.com/wp-content/uploads/2010/04/41.jpg"><img class="aligncenter size-full wp-image-1079" title="4" src="http://www.bdbchina.com/wp-content/uploads/2010/04/41.jpg" alt="" width="537" height="335" /></a>这里，db_sql.exe 就是编译出来的sql shell程序.</p>
<h2>4 使用sql shell</h2>
<p>本处将使用sql shell创建一个数据库（person)， 插入3条记录， 而后显示他们：</p>
<p><a href="http://www.bdbchina.com/wp-content/uploads/2010/04/51.jpg"><img class="aligncenter size-full wp-image-1080" title="5" src="http://www.bdbchina.com/wp-content/uploads/2010/04/51.jpg" alt="" width="648" height="578" /></a></p>
<h2>5 总结</h2>
<p>本文简单介绍了如何使用Microsoft Visual C++2005编译Oracle BerkeleyDB sql shell，并通过一个简单的示例介绍了sql shell的使用， 希望对大家有所帮助。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bdbchina.com/2010/04/%e5%9c%a8windows%e5%b9%b3%e5%8f%b0%e4%b8%8a%e5%ba%94%e7%94%a8berkeleydb-11gr2-sql/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SQL开发者的BerkeleyDB入门指南</title>
		<link>http://www.bdbchina.com/2009/08/sql%e5%bc%80%e5%8f%91%e8%80%85%e7%9a%84berkeleydb%e5%85%a5%e9%97%a8%e6%8c%87%e5%8d%97/</link>
		<comments>http://www.bdbchina.com/2009/08/sql%e5%bc%80%e5%8f%91%e8%80%85%e7%9a%84berkeleydb%e5%85%a5%e9%97%a8%e6%8c%87%e5%8d%97/#comments</comments>
		<pubDate>Thu, 20 Aug 2009 08:47:12 +0000</pubDate>
		<dc:creator>Winter</dc:creator>
				<category><![CDATA[Berkeley DB]]></category>
		<category><![CDATA[Winter Zhang]]></category>
		<category><![CDATA[未分类]]></category>
		<category><![CDATA[bdb]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.bdbchina.com/?p=505</guid>
		<description><![CDATA[随着BerkeleyDB的发展，越来越多原来与传统关系数据库打交道的开发者希望了解、学习BerkeleyDB，并且在开发过程中应用BerkeleyDB。
但是， 与传统的关系数据库不同， BerkeleyDB目前并不支持SQL 查询处理，使用者需要书写代码来实现类似SQL的查询。许多SQL开发者在此过程遇到不少困难。
为了方便SQL开发者学习BerkeleyDB, 我们提供了两篇入门指南，供大家参考。 考虑到有些朋友可能不好访问国外网站，在提供链接的同时， 我们还将这两篇指南上传至开心网BerkeleyDB群组的文件共享区，需要的可以下载阅读(不提供BerkeleyDB XML版本的该指南，因为在BerkeleyDB XML中可以直接使用功能强大的XQuery来查询内容)。
1  对BerkeleyDB
指南地址为： Guide to Oracle Berkeley DB for SQL Developers
开心网文件地址：http://www.kaixin001.com/group/file.php?gid=627784&#38;fid=401933&#38;start=0
2 对BerkeleyDB Java Edition
指南地址为：  Performing Queries in Oracle Berkeley DB Java Edition 
开心网文件地址为: http://www.kaixin001.com/group/file.php?gid=627784&#38;fid=396176&#38;start=0
]]></description>
			<content:encoded><![CDATA[<p>随着BerkeleyDB的发展，越来越多原来与传统关系数据库打交道的开发者希望了解、学习BerkeleyDB，并且在开发过程中应用BerkeleyDB。</p>
<p>但是， 与传统的关系数据库不同， BerkeleyDB目前并不支持SQL 查询处理，使用者需要书写代码来实现类似SQL的查询。许多SQL开发者在此过程遇到不少困难。</p>
<p>为了方便SQL开发者学习BerkeleyDB, 我们提供了两篇入门指南，供大家参考。 考虑到有些朋友可能不好访问国外网站，在提供链接的同时， 我们还将这两篇指南上传至开心网BerkeleyDB群组的文件共享区，需要的可以下载阅读(不提供BerkeleyDB XML版本的该指南，因为在BerkeleyDB XML中可以直接使用功能强大的XQuery来查询内容)。</p>
<p>1  对BerkeleyDB</p>
<p>指南地址为：<a href="http://www.oracle.com/technology/pub/articles/seltzer-berkeleydb-sql.html"> Guide to Oracle Berkeley DB for SQL Developers</a></p>
<p>开心网文件地址：<a href="http://www.kaixin001.com/group/file.php?gid=627784&amp;fid=401933&amp;start=0">http://www.kaixin001.com/group/file.php?gid=627784&amp;fid=401933&amp;start=0</a></p>
<p>2 对BerkeleyDB Java Edition</p>
<p>指南地址为： <strong></strong> <a class="bodylink" href="http://www.oracle.com/technology/products/berkeley-db/pdf/performing%20queries%20in%20oracle%20berkeley%20db%20java%20edition.pdf">Performing Queries in Oracle Berkeley DB Java Edition </a></p>
<p>开心网文件地址为: <a href="http://www.kaixin001.com/group/file.php?gid=627784&amp;fid=396176&amp;start=0">http://www.kaixin001.com/group/file.php?gid=627784&amp;fid=396176&amp;start=0</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.bdbchina.com/2009/08/sql%e5%bc%80%e5%8f%91%e8%80%85%e7%9a%84berkeleydb%e5%85%a5%e9%97%a8%e6%8c%87%e5%8d%97/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>BerkeleyDB在开心网上有群组了</title>
		<link>http://www.bdbchina.com/2009/08/berkeleydb%e5%9c%a8%e5%bc%80%e5%bf%83%e7%bd%91%e4%b8%8a%e6%9c%89%e7%be%a4%e7%bb%84%e4%ba%86/</link>
		<comments>http://www.bdbchina.com/2009/08/berkeleydb%e5%9c%a8%e5%bc%80%e5%bf%83%e7%bd%91%e4%b8%8a%e6%9c%89%e7%be%a4%e7%bb%84%e4%ba%86/#comments</comments>
		<pubDate>Wed, 05 Aug 2009 02:30:50 +0000</pubDate>
		<dc:creator>Winter</dc:creator>
				<category><![CDATA[Berkeley DB]]></category>
		<category><![CDATA[Berkeley DB JE]]></category>
		<category><![CDATA[Berkeley DB XML]]></category>
		<category><![CDATA[Winter Zhang]]></category>
		<category><![CDATA[bdb]]></category>

		<guid isPermaLink="false">http://www.bdbchina.com/?p=463</guid>
		<description><![CDATA[大家好，为了更好的与大家进行交流，也为了让大家更方便地在中国获得BerkeleyDB的有关资源（源代码，安装程序，文档，视频以及音频资料等），我们在开心网上建立了一个群组，地址是： http://www.kaixin001.com/group/group.php?gid=627784。
欢迎大家踊跃加入，和我们分享BerkeleyDB的知识。我们欢迎大家多提宝贵意见，我们将根据这些意见不断完善群组的内容。谢谢！
群组管理员正在招募中，欢迎大家积极报名。
]]></description>
			<content:encoded><![CDATA[<p>大家好，为了更好的与大家进行交流，也为了让大家更方便地在中国获得BerkeleyDB的有关资源（源代码，安装程序，文档，视频以及音频资料等），我们在开心网上建立了一个群组，地址是： <a href="http://www.kaixin001.com/group/group.php?gid=627784">http://www.kaixin001.com/group/group.php?gid=627784</a>。</p>
<p>欢迎大家踊跃加入，和我们分享BerkeleyDB的知识。我们欢迎大家多提宝贵意见，我们将根据这些意见不断完善群组的内容。谢谢！</p>
<p><strong>群组管理员正在招募中，欢迎大家积极报名。</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.bdbchina.com/2009/08/berkeleydb%e5%9c%a8%e5%bc%80%e5%bf%83%e7%bd%91%e4%b8%8a%e6%9c%89%e7%be%a4%e7%bb%84%e4%ba%86/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>使用Visual C++ 2005对Oracle BerkeleyDB 进行最小化编译</title>
		<link>http://www.bdbchina.com/2009/06/%e4%bd%bf%e7%94%a8visual-c-2005%e5%af%b9oracle-berkeleydb-%e8%bf%9b%e8%a1%8c%e6%9c%80%e5%b0%8f%e5%8c%96%e7%bc%96%e8%af%91/</link>
		<comments>http://www.bdbchina.com/2009/06/%e4%bd%bf%e7%94%a8visual-c-2005%e5%af%b9oracle-berkeleydb-%e8%bf%9b%e8%a1%8c%e6%9c%80%e5%b0%8f%e5%8c%96%e7%bc%96%e8%af%91/#comments</comments>
		<pubDate>Fri, 19 Jun 2009 07:13:56 +0000</pubDate>
		<dc:creator>Winter</dc:creator>
				<category><![CDATA[Berkeley DB]]></category>
		<category><![CDATA[Winter Zhang]]></category>
		<category><![CDATA[bdb]]></category>
		<category><![CDATA[VC2005]]></category>

		<guid isPermaLink="false">http://www.bdbchina.com/?p=318</guid>
		<description><![CDATA[1 最小化编译(Small Build)介绍
在 使用Visual C++ 2005编译Oracle Berkeley DB中， 我们介绍了如何用Visual C++ 2005来编译BerkeleyDB的通用库以及相应工具、例子的过程。 所谓通用，是指所有功能都被开启了，这是默认的配置。 但是， 默认配置对于某些特定场景来说，是冗余的。 举例来说， 嵌入式设备的内存有限， 要求运行的程序使用尽量少的内存；另一方面，许多嵌入式设备上不具备某些功能， 比如网络访问，多线程支持， 加密支持等等，因而Berkeley DB提供的相关功能不是必须的。 一句话，为了满足某些特殊使用场景， Berkeley DB提供了Small Build选项。
Small Build是指编译一个精简的函数库以及相应的工具、例子， 它是对通用编译的精简化。 首先， 通用编译会提供4中存取方法：Btree、Hash、Queue、Recno，但是在small Build中， 只提供了对Btree的支持。 其次， Small Build取消了以下功能：CRYPTO(加密/解密支持)、Replication(高可用性支持)、Verify(存取方法验证支持)。 通过这些精简化， Berkeley DB大大降低了编译后生成的类库的大小。
本文介绍了如何在Windows上用VC++2005 编译Oracle Berkeley DB 4.7.25 Small Build版本。
关于下载BerkeleyDB以及用VC++2005打开工程BerkeleyDB的工程文件，请参见使用Visual C++ 2005编译Oracle Berkeley DB。
2  编译Small Library(最小化函数库)
打开工程文件之后，选择编译类型(本文是Release x86 Win32)，鼠标右键单击项目db_small， 选择build，就开始编译Small Library了。

编译完成之后，就可以看到产生的Small Library了。Release编译类型产生的文件名为：libdb_small47s.lib。



3 基于Small Library编译工具程序和示例程序。
默认情况下，各种工具程序(db_deadlock等等)和示例程序(ex_access等等)都是依赖于通用函数库，而不是Small [...]]]></description>
			<content:encoded><![CDATA[<p>1 最小化编译(Small Build)介绍</p>
<p>在 <a title="使用Visual C++ 2005编译Oracle Berkeley DB" href="http://www.bdbchina.com/2009/04/使用visual-c-2005编译oracle-berkeley-db" target="_blank">使用Visual C++ 2005编译Oracle Berkeley DB</a>中， 我们介绍了如何用Visual C++ 2005来编译BerkeleyDB的通用库以及相应工具、例子的过程。 所谓通用，是指所有功能都被开启了，这是默认的配置。 但是， 默认配置对于某些特定场景来说，是冗余的。 举例来说， 嵌入式设备的内存有限， 要求运行的程序使用尽量少的内存；另一方面，许多嵌入式设备上不具备某些功能， 比如网络访问，多线程支持， 加密支持等等，因而Berkeley DB提供的相关功能不是必须的。 一句话，为了满足某些特殊使用场景， Berkeley DB提供了Small Build选项。</p>
<p>Small Build是指编译一个精简的函数库以及相应的工具、例子， 它是对通用编译的精简化。 首先， 通用编译会提供4中存取方法：Btree、Hash、Queue、Recno，但是在small Build中， 只提供了对Btree的支持。 其次， Small Build取消了以下功能：CRYPTO(加密/解密支持)、Replication(高可用性支持)、Verify(存取方法验证支持)。 通过这些精简化， Berkeley DB大大降低了编译后生成的类库的大小。</p>
<p class="MsoNormal"><span style="font-family: 宋体;">本文介绍了如何在</span><span lang="EN-US">Windows</span><span style="font-family: 宋体;">上用</span><span lang="EN-US">VC++2005 </span><span style="font-family: 宋体;">编译</span><span lang="EN-US">Oracle Berkeley DB 4.7.25 Small Build</span><span style="font-family: 宋体;">版本</span><span lang="EN-US">。</span></p>
<p class="MsoNormal"><span lang="EN-US"><span id="more-318"></span></span>关于下载BerkeleyDB以及用VC++2005打开工程BerkeleyDB的工程文件<span lang="EN-US">，请参见<a title=" 使用Visual C++ 2005编译Oracle Berkeley DB" href="http://www.bdbchina.com/2009/04/%E4%BD%BF%E7%94%A8visual-c-2005%E7%BC%96%E8%AF%91oracle-berkeley-db" target="_blank">使用Visual C++ 2005编译Oracle Berkeley DB</a>。</span></p>
<p class="MsoNormal">2  编译Small Library(最小化函数库)</p>
<p class="MsoNormal">打开工程文件之后，<span style="font-family: 宋体;">选择编译类型</span><span lang="EN-US">(</span><span style="font-family: 宋体;">本文是</span><span lang="EN-US">Release x86 Win32)，</span><span style="font-family: 宋体;">鼠标右键单击项目db_small</span><span lang="EN-US">， </span><span style="font-family: 宋体;">选择</span><span lang="EN-US">build，</span><span style="font-family: 宋体;">就开始编译Small Library了。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;"><img class="alignnone size-full wp-image-323" src="http://www.bdbchina.com/wp-content/uploads/2009/06/11.jpg" alt="11" width="510" height="621" /></span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">编译完成之后，就可以看到产生的Small Library了。Release编译类型产生的文件名为：libdb_small47s.lib。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;"><img class="alignnone size-full wp-image-324" src="http://www.bdbchina.com/wp-content/uploads/2009/06/2.jpg" alt="2" width="599" height="374" /></span></p>
<p class="MsoNormal"><span style="font-family: 宋体;"><br />
</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">3 基于Small Library编译工具程序和示例程序。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">默认情况下，各种工具程序(db_deadlock等等)和示例程序(ex_access等等)都是依赖于通用函数库，而不是Small Library。但实际上，</span><span style="font-family: 宋体;">依赖于Small Library，</span><span style="font-family: 宋体;">他们也能正确运行。通常，为了验证Small Library的正确性，以及在嵌入式设备上诊断信息，也需要基于Small Library编译出这些程序。但是，在直接点击一个项目build之前，需要对这个项目作若干必要配置更改。下面就以编译db_deadlock来说明这个过程。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">3.1 修改依赖性</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">默认情况下，db_deadlock项目依赖于db_dll(通用函数库),这里要改成对db_small的依赖。具体操作过程是：鼠标单击选中工程文件，而后选择菜单 Project-&gt;Project Dependencies, 选择Dependencies页， 在Projects下拉列表中选择db_deadlock, 在Depends on中，将db_dll前的勾去掉，并在db_small前面打勾。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;"><img class="alignnone size-full wp-image-325" src="http://www.bdbchina.com/wp-content/uploads/2009/06/3.jpg" alt="3" width="515" height="471" /></span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">3.2 修改项目属性</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">默认情况下，db_deadlock项目使用通用的设置进行编译，要使用Small Library，并且要使得程序基于Small Library能够顺利编译，需要修改一下项目的某些属性。右键单击db_deadlock，选择properties就可以看到db_deadlock的属性页，选择并展开Configuration Properties就可以看到有许多分类，本处要修改的两个属性分别位于C/C++和Linker这两个分类之中。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">3.2.1 使用最小化设置来编译该项目。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">展开C/C++分类，选择Command Line, 而后在右边的Additional options空白中填入/D &#8220;HAVE_SMALLBUILD&#8221;</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;"><img class="alignnone size-full wp-image-326" src="http://www.bdbchina.com/wp-content/uploads/2009/06/4.jpg" alt="4" width="743" height="586" /></span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">3.2.2 修改依赖的库文件，让db_deadlock使用编译出来的Small Library。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">展开Linker分类，选择Input,在右边的Additional Dependencies中，用libdb_small47s.lib覆盖原有内容(libdb47.lib)。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;"><img class="alignnone size-full wp-image-327" src="http://www.bdbchina.com/wp-content/uploads/2009/06/5.jpg" alt="5" width="742" height="577" /></span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">完成这些修改之后，如同编译db_small一样，右键单击db_deadlock，而后选择build，就编译出了基于Small Library的db_deadlock程序了。</span></p>
<p class="MsoNormal">4  运行示例程序</p>
<p class="MsoNormal"><span lang="EN-US">ex_access是Oracle Berkeley DB自带的一个示例程序， 该程序将用户输入的字符串作为关键字(key)，将字符串倒置作为数据(data)，而后将此键值对存入BerkeleyDB数据库。 当用户键入exit时，该程序将显示数据库的内容， 而后退出。</span>以和db_deadlock相同的方式，修改ex_access项目， 而后再编译ex_access项目，就编译出基于Small Library的ex_access，可以运行它来验证一下Small Library的正确性。</p>
<p class="MsoNormal"><img class="alignnone size-full wp-image-328" src="http://www.bdbchina.com/wp-content/uploads/2009/06/6.jpg" alt="6" width="664" height="435" /></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span lang="EN-US">5 总结<br />
</span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span lang="EN-US"><span> </span></span><span style="font-family: 宋体;">在掌握了用VC++2005对BerkeleyDB进行通用编译的方法之后，进行最小化编译也是比较容易的。 如果读者出现什么问题，可以与我进行交流。 </span></p>
<p class="MsoNormal">
<p class="MsoNormal">
]]></content:encoded>
			<wfw:commentRss>http://www.bdbchina.com/2009/06/%e4%bd%bf%e7%94%a8visual-c-2005%e5%af%b9oracle-berkeleydb-%e8%bf%9b%e8%a1%8c%e6%9c%80%e5%b0%8f%e5%8c%96%e7%bc%96%e8%af%91/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用Visual C++ 2005编译Oracle Berkeley DB</title>
		<link>http://www.bdbchina.com/2009/04/%e4%bd%bf%e7%94%a8visual-c-2005%e7%bc%96%e8%af%91oracle-berkeley-db/</link>
		<comments>http://www.bdbchina.com/2009/04/%e4%bd%bf%e7%94%a8visual-c-2005%e7%bc%96%e8%af%91oracle-berkeley-db/#comments</comments>
		<pubDate>Wed, 15 Apr 2009 05:23:15 +0000</pubDate>
		<dc:creator>Winter</dc:creator>
				<category><![CDATA[Berkeley DB]]></category>
		<category><![CDATA[Winter Zhang]]></category>
		<category><![CDATA[bdb]]></category>
		<category><![CDATA[VC2005]]></category>

		<guid isPermaLink="false">http://www.bdbchina.com/?p=244</guid>
		<description><![CDATA[本文简要介绍了Oracle Berkeley DB, 描述了用Microsoft Visual Studio 2005 在Windows 平台编译Oracle Berkeley DB的过程.]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal"><span lang="EN-US">1 </span><span style="font-family: 宋体;">前言</span></p>
<p class="MsoNormal"><span lang="EN-US">Oracle Berkeley DB </span><span style="font-family: 宋体;">是行业领先的可嵌入开源数据库引擎，它为开发人员提供了无需管理的快速、可靠的本地持久性。它是一个直接链接到您应用程序的库。您的应用程序进行简单的函数调用，而不是向远程服务器发送消息，从而消除了客户端</span><span lang="EN-US">-</span><span style="font-family: 宋体;">服务器体系结构的性能损耗。</span> <span style="font-family: 宋体;">它消除了</span><span lang="EN-US"> SQL </span><span style="font-family: 宋体;">查询处理的开销，从而使应用程序按可预测的访问模式更快地运行。它提供了事务和恢复</span><span lang="EN-US">，</span><span style="font-family: 宋体;">用于高并发的锁定，</span><span style="font-family: 宋体;">多进程和多线程</span><span lang="EN-US">， </span><span style="font-family: 宋体;">冷热备份</span><span lang="EN-US">，</span><span style="font-family: 宋体;">以及用于高可用性应用程序的单主复制</span><span lang="EN-US">。</span><span style="font-family: 宋体;">在提供强大功能的同时</span><span lang="EN-US">， </span><span style="font-family: 宋体;">它还具有强大的可配置性</span><span lang="EN-US">， </span><span style="font-family: 宋体;">使得开发人员能够控制它行为的众多方面</span><span lang="EN-US">。</span></p>
<p class="MsoNormal"><span lang="EN-US"></span></p>
<p class="MsoNormal"><span lang="EN-US"> </span><span lang="EN-US">Visual C++ 2005</span><span style="font-family: 宋体;">是</span><span lang="EN-US">Windows </span><span style="font-family: 宋体;">平台上最为流行的企业级</span><span lang="EN-US">C/C++</span><span style="font-family: 宋体;">编译器</span><span lang="EN-US">，</span><span style="font-family: 宋体;">能够在</span><span lang="EN-US">windows</span><span style="font-family: 宋体;">平台上产生高效的二进制代码</span><span lang="EN-US">。</span><span lang="EN-US">Visual C++ 2005是Visual Studio 2005的重要组成部分，其安装包含在Visual Studio 2005的安装中，并且其与其他语言的编译器共用一个集成开发环境（IDE)。<br />
</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">本文介绍了如何在</span><span lang="EN-US">Windows</span><span style="font-family: 宋体;">上用</span><span lang="EN-US">VC++2005 </span><span style="font-family: 宋体;">编译</span><span lang="EN-US">Oracle Berkeley DB 4.7.25 </span><span style="font-family: 宋体;">版本</span><span lang="EN-US">。</span></p>
<p class="MsoNormal"><span lang="EN-US"><span id="more-244"></span><br />
</span></p>
<p class="MsoNormal"><span lang="EN-US">2 </span><span style="font-family: 宋体;">下载</span><span lang="EN-US">Oracle Berkeley DB</span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span lang="EN-US">Oracle Berkeley DB </span><span style="font-family: 宋体;">可以从此处下载</span><span lang="EN-US">: <a href="http://www.oracle.com/technology/global/cn/software/products/berkeley-db/db/index.html">http://www.oracle.com/technology/global/cn/software/products/berkeley-db/db/index.html</a></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><!--[if !mso]><br />
<mce:style><!  v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} --></p>
<p><!--[endif]--><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:PunctuationKerning /> <w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing> <w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery> <w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery> <w:Compatibility> <w:SpaceForUL /> <w:BalanceSingleByteDoubleByteWidth /> <w:DoNotLeaveBackslashAlone /> <w:ULTrailSpace /> <w:DoNotExpandShiftReturn /> <w:AdjustLineHeightInTable /> <w:UseFELayout /> </w:Compatibility> <w:DoNotOptimizeForBrowser /> </w:WordDocument> </xml><![endif]--> <span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US"><!--[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600"  o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f"  stroked="f"> <v:stroke joinstyle="miter" /> <v:formulas> <v:f eqn="if lineDrawn pixelLineWidth 0" /> <v:f eqn="sum @0 1 0" /> <v:f eqn="sum 0 0 @1" /> <v:f eqn="prod @2 1 2" /> <v:f eqn="prod @3 21600 pixelWidth" /> <v:f eqn="prod @3 21600 pixelHeight" /> <v:f eqn="sum @0 0 1" /> <v:f eqn="prod @6 1 2" /> <v:f eqn="prod @7 21600 pixelWidth" /> <v:f eqn="sum @8 21600 0" /> <v:f eqn="prod @7 21600 pixelHeight" /> <v:f eqn="sum @10 21600 0" /> </v:formulas> <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect" /> <o:lock v:ext="edit" aspectratio="t" /> </v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" style='width:377.25pt;  height:146.25pt'> <v:imagedata src="file:///C:/DOCUME~1/winter/LOCALS~1/Temp/msoclip1/07/clip_image001.png" mce_src="file:///C:/DOCUME~1/winter/LOCALS~1/Temp/msoclip1/07/clip_image001.png"   o:title="" /> </v:shape><![endif]--><!--[if !vml]--><img class="alignnone size-full wp-image-251" title="1" src="http://www.bdbchina.com/wp-content/uploads/2009/04/1.jpg" alt="1" width="553" height="225" /><!--[endif]--></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span lang="EN-US"><!--[if gte vml 1]><v:shapetype  id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"  path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"> <v:stroke joinstyle="miter" /> <v:formulas> <v:f eqn="if lineDrawn pixelLineWidth 0" /> <v:f eqn="sum @0 1 0" /> <v:f eqn="sum 0 0 @1" /> <v:f eqn="prod @2 1 2" /> <v:f eqn="prod @3 21600 pixelWidth" /> <v:f eqn="prod @3 21600 pixelHeight" /> <v:f eqn="sum @0 0 1" /> <v:f eqn="prod @6 1 2" /> <v:f eqn="prod @7 21600 pixelWidth" /> <v:f eqn="sum @8 21600 0" /> <v:f eqn="prod @7 21600 pixelHeight" /> <v:f eqn="sum @10 21600 0" /> </v:formulas> <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect" /> <o:lock v:ext="edit" aspectratio="t" /> </v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" style='width:377.25pt;  height:146.25pt'> <v:imagedata src="file:///C:/DOCUME~1/winter/LOCALS~1/Temp/msoclip1/05/clip_image001.png" mce_src="file:///C:/DOCUME~1/winter/LOCALS~1/Temp/msoclip1/05/clip_image001.png"   o:title="" /> </v:shape><![endif]--><!--[if !vml]--><!--[endif]--></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-family: 宋体;">点击</span><span lang="EN-US">Berkeley DB 4.7.25.NC.zip，</span><span style="font-family: 宋体;">由于本文描述的是如何从源代码编译出</span><span lang="EN-US">Berkeley DB，</span><span style="font-family: 宋体;">故而不选择下载</span><span lang="EN-US">Windows</span><span style="font-family: 宋体;">安装程序</span><span lang="EN-US">。</span><span style="font-family: 宋体;">下载完成后</span><span lang="EN-US">，</span><span style="font-family: 宋体;">解压该文件</span><span lang="EN-US">，</span><span style="font-family: 宋体;">解压后进入</span><span lang="EN-US">db-4.7.25.NC， 我们</span><span style="font-family: 宋体;">可以发现该文件夹的内容</span><span lang="EN-US">：</span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span lang="EN-US"><img class="alignnone size-full wp-image-272" title="22" src="http://www.bdbchina.com/wp-content/uploads/2009/04/22.jpg" alt="22" width="491" height="517" /><br />
</span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span lang="EN-US"><!--[if gte vml 1]><v:shape  id="_x0000_i1026" type="#_x0000_t75" style='width:414.75pt;height:288.75pt'> <v:imagedata src="file:///C:/DOCUME~1/winter/LOCALS~1/Temp/msoclip1/05/clip_image003.png" mce_src="file:///C:/DOCUME~1/winter/LOCALS~1/Temp/msoclip1/05/clip_image003.png"   o:title="" /> </v:shape><![endif]--><!--[if !vml]--><!--[endif]--></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span lang="EN-US"><!--[if !supportEmptyParas]--> <!--[endif]--></span></p>
<p class="MsoNormal" style="text-align: left;" align="left">
<p class="MsoNormal" style="text-align: left;" align="left"><span lang="EN-US">3 </span><span style="font-family: 宋体;">编译</span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-family: 宋体;">进入</span><span lang="EN-US">build_windows</span><span style="font-family: 宋体;">目录，</span><span style="font-family: 宋体;">我们可发现该目录下有一个工程文件</span><span lang="EN-US">(.dsw)</span><span style="font-family: 宋体;">和很多的项目文件</span><span lang="EN-US">(.dsp)，</span><span style="font-family: 宋体;">这里我们选择使用工程文件</span><span lang="EN-US">Berkeley_DB.dsw：</span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span lang="EN-US"><!--[if gte vml 1]><v:shape  id="_x0000_i1027" type="#_x0000_t75" style='width:414.75pt;height:276.75pt'> <v:imagedata src="file:///C:/DOCUME~1/winter/LOCALS~1/Temp/msoclip1/05/clip_image005.png" mce_src="file:///C:/DOCUME~1/winter/LOCALS~1/Temp/msoclip1/05/clip_image005.png"   o:title="" /> </v:shape><![endif]--><!--[if !vml]--><!--[endif]--></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-family: 宋体;">打开</span><span lang="EN-US">Microsoft Visual Studio 2005的IDE， </span><span style="font-family: 宋体;">选择菜单</span><span lang="EN-US">-&gt;File-&gt;Open-&gt;Project/Solution，</span><span style="font-family: 宋体;">打开</span><span lang="EN-US">build_windows</span><span style="font-family: 宋体;">目录下的</span><span lang="EN-US">Berkeley_DB.dsw</span><span style="font-family: 宋体;">文件</span><span lang="EN-US">：</span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span lang="EN-US"><img class="alignnone size-full wp-image-274" title="34" src="http://www.bdbchina.com/wp-content/uploads/2009/04/34.jpg" alt="34" width="561" height="453" /><br />
</span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span lang="EN-US"><!--[if gte vml 1]><v:shape  id="_x0000_i1028" type="#_x0000_t75" style='width:414.75pt;height:214.5pt'> <v:imagedata src="file:///C:/DOCUME~1/winter/LOCALS~1/Temp/msoclip1/05/clip_image007.png" mce_src="file:///C:/DOCUME~1/winter/LOCALS~1/Temp/msoclip1/05/clip_image007.png"   o:title="" /> </v:shape><![endif]--><!--[if !vml]--><!--[endif]--></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-family: 宋体;">打开后</span><span lang="EN-US">，</span><span style="font-family: 宋体;">会提示要求进行</span><span lang="EN-US">project</span><span style="font-family: 宋体;">文件的格式转换</span><span lang="EN-US">，</span><span style="font-family: 宋体;">选择</span><span lang="EN-US">”Yes To All”：</span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span lang="EN-US"><img class="alignnone size-full wp-image-257" title="41" src="http://www.bdbchina.com/wp-content/uploads/2009/04/41.jpg" alt="41" width="471" height="313" /></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span lang="EN-US"><!--[if gte vml 1]><v:shape  id="_x0000_i1029" type="#_x0000_t75" style='width:385.5pt;height:221.25pt'> <v:imagedata src="file:///C:/DOCUME~1/winter/LOCALS~1/Temp/msoclip1/05/clip_image009.png" mce_src="file:///C:/DOCUME~1/winter/LOCALS~1/Temp/msoclip1/05/clip_image009.png"   o:title="" /> </v:shape><![endif]--><!--[if !vml]--><!--[endif]--></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-family: 宋体;">转换后</span><span lang="EN-US">， </span><span style="font-family: 宋体;">选择编译类型</span><span lang="EN-US">(</span><span style="font-family: 宋体;">本文是</span><span lang="EN-US">Debug x86 Win32)，</span><span style="font-family: 宋体;">鼠标右键单击</span><span lang="EN-US">build_all， </span><span style="font-family: 宋体;">选择</span><span lang="EN-US">build，</span><span style="font-family: 宋体;">就开始了编译过程</span><span lang="EN-US">：</span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span lang="EN-US"><img class="alignnone size-full wp-image-258" title="5" src="http://www.bdbchina.com/wp-content/uploads/2009/04/5.jpg" alt="5" width="551" height="600" /><br />
</span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span lang="EN-US"><!--[if !supportEmptyParas]--> <!--[endif]--></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span lang="EN-US">build_all</span><span style="font-family: 宋体;">编译默认会编译</span><span lang="EN-US">Berkeley DB </span><span style="font-family: 宋体;">静态库</span><span lang="EN-US">、</span><span style="font-family: 宋体;">动态库以及一系列的工具程序和示例程序</span><span lang="EN-US">。</span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-family: 宋体;">编译完成后</span><span lang="EN-US">，</span><span style="font-family: 宋体;">可以看到</span><span lang="EN-US">build_windows</span><span style="font-family: 宋体;">底下多了一个</span><span lang="EN-US">Debug</span><span style="font-family: 宋体;">目录</span><span lang="EN-US">，</span><span style="font-family: 宋体;">进入</span><span lang="EN-US">Debug</span><span style="font-family: 宋体;">目录，</span><span style="font-family: 宋体;">我们可以看到编译出来的文件</span><span lang="EN-US">：</span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span lang="EN-US"><!--[if gte vml 1]><v:shape  id="_x0000_i1031" type="#_x0000_t75" style='width:414.75pt;height:307.5pt'> <v:imagedata src="file:///C:/DOCUME~1/winter/LOCALS~1/Temp/msoclip1/05/clip_image013.png" mce_src="file:///C:/DOCUME~1/winter/LOCALS~1/Temp/msoclip1/05/clip_image013.png"   o:title="" /> </v:shape><![endif]--><!--[if !vml]--></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span lang="EN-US"><img class="alignnone size-full wp-image-276" title="62" src="http://www.bdbchina.com/wp-content/uploads/2009/04/62.jpg" alt="62" width="582" height="478" /><br />
</span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span lang="EN-US">4 运行示例程序</span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span lang="EN-US">ex_access是Oracle Berkeley DB自带的一个示例程序， 该程序将用户输入的字符串作为关键字(key)，将字符串倒置作为数据(data)，而后将此键值对存入BerkeleyDB数据库。 当用户键入exit时，该程序将显示数据库的内容， 而后退出：</span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span lang="EN-US"><img class="alignnone size-full wp-image-278" title="71" src="http://www.bdbchina.com/wp-content/uploads/2009/04/71.jpg" alt="71" width="456" height="306" /><br />
</span></p>
<p class="MsoNormal" style="text-align: left;" align="left">
<p class="MsoNormal" style="text-align: left;" align="left"><span lang="EN-US">5 总结<br />
</span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span lang="EN-US"><span> </span></span><span style="font-family: 宋体;">在</span><span lang="EN-US">Windows</span><span style="font-family: 宋体;">上</span><span style="font-family: 宋体;">用</span><span lang="EN-US">Visual C++2005</span><span style="font-family: 宋体;">编译</span><span lang="EN-US">Berkeley DB</span><span style="font-family: 宋体;">是比较容易的</span><span lang="EN-US">，</span><span style="font-family: 宋体;">读者如果出现了什么编译上的问题</span><span lang="EN-US">，</span><span style="font-family: 宋体;">可以与我交流</span><span lang="EN-US">。 </span><span style="font-family: 宋体;">在后续章节中</span><span lang="EN-US">，</span><span style="font-family: 宋体;">我还将介绍命令行的编译方法</span><span lang="EN-US">， </span><span style="font-family: 宋体;">以及使用现今流行的</span><span lang="EN-US">Code::Blocks</span><span style="font-family: 宋体;">编译</span><span lang="EN-US">Oracle Berkeley DB</span><span style="font-family: 宋体;">的方法</span><span lang="EN-US">。</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.bdbchina.com/2009/04/%e4%bd%bf%e7%94%a8visual-c-2005%e7%bc%96%e8%af%91oracle-berkeley-db/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>使用JasperReport显示BerkeleyDB数据库的内容</title>
		<link>http://www.bdbchina.com/2009/02/%e4%bd%bf%e7%94%a8jasperreport%e6%98%be%e7%a4%baberkeleydb%e6%95%b0%e6%8d%ae%e5%ba%93%e7%9a%84%e5%86%85%e5%ae%b9/</link>
		<comments>http://www.bdbchina.com/2009/02/%e4%bd%bf%e7%94%a8jasperreport%e6%98%be%e7%a4%baberkeleydb%e6%95%b0%e6%8d%ae%e5%ba%93%e7%9a%84%e5%86%85%e5%ae%b9/#comments</comments>
		<pubDate>Wed, 11 Feb 2009 09:14:52 +0000</pubDate>
		<dc:creator>Winter</dc:creator>
				<category><![CDATA[Berkeley DB]]></category>
		<category><![CDATA[Winter Zhang]]></category>
		<category><![CDATA[bdb]]></category>

		<guid isPermaLink="false">http://www.bdbchina.com/?p=75</guid>
		<description><![CDATA[JasperReport是一个流行的Java开源报表工具,BerkeleyDB是一个流行的开源嵌入式数据库产品. 长久以来,JasperReport无法显示BerkeleyDB中的数据. 但是,现在这一状况得到了改善.JasperForge在2008-08-05正式发布了BerkeleyDB的Driver,这意味着,以后可以使用 JasperReport来显示存储于BerkeleyDB中的内容了.

本文将主要介绍如何利用JasperReport来显示 BerkeleyDB的数据.BerkeleyDB分为三个类别,Core Edition, Java Edition,和XML Edition. 其中Core Edition使用最为广泛,故而,本文针对的是Core Edition最新的Release, 4.7.25. 为了给读者一个直观的印象.本文将创建一个使用BerkeleyDB用于存储学生信息的数据库,而后使用JasperReport显示其内容.]]></description>
			<content:encoded><![CDATA[<p>JasperReport是一个流行的Java开源报表工具,BerkeleyDB是一个流行的开源嵌入式数据库产品. 长久以来,JasperReport无法显示BerkeleyDB中的数据. 但是,现在这一状况得到了改善.JasperForge在2008-08-05正式发布了BerkeleyDB的Driver,这意味着,以后可以使用 JasperReport来显示存储于BerkeleyDB中的内容了.</p>
<p>本文将主要介绍如何利用JasperReport来显示 BerkeleyDB的数据.BerkeleyDB产品家族包含了C 语言 Edition（Core）, Java Edition,和XML Edition. 本文针对的是Core Edition最新的Release, 4.7.25. 为了给读者一个直观的印象.本文将创建一个使用BerkeleyDB用于存储学生信息的数据库,而后使用JasperReport显示其内容.</p>
<p><span id="more-75"></span></p>
<p>1 下载并安装/编译BerkeleyDB,下载地址为<br />
http://www.oracle.com/technology/software/products/berkeley-db/db/index.html<br />
可以选择下载.msi或者压缩文件,如果下载的是压缩文件,需要自己来编译.BerkeleyDB提供了针对Linux的configure/make和针对windows的.sln和.dsw文件,编译方法不在此累述.<br />
需要注意的是,本处需要java的支持,故而,需要编译java的库. 对于configure/make而言,在configure的时候需要&#8211;enable-java,用.sln/.dsw的则需要编译Project db_java.</p>
<p>2 创建Student数据库,本处只给出C代码的片段.<br />
static char *env_home=&#8221;D:/tmp/jasper-env&#8221;;<br />
/* This is the struct for student */<br />
typedef struct student {<br />
char student_no[20]; /* student no. */<br />
char student_name[20]; /* student name */<br />
char sexuality[8]; /* sex */<br />
int sex_code;  /* code for sex male as one, female as two, and 0 stands for unknown.*/<br />
char class_no[20]; /* class no. */<br />
char class_name[100]; /* class name */<br />
char brief_class_name[60]; /* brief class name */<br />
char major_name[100]; /* major name */<br />
char register_daymonth[20]; /* the year and month for entering */<br />
char nationality[50]; /* nationality */<br />
char birthday[20]; /* the year and month for birthday */<br />
char id_no[30]; /* ID card no. */<br />
}STUDENT;<br />
static char *student_data_infile=&#8221;D:/tmp/stu/student.data.out&#8221;;<br />
static char *student_db_name=&#8221;student.db&#8221;;</p>
<p>int create_db_of_student(int argc, char *argv[]){<br />
DB_ENV *dbep;<br />
DB *dbp;<br />
STUDENT stu;<br />
DBT dbt_key,dbt_data;<br />
char buff[500];<br />
int len=0;<br />
FILE *srcfp=NULL;<br />
char *lineptr=NULL;<br />
int intval=0;<br />
int ret=0;<br />
u_int32_t envoflag=DB_CREATE|DB_RECOVER|DB_INIT_TXN|DB_INIT_MPOOL|DB_INIT_LOCK|DB_INIT_LOG;</p>
<p>ret=db_env_create(&amp;dbep,0);<br />
ret=dbep-&gt;remove(dbep,env_home,DB_FORCE);<br />
ret=db_env_create(&amp;dbep,0);<br />
ret=dbep-&gt;open(dbep,env_home,envoflag,0);<br />
ret=db_create(&amp;dbp,dbep,0);<br />
ret=dbp-&gt;remove(dbp,student_db_name,NULL,0);<br />
ret=db_create(&amp;dbp,dbep,0);<br />
ret=dbp-&gt;open(dbp,NULL,student_db_name,NULL,DB_BTREE,DB_CREATE,0);</p>
<p>srcfp=fopen(student_data_infile,&#8221;r&#8221;);</p>
<p>while(1){</p>
<p>/*field student_no*/<br />
lineptr=fgets(buff,500,srcfp);<br />
if(lineptr==NULL)<br />
break ;<br />
if(buff[strlen(lineptr)-1]==&#8217;n')<br />
buff[strlen(lineptr)-1]=&#8217; ';<br />
memset(stu.student_no,0,sizeof(stu.student_no));<br />
sprintf(stu.student_no,&#8221;%s&#8221;,buff);</p>
<p>/*field student_name*/<br />
lineptr=fgets(buff,500,srcfp);<br />
if(lineptr==NULL)<br />
break ;<br />
if(buff[strlen(lineptr)-1]==&#8217;n')<br />
buff[strlen(lineptr)-1]=&#8217; ';<br />
memset(stu.student_name,0,sizeof(stu.student_name));<br />
sprintf(stu.student_name,&#8221;%s&#8221;,buff);</p>
<p>/*field sexuality*/<br />
lineptr=fgets(buff,500,srcfp);<br />
if(lineptr==NULL)<br />
break ;<br />
if(buff[strlen(lineptr)-1]==&#8217;n')<br />
buff[strlen(lineptr)-1]=&#8217; ';<br />
memset(stu.sexuality,0,sizeof(stu.sexuality));<br />
sprintf(stu.sexuality,&#8221;%s&#8221;,buff);</p>
<p>/*field sex_code*/<br />
lineptr=fgets(buff,500,srcfp);<br />
if(lineptr==NULL)<br />
break ;<br />
if(buff[strlen(lineptr)-1]==&#8217;n')<br />
buff[strlen(lineptr)-1]=&#8217; ';<br />
memset(&amp;stu.sex_code,0,sizeof(stu.sex_code));<br />
intval=atoi(buff);<br />
if(errno==ERANGE)<br />
intval=1;<br />
stu.sex_code=intval;</p>
<p>/*field class_no*/<br />
lineptr=fgets(buff,500,srcfp);<br />
if(lineptr==NULL)<br />
break ;<br />
if(buff[strlen(lineptr)-1]==&#8217;n')<br />
buff[strlen(lineptr)-1]=&#8217; ';<br />
memset(stu.class_no,0,sizeof(stu.class_no));<br />
sprintf(stu.class_no,&#8221;%s&#8221;,buff);</p>
<p>/*field class_name*/<br />
lineptr=fgets(buff,500,srcfp);<br />
if(lineptr==NULL)<br />
break ;<br />
if(buff[strlen(lineptr)-1]==&#8217;n')<br />
buff[strlen(lineptr)-1]=&#8217; ';<br />
memset(stu.class_name,0,sizeof(stu.class_name));<br />
sprintf(stu.class_name,&#8221;%s&#8221;,buff);</p>
<p>/*field brief_class_name*/<br />
lineptr=fgets(buff,500,srcfp);<br />
if(lineptr==NULL)<br />
break ;<br />
if(buff[strlen(lineptr)-1]==&#8217;n')<br />
buff[strlen(lineptr)-1]=&#8217; ';<br />
memset(stu.brief_class_name,0,sizeof(stu.brief_class_name));<br />
sprintf(stu.brief_class_name,&#8221;%s&#8221;,buff);</p>
<p>/*field major_name*/<br />
lineptr=fgets(buff,500,srcfp);<br />
if(lineptr==NULL)<br />
break ;<br />
if(buff[strlen(lineptr)-1]==&#8217;n')<br />
buff[strlen(lineptr)-1]=&#8217; ';<br />
memset(stu.major_name,0,sizeof(stu.major_name));<br />
sprintf(stu.major_name,&#8221;%s&#8221;,buff);</p>
<p>/*field register_daymonth*/<br />
lineptr=fgets(buff,500,srcfp);<br />
if(lineptr==NULL)<br />
break ;<br />
if(buff[strlen(lineptr)-1]==&#8217;n')<br />
buff[strlen(lineptr)-1]=&#8217; ';<br />
memset(stu.register_daymonth,0,sizeof(stu.register_daymonth));<br />
sprintf(stu.register_daymonth,&#8221;%s&#8221;,buff);</p>
<p>/*field nationality*/<br />
lineptr=fgets(buff,500,srcfp);<br />
if(lineptr==NULL)<br />
break ;<br />
if(buff[strlen(lineptr)-1]==&#8217;n')<br />
buff[strlen(lineptr)-1]=&#8217; ';<br />
memset(stu.nationality,0,sizeof(stu.nationality));<br />
sprintf(stu.nationality,&#8221;%s&#8221;,buff);</p>
<p>/*field birthday*/<br />
lineptr=fgets(buff,500,srcfp);<br />
if(lineptr==NULL)<br />
break ;<br />
if(buff[strlen(lineptr)-1]==&#8217;n')<br />
buff[strlen(lineptr)-1]=&#8217; ';<br />
memset(stu.birthday,0,sizeof(stu.birthday));<br />
sprintf(stu.birthday,&#8221;%s&#8221;,buff);</p>
<p>/*field id_no*/<br />
lineptr=fgets(buff,500,srcfp);<br />
if(lineptr==NULL)<br />
break ;<br />
if(buff[strlen(lineptr)-1]==&#8217;n')<br />
buff[strlen(lineptr)-1]=&#8217; ';<br />
memset(stu.id_no,0,sizeof(stu.id_no));<br />
sprintf(stu.id_no,&#8221;%s&#8221;,buff);</p>
<p>memset(&amp;dbt_key,0,sizeof(DBT));<br />
memset(&amp;dbt_data,0,sizeof(DBT));<br />
dbt_key.data=stu.student_no;<br />
dbt_key.size=(u_int32_t)(strlen(stu.student_no)+1);<br />
dbt_data.data=&amp;stu;<br />
dbt_data.size=sizeof(STUDENT);</p>
<p>ret=dbp-&gt;put(dbp,NULL,&amp;dbt_key,&amp;dbt_data,DB_NOOVERWRITE);<br />
if(ret)<br />
dbp-&gt;errx(dbp,&#8221;%sn&#8221;,db_strerror(ret));<br />
}</p>
<p>fclose(srcfp);<br />
ret=dbp-&gt;close(dbp,0);<br />
ret=dbep-&gt;close(dbep,0);<br />
return ret;<br />
}</p>
<p>3 编写对应的Java绑定类. 为了让JasperReport显示一个BerkeleyDB的数据库中的内容,需要为该数据库的key和data编写绑定类(Binding Class)以及JavaBeans. JavaBeans代表key或data中在java的数据如何表示,BindingClass则用来指示如何用key/data的字节数组来产生对应的 JavaBeans. BindingClass应当继承com.sleepycat.bind.tuple.TupleBinding,并且重新定义其 entryToObject和objectToEntry的方法.entryToObject将字节数组转化为对象,objectToEntry将对象转 化为字节数组.由于本处只需要前者,故而只给出entryToObject方法的一个实现.</p>
<p>技术上而言, BindingClass的编写者,应当对BerkeleyDB如何数据的字节表示相当清楚,比如某段信息在几个字节长度,或者某段信息以什么字符作为边界字符等等.如此,才能将字节解析出来,并且转化为JavaBean.</p>
<p>在编写bindingClass的时候, 需要考虑几个因素:<br />
a 系统的endian,endian决定了解析整数的方式,一般的系统都是little-endian,而java虚拟机是big-endian,如果endian不一样, 就不能使用TupleInput的函数来获得整数,需要自己逐自己处理以产生整数.</p>
<p>b 字符串的解析:C中字符串以&#8217; '结束,而Java中是以0XFF结尾,故而不能直接用TupleInput的readString来获得字符串,而new String()将会处理所有提供的长度,而不会到&#8217; '就停止,故而最好自己获得&#8217; '的位置.</p>
<p>c 对齐.对齐对结构体内部的成员地址有要求,故而,源代码定义的结构体,并非与编译期的结构体完全一致.编译器会在某些字段与字段之间加入padding字 符,以满足对其要求.此情况下,应当分析该编译器的对齐要求,并且分析编译期的实际结构体是什么样的,这样才能够解析字节数组.</p>
<p>Student Key的JavaBean:<br />
public class StudentKey {<br />
private String student_no;<br />
&#8230;..构造函数,set/get函数省略&#8230;.<br />
}</p>
<p>Student Key的绑定类:<br />
public class StudentKeyBinding extends TupleBinding {<br />
public Object entryToObject(TupleInput arg0) {<br />
byte[] bytes=arg0.getBufferBytes();<br />
String student_no=new String(bytes, 0,bytes.length-1);  //20<br />
StudentKey stuKey=new StudentKey(student_no);<br />
return stuKey;<br />
}<br />
&#8230;&#8230;objectToEntry略&#8230;&#8230;<br />
}</p>
<p>Student data的JavaBean:<br />
public class StudentData{<br />
private String student_no;<br />
private String student_name;<br />
private String sexuality;<br />
private int sex_code;<br />
private String class_no;<br />
private String class_name;<br />
private String brief_class_name;<br />
private String major_name;<br />
private String register_daymonth;<br />
private String nationality;<br />
private String birthday;<br />
private String id_no;<br />
&#8230;..构造函数,set/get函数省略&#8230;.<br />
}</p>
<p>Student Data的绑定类:<br />
public class StudentDataBinding extends TupleBinding {<br />
public Object entryToObject(TupleInput arg0) {<br />
byte[] bytes=arg0.getBufferBytes();<br />
byte[] newbytes=null;<br />
//student_no  20<br />
int loc1=0;<br />
int len1=20;<br />
newbytes=ByteTools.getEndedBytesByBorder(bytes,loc1, (byte)0);<br />
String student_no=new String(newbytes, 0,newbytes.length-1);</p>
<p>//student_name 20<br />
loc1+=len1;<br />
len1=20;<br />
newbytes=ByteTools.getEndedBytesByBorder(bytes,loc1, (byte)0);<br />
String student_name=new String(newbytes, 0,newbytes.length-1);</p>
<p>//sexuality 8<br />
loc1+=len1;<br />
len1=8;<br />
newbytes=ByteTools.getEndedBytesByBorder(bytes,loc1, (byte)0);<br />
String sexuality=new String(newbytes, 0,newbytes.length-1);</p>
<p>//sex_code 4<br />
loc1+=len1;<br />
len1=4;<br />
int sex_code=IntTools.getIntFromBytes(bytes,loc1,len1);</p>
<p>//class_no 20<br />
loc1+=len1;<br />
len1=20;<br />
newbytes=ByteTools.getEndedBytesByBorder(bytes,loc1, (byte)0);<br />
String class_no=new String(newbytes, 0,newbytes.length-1);</p>
<p>//class_name 100<br />
loc1+=len1;<br />
len1=100;<br />
newbytes=ByteTools.getEndedBytesByBorder(bytes,loc1, (byte)0);<br />
String class_name=new String(newbytes, 0,newbytes.length-1);</p>
<p>//brief_class_name 60<br />
loc1+=len1;<br />
len1=60;<br />
newbytes=ByteTools.getEndedBytesByBorder(bytes,loc1, (byte)0);<br />
String brief_class_name=new String(newbytes, 0,newbytes.length-1);</p>
<p>//major_name 100<br />
loc1+=len1;<br />
len1=100;<br />
newbytes=ByteTools.getEndedBytesByBorder(bytes,loc1, (byte)0);<br />
String major_name=new String(newbytes, 0,newbytes.length-1);</p>
<p>//register_daymonth 20<br />
loc1+=len1;<br />
len1=20;<br />
newbytes=ByteTools.getEndedBytesByBorder(bytes,loc1, (byte)0);<br />
String register_daymonth=new String(newbytes, 0,newbytes.length-1);</p>
<p>//nationality 50<br />
loc1+=len1;<br />
len1=50;<br />
newbytes=ByteTools.getEndedBytesByBorder(bytes,loc1, (byte)0);<br />
String nationality=new String(newbytes, 0,newbytes.length-1);</p>
<p>//birthday 20<br />
loc1+=len1;<br />
len1=20;<br />
newbytes=ByteTools.getEndedBytesByBorder(bytes,loc1, (byte)0);<br />
String birthday=new String(newbytes, 0,newbytes.length-1);</p>
<p>//id_no 30<br />
loc1+=len1;<br />
len1=30;<br />
newbytes=ByteTools.getEndedBytesByBorder(bytes,loc1, (byte)0);<br />
String id_no=new String(newbytes, 0,newbytes.length-1);</p>
<p>StudentData stu=new StudentData(student_no, student_name, sexuality, sex_code, class_no, class_name, brief_class_name,<br />
major_name, register_daymonth, nationality, birthday, id_no);<br />
return stu;<br />
}<br />
&#8230;&#8230;objectToEntry略&#8230;&#8230;<br />
}</p>
<p>在完成java类的编写(以上是StudentKey,StudentKeyBinding,StudentData,StudentDataBinding)之后,可以把这些类打包到一个jar中,本处打包为stu.jar.</p>
<p>4 安装JasperReport的BerkeleyDB Driver,并且建立BerkeleyDB的连接.<br />
a 下载并安装IReport, http://jasperforge.org/plugins/project/project_home.php?group_id=83<br />
b 下载Berkeley DB Driver, http://jasperforge.org/plugins/esp_frs/?group_id=170,并且解压,假设其目录为bdbdriver.<br />
c 将bdbdriver/lib下的jasperreports-bdb-&lt;version&gt;.jar复制到Ireport的lib目录下,将 bdbdriver/lib下的db-&lt;version&gt;.jar复制到Ireport的lib目录下<br />
d 将BerkeleyDB的库文件的位置加入到IReport的启动脚本中,对于windows而言,这个启动脚本是startup.bat,所以需要在Ireport guiMainFrame启动参数中加入类似于底下的内容:<br />
-Djava.library.path=&#8221;D:projectsBDB_builddbbuild_windows_ReleaseRelease&#8221;, 同时还应当保证该目录在系统环境变量PATH之中,比如可以在启动guiMainFrame前加入以下行:<br />
set PATH=D:projectsBDB_builddbbuild_windows;%PATH%<br />
或者编辑系统的环境变量,加入该路径.<br />
e 将stu.jar拷贝到Ireport的lib目录下.<br />
f 建立BerkeleyDB的连接,打开IReport, 到&#8221;Data-&gt;Connections/Data Sources&#8221;,单击&#8221;New&#8221;,选择类型为:&#8221;Oracle Berkeley DB Connection&#8221;后单击&#8221;Next&#8221;,将可以看到以下图:</p>
<div><img style="width: 443px; height: 415px;" src="http://blogimg.chinaunix.net/blog/upfile2/081227023903.jpg" border="0" alt="" /></p>
<div style="text-align: left;">填 入环境目录,选择使用Base API,填入class_catalog. Class_catalog只是对用java api创建的数据库才有真实的作用,但是,当前,这个对c api创建的数据库也必要. 可以创建一个空的class_catalog,具体做法就是在环境目录中创建一个StoredClassCatalog的数据库,但是不写入任何数据,如 下:<br />
String catalogDBName=&#8221;class_catalog&#8221;;<br />
DatabaseConfig catalogConf=new DatabaseConfig();<br />
catalogConf.setAllowCreate(true);<br />
catalogConf.setType(DatabaseType.BTREE);<br />
catalogDB=env.openDatabase(null, catalogDBName, null, catalogConf);<br />
StoredClassCatalog storedCatalog=new StoredClassCatalog(catalogDB);<br />
storedCatalog.close();<br />
在下一个版本中,class_catalog对C API创建的数据库将不再必要.<br />
单击Test,如果成功,则会提示成功:</p>
<div><img src="http://blogimg.chinaunix.net/blog/upfile2/081227024732.jpg" border="0" alt="" /></div>
<p>创建成功后,选择此数据库连接为活跃连接(Active Connection)</p>
<p>5 创建报表来显示数据.<br />
a 新建一个报表,而后单击&#8221;Data-&gt;Report Query&#8221;,选择Query Language为bdb,而后输入Bdb的查询表达式.BDB查询表达式的基本格式为:<br />
PrimaryDatabaseName,keyClass,keyBinding,valueClass,valueBinding<br />
所以按照此格式,本处输入以下表达式:</p>
<div><img src="http://blogimg.chinaunix.net/blog/upfile2/081227025428.jpg" border="0" alt="" width="500" /></div>
<p>而后,可用的字段就显示出来了,这些字段就是在JavaBean中的get/set 字段.</p>
<p>b 制作报表,并且执行报表,具体操作方法略.</p>
<div><img src="http://blogimg.chinaunix.net/blog/upfile2/081227025806.jpg" border="0" alt="" width="500" /></div>
<div><img src="http://blogimg.chinaunix.net/blog/upfile2/081227025816.jpg" border="0" alt="" width="500" /></div>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.bdbchina.com/2009/02/%e4%bd%bf%e7%94%a8jasperreport%e6%98%be%e7%a4%baberkeleydb%e6%95%b0%e6%8d%ae%e5%ba%93%e7%9a%84%e5%86%85%e5%ae%b9/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>让SSH Server使用自定义环境变量</title>
		<link>http://www.bdbchina.com/2009/02/%e8%ae%a9ssh-server%e4%bd%bf%e7%94%a8%e8%87%aa%e5%ae%9a%e4%b9%89%e7%8e%af%e5%a2%83%e5%8f%98%e9%87%8f/</link>
		<comments>http://www.bdbchina.com/2009/02/%e8%ae%a9ssh-server%e4%bd%bf%e7%94%a8%e8%87%aa%e5%ae%9a%e4%b9%89%e7%8e%af%e5%a2%83%e5%8f%98%e9%87%8f/#comments</comments>
		<pubDate>Wed, 11 Feb 2009 09:12:55 +0000</pubDate>
		<dc:creator>Winter</dc:creator>
				<category><![CDATA[Berkeley DB]]></category>
		<category><![CDATA[Winter Zhang]]></category>

		<guid isPermaLink="false">http://www.bdbchina.com/?p=73</guid>
		<description><![CDATA[对于在Linux下工作的人来说, 经常需要使用ssh. 在使用控制台登录到远程机器上以后再执行操作的情况下,不存在使用环境变量的问题. 但是,对于不需要登录而直接用ssh在远程机器上执行命令的而言, 环境变量的使用就是一个问题了. 因为,远程机器的ssh server使用的是默认的环境变量,尤其是PATH. 比如我在当前机器abcn5上,执行echo $PATH,显示的是: &#8220;/opt/java/bin:/opt/intel/cce/10.1.015/bin:/usr/local/bin:/usr/bin:/bin:&#8221;, 但是,我在其他机器上执行 ssh abcn5 &#8216;echo $PATH&#8217;,显示的却是: &#8220;/usr/local/bin:/usr/bin:/bin&#8221;.
对于需要自动化测试的人来说, 经常需要使用一台机器控制代码分布到各个远程机器上,并且在远程机器上执行测试. 既然是自动化,整个过程不需要人工的干预,即不需要使用控制台登录到远程机器. 这种情况, 工作都是通过使用ssh在远程机器上执行命令来完成的. 而经常, 所使用到的程序不在默认的PATH中, 许多需要的环境变量默认也不存在. 这种情况下, 就需要让ssh server能够接受自定义的环境变量(包括PATH).

要让SSH server接受自定义的环境变量,有以下3种方式,这三种方式都需要有一定的权限,比如对sshd_config的修改权限,ssh_config的修 改权限,ssh server的安装权限等等,最好是具有sudo的权限. 对于产品内部测试而言, 一般测试人员都对使用的测试机器具有管理的权限,所以,这应该不是一个问题.
1 远程机器编译期设定,此点仅对PATH有效.
Open ssh的configure中有一个选项:  &#8211;with-default-path=, 这个就是用来设定ssh server的默认PATH的
2 远程机器上设定.
修改远程机器上的sshd_config,使得其具有以下行:
PermitUserEnvironment yes
而后,在远程机器~/.ssh/建立environment文件,并且使用name=value的形式,增加需要自定义的环境变量,ssh在远程机器上执行命令时,environment中设定的变量都是执行环境的一部分
3 本机设定发送给远程机器.
修改远程机器上的sshd_config,使得其具有以下行:
AcceptEnv &#8230;..
AcceptEnv 后面接可以自定义的环境变量的名称,多个间空格隔开,可以使用通配符,比如
AcceptEnv PATH USER APPNAME TCL* A?
修改本机的ssh_config使得具有以下行:
SendEnv &#8230;..
格式同上.
这种情况下,ssh将会将SendEnv指定的环境变量发送给远程机器,远程机器根据AcceptEnv中的定义, 接受符合的,用这些符合的代替以后的环境变量,成为执行环境的一部分.
]]></description>
			<content:encoded><![CDATA[<p>对于在Linux下工作的人来说, 经常需要使用ssh. 在使用控制台登录到远程机器上以后再执行操作的情况下,不存在使用环境变量的问题. 但是,对于不需要登录而直接用ssh在远程机器上执行命令的而言, 环境变量的使用就是一个问题了. 因为,远程机器的ssh server使用的是默认的环境变量,尤其是PATH. 比如我在当前机器abcn5上,执行echo $PATH,显示的是: &#8220;/opt/java/bin:/opt/intel/cce/10.1.015/bin:/usr/local/bin:/usr/bin:/bin:&#8221;, 但是,我在其他机器上执行 ssh abcn5 &#8216;echo $PATH&#8217;,显示的却是: &#8220;/usr/local/bin:/usr/bin:/bin&#8221;.</p>
<p>对于需要自动化测试的人来说, 经常需要使用一台机器控制代码分布到各个远程机器上,并且在远程机器上执行测试. 既然是自动化,整个过程不需要人工的干预,即不需要使用控制台登录到远程机器. 这种情况, 工作都是通过使用ssh在远程机器上执行命令来完成的. 而经常, 所使用到的程序不在默认的PATH中, 许多需要的环境变量默认也不存在. 这种情况下, 就需要让ssh server能够接受自定义的环境变量(包括PATH).</p>
<p><span id="more-73"></span></p>
<p>要让SSH server接受自定义的环境变量,有以下3种方式,这三种方式都需要有一定的权限,比如对sshd_config的修改权限,ssh_config的修 改权限,ssh server的安装权限等等,最好是具有sudo的权限. 对于产品内部测试而言, 一般测试人员都对使用的测试机器具有管理的权限,所以,这应该不是一个问题.</p>
<p>1 远程机器编译期设定,此点仅对PATH有效.<br />
Open ssh的configure中有一个选项:  &#8211;with-default-path=, 这个就是用来设定ssh server的默认PATH的</p>
<p>2 远程机器上设定.<br />
修改远程机器上的sshd_config,使得其具有以下行:<br />
PermitUserEnvironment yes<br />
而后,在远程机器~/.ssh/建立environment文件,并且使用name=value的形式,增加需要自定义的环境变量,ssh在远程机器上执行命令时,environment中设定的变量都是执行环境的一部分</p>
<p>3 本机设定发送给远程机器.<br />
修改远程机器上的sshd_config,使得其具有以下行:<br />
AcceptEnv &#8230;..<br />
AcceptEnv 后面接可以自定义的环境变量的名称,多个间空格隔开,可以使用通配符,比如<br />
AcceptEnv PATH USER APPNAME TCL* A?<br />
修改本机的ssh_config使得具有以下行:<br />
SendEnv &#8230;..<br />
格式同上.<br />
这种情况下,ssh将会将SendEnv指定的环境变量发送给远程机器,远程机器根据AcceptEnv中的定义, 接受符合的,用这些符合的代替以后的环境变量,成为执行环境的一部分.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bdbchina.com/2009/02/%e8%ae%a9ssh-server%e4%bd%bf%e7%94%a8%e8%87%aa%e5%ae%9a%e4%b9%89%e7%8e%af%e5%a2%83%e5%8f%98%e9%87%8f/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>运行Shell脚本的几种方式解析</title>
		<link>http://www.bdbchina.com/2009/02/%e8%bf%90%e8%a1%8cshell%e8%84%9a%e6%9c%ac%e7%9a%84%e5%87%a0%e7%a7%8d%e6%96%b9%e5%bc%8f%e8%a7%a3%e6%9e%90/</link>
		<comments>http://www.bdbchina.com/2009/02/%e8%bf%90%e8%a1%8cshell%e8%84%9a%e6%9c%ac%e7%9a%84%e5%87%a0%e7%a7%8d%e6%96%b9%e5%bc%8f%e8%a7%a3%e6%9e%90/#comments</comments>
		<pubDate>Wed, 11 Feb 2009 09:11:27 +0000</pubDate>
		<dc:creator>Winter</dc:creator>
				<category><![CDATA[Berkeley DB]]></category>
		<category><![CDATA[Winter Zhang]]></category>
		<category><![CDATA[scripting]]></category>

		<guid isPermaLink="false">http://www.bdbchina.com/?p=71</guid>
		<description><![CDATA[假设脚本为a.sh,则要运行该脚本,有以下方式
1 给脚本加上执行权限chmod u+x a.sh, 而后就可以直接用全路径来执行脚本了,比如当前文件夹下用./a.sh, 如果脚本所在目录在PATH环境变量之中, 则直接用a.sh即可
2 sh/bash a.sh的路径,这种情况不需要脚本具有执行权限.
以上两种情况中,脚本中$0都是a.sh,都是在shell的子进程中运行的.
3 source a.sh的路径
4 . a.sh的路径
以 上两种情况都是脚本在当前shell的进程中运行,所以$0都是bash/sh, 区别在于, source不是posix shell的内置命令,所以3在sh中实际上是不能运行的,在bash中可以. 而.则无论在bash还是posix shell中都是可以用来载入并执行脚本. 所以, 相对而言, 应该是4 更加具有移植性.
]]></description>
			<content:encoded><![CDATA[<p>假设脚本为a.sh,则要运行该脚本,有以下方式</p>
<p>1 给脚本加上执行权限chmod u+x a.sh, 而后就可以直接用全路径来执行脚本了,比如当前文件夹下用./a.sh, 如果脚本所在目录在PATH环境变量之中, 则直接用a.sh即可</p>
<p>2 sh/bash a.sh的路径,这种情况不需要脚本具有执行权限.</p>
<p>以上两种情况中,脚本中$0都是a.sh,都是在shell的子进程中运行的.</p>
<p>3 source a.sh的路径</p>
<p>4 . a.sh的路径</p>
<p>以 上两种情况都是脚本在当前shell的进程中运行,所以$0都是bash/sh, 区别在于, source不是posix shell的内置命令,所以3在sh中实际上是不能运行的,在bash中可以. 而.则无论在bash还是posix shell中都是可以用来载入并执行脚本. 所以, 相对而言, 应该是4 更加具有移植性.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bdbchina.com/2009/02/%e8%bf%90%e8%a1%8cshell%e8%84%9a%e6%9c%ac%e7%9a%84%e5%87%a0%e7%a7%8d%e6%96%b9%e5%bc%8f%e8%a7%a3%e6%9e%90/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
Դ