<?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; java</title>
	<atom:link href="http://www.bdbchina.com/tag/java/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>在Berkeley DB Java版中实现SQL查询</title>
		<link>http://www.bdbchina.com/2009/02/%e5%9c%a8berkeley-db-java%e7%89%88%e4%b8%ad%e5%ae%9e%e7%8e%b0sql%e6%9f%a5%e8%af%a2/</link>
		<comments>http://www.bdbchina.com/2009/02/%e5%9c%a8berkeley-db-java%e7%89%88%e4%b8%ad%e5%ae%9e%e7%8e%b0sql%e6%9f%a5%e8%af%a2/#comments</comments>
		<pubDate>Thu, 26 Feb 2009 08:17:05 +0000</pubDate>
		<dc:creator>chaohuang</dc:creator>
				<category><![CDATA[Berkeley DB JE]]></category>
		<category><![CDATA[Chao Huang]]></category>
		<category><![CDATA[程序设计]]></category>
		<category><![CDATA[DPL]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.bdbchina.com/?p=114</guid>
		<description><![CDATA[前言
众所周知，Berkeley DB 产品家族（包括了 C语言版，Java版和XML数据库）是一套高效率的，可扩展的嵌入式数据库引擎。此处，所谓数据库引擎是指它提供了除SQL处理层以外的所有关系数据库的功能（如事务性（ACID）支持，数据存储，数据恢复等）。那么，您不禁要问，为什么Berkeley DB产品不提供对SQL的支持呢？答案很简单，它可以嵌入到您的应用代码中，在应用代码的地址空间运行，从而达到高效率。

到底有多高效？
在我自己的DELL OptiPlex 745 台式机上（Intel(R) Core(TM)2 CPU 6400, 2G memory, running Ubuntu 7.04 Server x86_64），用自己写的一个单线程的例子程序在9秒内读取了100万条记录，22秒内插入100万的记录。
从关系表的角度看，我插入数据的行定义，大致如下：
f0      INT PRIMARY KEY,
f1      STRING PRIMARY KEY,
id      LONG,
one     STRING,
two     DOUBLE,
three   STRING,
zip   [...]]]></description>
			<content:encoded><![CDATA[<p><strong>前言</strong></p>
<p>众所周知，Berkeley DB 产品家族（包括了 C语言版，Java版和XML数据库）是一套高效率的，可扩展的嵌入式数据库引擎。此处，所谓数据库引擎是指它提供了除SQL处理层以外的所有关系数据库的功能（如事务性（ACID）支持，数据存储，数据恢复等）。那么，您不禁要问，为什么Berkeley DB产品不提供对SQL的支持呢？答案很简单，它可以嵌入到您的应用代码中，在应用代码的地址空间运行，从而达到高效率。<br />
<strong></strong></p>
<p><strong>到底有多高效？</strong></p>
<p>在我自己的DELL OptiPlex 745 台式机上（Intel(R) Core(TM)2 CPU 6400, 2G memory, running Ubuntu 7.04 Server x86_64），用自己写的一个单线程的例子程序在9秒内读取了100万条记录，22秒内插入100万的记录。</p>
<p>从关系表的角度看，我插入数据的行定义，大致如下：</p>
<pre>f0      INT PRIMARY KEY,
f1      STRING PRIMARY KEY,
id      LONG,
one     STRING,
two     DOUBLE,
three   STRING,
zip     INT,
city    STRING,
state   STRING</pre>
<p>在Berkeley DB Java 版中的定义如下:<br />
<span id="more-114"></span></p>
<pre>@Persistent
class CompositeKey {

    @KeyField(1)
    int f0 = 0;
    @KeyField(2)
    String f1 = "The quick brown fox jumps over the lazy dog.";

    CompositeKey() { } // for bindings

    CompositeKey(int f0) {
        this.f0 = f0;
    }

    CompositeKey(int f0, String f1) {
        this.f0 = f0;
        this.f1 = f1;
    }

    @Override
    public String toString() {
        return "CompositeKey: (" + f0 + "," + f1 + ")";
    }
}

@Entity
class BasicEntity {

    @PrimaryKey
    CompositeKey key;

    protected long id = 0;
    protected String one = "one";
    protected double two = .2d;
    protected String three = "three";
    Address address = new Address();

    BasicEntity() { }

    BasicEntity(int i) {
        this.key = new CompositeKey(i);
    }

    public void modify() {
        id++;
        one += "1";
        two = id;
        three += "3";
        address = new Address("Shenzhen", "Guangdong, China", 500001);
    }

    @Override
    public String toString() {
        return "BasicEntity: (" + key + "," + id + "," + one + "," +
            two + "," + three + ", " + address + ")";
    }
}

@Persistent
class Address {

    private String city = "Boston";
    private String state = "Massachusetts";
    private int zip = 10001;

    Address() { }

    Address(String city, String state, int zip) {
        this.city = city;
        this.state = state;
        this.zip = zip;
    }

    @Override
    public String toString() {
        return "Address: (" + city + "," + state + "," + zip + ")";
    }
}</pre>
<p><strong>如何实现SQL查询</strong></p>
<p>对于现在做JAVA企业应用的，他们很多都熟悉SQL语句。于是不禁要问：我想利用Berkeley DB Java版的高效，轻量级的类库，达到和关系数据库一样的功用，如何实现？也就意味着，我要自己写SQL解析器，支持SQL查询，插入，更改和删除操作，该怎么写呢？会不会很麻烦？</p>
<p>我的白皮书《<a href="http://www.oracle.com/technology/products/berkeley-db/pdf/performing%20queries%20in%20oracle%20berkeley%20db%20java%20edition.pdf" target="_blank">Performing Queries in Oracle Berkeley DB Java Edition</a>》里详细论述了，如何利用Berkeley DB Java版的直接持久层（也就是一套基于Berkeley DB Java版的底层接口和JDK5 Annotations 的拓展，英文简称叫DPL），实现了如下的SQL查询：</p>
<ul>
<li><span style="font-family: Courier New;">SELECT * FROM tab ORDER BY col ASC;</span></li>
<li><span style="font-family: Courier New;">SELECT * FROM tab WHERE col LIKE &#8216;prefix%&#8217;;</span></li>
<li><span style="font-family: Courier New;">SELECT * FROM tab WHERE col &gt;= A AND col &lt;= B;</span></li>
<li><span style="font-family: Courier New;">SELECT * FROM tab WHERE col1 = A AND col2 = B;</span></li>
<li><span style="font-family: Courier New;">SELECT t1.* FROM table1 t1, table2 t2 WHERE t1.col1 = t2.col1 AND t2.col2 = A;</span></li>
</ul>
<p>当然，阅读以后您会发现，在SQL查询的代码里稍做修改就变成了SQL更新/删除的操作。最后，恭喜您，现在您知道如何写一个最基本的SQL解释器了，不是吗？:-)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bdbchina.com/2009/02/%e5%9c%a8berkeley-db-java%e7%89%88%e4%b8%ad%e5%ae%9e%e7%8e%b0sql%e6%9f%a5%e8%af%a2/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Berkeley DB Java版直接持久层基础</title>
		<link>http://www.bdbchina.com/2009/01/berkeley-db-je-dpl-basics/</link>
		<comments>http://www.bdbchina.com/2009/01/berkeley-db-je-dpl-basics/#comments</comments>
		<pubDate>Tue, 06 Jan 2009 14:56:33 +0000</pubDate>
		<dc:creator>chaohuang</dc:creator>
				<category><![CDATA[Berkeley DB JE]]></category>
		<category><![CDATA[Chao Huang]]></category>
		<category><![CDATA[程序设计]]></category>
		<category><![CDATA[bdb]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[DPL]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[JE]]></category>

		<guid isPermaLink="false">http://www.bdbchina.com/?p=25</guid>
		<description><![CDATA[Berkeley DB Java版直接持久层基础
概览
Berkeley DB Java 版是一套纯Java语言实现的嵌入式数据库。它提供的事务存储引擎不仅显著的减少了对象持久化开销，而且保持了对象-关系映射（ORM）解决方案的灵活性，速度和扩展性。Berkeley DB Java版3.0引入了直接持久层（DPL），旨在提供和与企业 Java Bean 3.0 (EJB3) 持久性相同好处：对象持久化时，不需要将对象转换成关系表。]]></description>
			<content:encoded><![CDATA[<h3 style="text-align: left;">Berkeley DB Java版直接持久层基础</h3>
<h4>概览</h4>
<p>Berkeley DB Java 版是一套纯Java语言实现的嵌入式数据库。它提供的事务存储引擎不仅显著的减少了对象持久化开销，而且保持了对象-关系映射（ORM）解决方案的灵活性，速度和扩展性。Berkeley DB Java版3.0引入了直接持久层（DPL），旨在提供和与企业 Java Bean 3.0 (EJB3) 持久性相同好处：对象持久化时，不需要将对象转换成关系表。</p>
<p>更多请参见我在OTN上完整的中文翻译：<a href="http://www.oracle.com/technology/global/cn/products/berkeley-db/pdf/bdb-je-persistence-api-basics.pdf" target="_blank">http://www.oracle.com/technology/global/cn/products/berkeley-db/pdf/bdb-je-persistence-api-basics.pdf</a></p>
<p>英文原文：<a href="http://www.oracle.com/database/docs/BDB-JE-DPL-Basics-Whitepaper.pdf" target="_blank">http://www.oracle.com/database/docs/BDB-JE-DPL-Basics-Whitepaper.pdf</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.bdbchina.com/2009/01/berkeley-db-je-dpl-basics/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>
Դ