??xml version="1.0" encoding="utf-8" standalone="yes"?>97国产在线观看,日本一区二区三区中文字幕,99热这里有精品http://www.aygfsteel.com/rosen/category/13739.html努力和牛人羃短差距?/description>zh-cnFri, 09 Jul 2010 02:22:47 GMTFri, 09 Jul 2010 02:22:47 GMT60开源面向对象数据库 db4o 之旅: 使用 dRS “db4o 之旅Q四Q?/title><link>http://www.aygfsteel.com/rosen/archive/2010/07/09/325618.html</link><dc:creator>Rosen</dc:creator><author>Rosen</author><pubDate>Fri, 09 Jul 2010 02:19:00 GMT</pubDate><guid>http://www.aygfsteel.com/rosen/archive/2010/07/09/325618.html</guid><wfw:comment>http://www.aygfsteel.com/rosen/comments/325618.html</wfw:comment><comments>http://www.aygfsteel.com/rosen/archive/2010/07/09/325618.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/rosen/comments/commentRss/325618.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/rosen/services/trackbacks/325618.html</trackback:ping><description><![CDATA[     摘要: 很多开发者对 hibernate 性能表示|疑Q下一ơ技术革C(x)是什么呢Q——对象数据库 <br>q篇文章是开源面向对象数据库 db4o 之旅 pd文章的第 4 部分Q介l面向对象数据库 db4o ?db4o Replication System(dRS) —?db4o 复制pȝQƈ对其如何同步 Oracle 数据库进行分析?nbsp; <a href='http://www.aygfsteel.com/rosen/archive/2010/07/09/325618.html'>阅读全文</a><img src ="http://www.aygfsteel.com/rosen/aggbug/325618.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/rosen/" target="_blank">Rosen</a> 2010-07-09 10:19 <a href="http://www.aygfsteel.com/rosen/archive/2010/07/09/325618.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Versant db4o 8.0 RC发布Q翻译)(j)http://www.aygfsteel.com/rosen/archive/2010/05/13/320921.htmlRosenRosenThu, 13 May 2010 11:16:00 GMThttp://www.aygfsteel.com/rosen/archive/2010/05/13/320921.htmlhttp://www.aygfsteel.com/rosen/comments/320921.htmlhttp://www.aygfsteel.com/rosen/archive/2010/05/13/320921.html#Feedback0http://www.aygfsteel.com/rosen/comments/commentRss/320921.htmlhttp://www.aygfsteel.com/rosen/services/trackbacks/320921.html
回首q去Q?.0版本是非常易用的Q其重要之处在于实现?jin)透明ȀzM?qing)其他重要特性,例如处理Runtime/Unchecked异常、MTOC(multi-transactional object-container 多事务对象容?客户端和服务器端的实C?qing)在zd客户端的推更?pushed updates)。我们曾l的db4oC֌Q注册用户已l超q?5,000Q这一切告诉我们品的易用性是不容|疑的,其是原生对象的复杂映射完全可以与创可脓(chung)?band-aid)的ORM技术相抗衡?br />
展望未来Q?.0ȝ本的发布更加x(chng)性能Q当然还是保持一如既往(xin)的易用性。本着?xi)战性能极限和易用性的_Qdb4oq行?jin)新一轮的改进Q涉?qing)到了(jin)内部非常根基的部分。尽无法直观的看到改进?jin)什么,但在q行的时候你能明昄体会(x)到。db4o 8.0?a >标识理pȝq行?jin)根本性的改变Q重Ҏ(gu)改进?jin)db4o server的I/OҎ(gu)。正如Poleposition基准试所昄的,q些改进都应验了(jin)db4o的卓性能。未来,q些改进都ؓ(f)改进I/O集群、碎片整理和对象演进做好?jin)准备?br />
认识到db4o在嵌入式讑֤和桌面应用程序中的力量,我们扩展?jin)db4o与大?a >Versant对象数据?/a>集成Q进行端到端对象持久化的能力Q而db4o复制技术可用于提供强大的从db4o高性能桌面到Versant大规模集服务器的纯对象持久化。与此同Ӟdb4o核心(j)团队(h)l把重点攑֜增强易用性,q在日益壮大的社Z扮演重要角色。例如增Z(jin)透明持久以及(qing)Ȁz?NET集合、安全特性、客户和服务器优化、适时的支持了(jin)Android和Silverlight之类的轻量环境?br />
在技术创新的同时QVersantl箋(hu)向开源社区敞开大门Q一直向C֌传播q这L(fng)声音Q对象数据库在互联网计算的新U元中是非常重要的。(h)l保?.0的新业务模式和品预览发布策略,新的8.0遵@?jin)更加流行的FLOSS开源授权模式,q持l提交和db4o一L(fng)开源管理工P例如OME(Object Manager Enterprise)工具以及(qing)Eclipse和Visual Studio插g?br />
注意Q这ơ新版本发布q是遵@标准程。下面是一个汇总,db4o团队在整?010q都?x)?f)8.0的最l发布而努力:(x)

新性能Ҏ(gu)?br />     内部Idpȝ改善I/O、集、碎片整理等 *
    改进内存理——通过2的因?factor of 2)减小堆空?br />     在不同的负蝲Q有多种新的~存选项
    快速集合的实现(BigSet)
    自定义类型处理器
    为client/server模式优化的对象预获取

新功?br />     从db4o到大哥Versant的对象复?*
    针对Java?NET集合的TP/TA *
    对Silverlight和Mono的支?br />     提供.NET LINQ支持
    国际化——U(ku)nicodeQ现在还是UTF-8和其他字W串~码...支持中文、日文字W集

由开源社区提供的新功?br />     扩展开源授权——微?Ms-PL, Ms-RL)QFLOSS授权Q兼容GPL_v3
    开源Eclipse和Visual Studio的OME插g
    DZone RefCard以及(qing)新的技术视频和播客
    像MapMeq样的Android应用E序demo
    Eclipse和Visual Studio的TA/TP插g

新的易用性改q?br />     安全的套接字通讯
    引进Maven资源库快?br />     ADO .NET Data Services接口(IQueryable, IUpdateable)
    新的q行时统计收集和可视化分?br />     mdRS——ؓ(f)Google Android用户提供的移动dRSQ以便能复制到关pd数据?br />     Spring db4o扩展
    对ؓ(f)I类型的Array的支?br />     化后的新配置界面
    支持.NET枚D作ؓ(f)值类?br />     业界率先支持CompactFramework上的LINQ
    .NET普通集合类型的支持
    为推更新客户端缓存准备的提交回调函数
    ?NET LINQ提供TP
    集合感知的dRS实现

*h注的是RC版中不可用的Q但计划放进最l版?br />
Versant目标是ؓ(f)db4oC֌用户提供最先进、最易用Q最坚固、遵循ACID且高性能的数据库解决Ҏ(gu)。新db4o 8.0的发布兑C(jin)我们始终奉行的承诺。我们期待听C的声韛_ƈ愿和你一起ƈ肩作战(sh)ؓ(f)未来交付新的创新?br />
请帮助我们向你们的朋友和同事分nq样的声韻I(x)“工作中用正的工具Q用对象数据库去应对互联|时代的数据理?xi)战?#8221;?br />
Robert Greene

开源运营V.P.

Versant——db4o团队

h意!引用、{贴本文应注明原译者:(x)Rosen Jiang 以及(qing)出处Q?/font>http://www.aygfsteel.com/rosen



Rosen 2010-05-13 19:16 发表评论
]]>
国际对象数据库大?x)(ICOODBQ简?/title><link>http://www.aygfsteel.com/rosen/archive/2008/01/23/177365.html</link><dc:creator>Rosen</dc:creator><author>Rosen</author><pubDate>Wed, 23 Jan 2008 13:24:00 GMT</pubDate><guid>http://www.aygfsteel.com/rosen/archive/2008/01/23/177365.html</guid><wfw:comment>http://www.aygfsteel.com/rosen/comments/177365.html</wfw:comment><comments>http://www.aygfsteel.com/rosen/archive/2008/01/23/177365.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.aygfsteel.com/rosen/comments/commentRss/177365.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/rosen/services/trackbacks/177365.html</trackback:ping><description><![CDATA[ <p class="MsoPlainText" style="MARGIN: 0mm 0mm 0pt"> <b style="mso-bidi-font-weight: normal"> <span lang="ZH-CN" style="FONT-SIZE: 18pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN">大会(x)目的</span> </b> <b style="mso-bidi-font-weight: normal"> <span lang="EN-US" style="FONT-SIZE: 18pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN"> <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?> <o:p> </o:p> </span> </b> </p> <p class="MsoPlainText" style="MARGIN: 0mm 0mm 0pt"> <span lang="EN-US" style="FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN"> <o:p> (tng)</o:p> </span> </p> <p> </p> <table class="MsoTableGrid" style="BORDER-COLLAPSE: collapse; mso-yfti-tbllook: 480; mso-padding-alt: 0mm 5.4pt 0mm 5.4pt" cellspacing="0" cellpadding="0" border="0"> <tbody> <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes"> <td style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0mm; BORDER-LEFT: #d4d0c8; WIDTH: 801pt; PADDING-TOP: 0mm; BORDER-BOTTOM: #d4d0c8; BACKGROUND-COLOR: transparent" valign="top" width="1068"> <p class="MsoPlainText" style="MARGIN: 0mm 0mm 0pt"> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN"> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">ICOODB 2008</span> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">是本世纪<b style="mso-bidi-font-weight: normal">对象数据库方面的W一ơ国际大?/b>Q将?/span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">3</span> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">?/span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">13</span> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">?/span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">14</span> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">日在德国柏林召开。对U学家、工业、开发者和学生来说Q在q里能面寚w交流象数据库q相互碰撞灵感,q是一ơ难得的Z(x)。大?x)旨在让Z对对象数据库产生兴趣Q以一U?b style="mso-bidi-font-weight: normal">创新的方式把对象和数据库l合h</b>Qƈ代替或扩展关pd<b style="mso-bidi-font-weight: normal">数据?/b></span> <b style="mso-bidi-font-weight: normal"> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">/</span> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">映射</span> </b> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">?/span> </span> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN"> <br /> </span> </p> <p class="MsoPlainText" style="MARGIN: 0mm 0mm 0pt"> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN">大会(x)׃个独立的委员?sh)(x)组l,来自柏林应用U技大学Q?/span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN">TFH-Berlin</span> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN">Q的</span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN">Stefan Edlich</span> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN">教授和英国喀里多g大学Q?/span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN">Glasgow Caledonian University</span> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN">Q的</span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN">James Paterson</span> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN">是本ơ大?x)的领导人,?/span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN">ODBMS.org</span> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN">?/span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN">ODBMS</span> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN">供应商、主要出版h提供支持Qƈ由柏林应用科技大学提供场所。大?x)将在柏林应用科技大学召开。在<b style="mso-bidi-font-weight: normal">星期?/b>Q也是在?b style="mso-bidi-font-weight: normal">理论?/b>”,焦点在对象数据库的理论斚w?b style="mso-bidi-font-weight: normal">星期?/b>Q也是?b style="mso-bidi-font-weight: normal">应用?/b>”,焦点在实际应用和实现方面。ؓ(f)技术日准备的每论文都进?b style="mso-bidi-font-weight: normal">审阅</b>。更多关键信息、演讲和大会(x)日程h?/span> <b style="mso-bidi-font-weight: normal"> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN"> <a > <span lang="ZH-CN">日程面</span> </a> </span> </b> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN">Q?/span> <span lang="EN-US" style="FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN"> <o:p> </o:p> </span> </p> </td> <td style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0mm; BORDER-LEFT: #d4d0c8; WIDTH: 126pt; PADDING-TOP: 0mm; BORDER-BOTTOM: #d4d0c8; BACKGROUND-COLOR: transparent" valign="top" width="168"> <p class="MsoNormal" style="MARGIN: 0mm 0mm 0pt"> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS Qゴ゗?; mso-font-kerning: 0pt"> <a > <span style="TEXT-DECORATION: none; text-underline: none"> <?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /?> <v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"> <v:stroke joinstyle="miter"> </v:stroke> <v:formulas> <v:f eqn="if lineDrawn pixelLineWidth 0"> </v:f> <v:f eqn="sum @0 1 0"> </v:f> <v:f eqn="sum 0 0 @1"> </v:f> <v:f eqn="prod @2 1 2"> </v:f> <v:f eqn="prod @3 21600 pixelWidth"> </v:f> <v:f eqn="prod @3 21600 pixelHeight"> </v:f> <v:f eqn="sum @0 0 1"> </v:f> <v:f eqn="prod @6 1 2"> </v:f> <v:f eqn="prod @7 21600 pixelWidth"> </v:f> <v:f eqn="sum @8 21600 0"> </v:f> <v:f eqn="prod @7 21600 pixelHeight"> </v:f> <v:f eqn="sum @10 21600 0"> </v:f> </v:formulas> <v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"> </v:path> <o:lock aspectratio="t" v:ext="edit"> </o:lock> </v:shapetype> </span> </a> <img src="http://odbmsjournal.org/icoodb/img/grashof.jpg" /> </span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN"> <o:p> </o:p> </span> </p> </td> </tr> </tbody> </table> <p class="MsoPlainText" style="MARGIN: 0mm 0mm 0pt"> <span lang="EN-US" style="FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN"> <o:p> </o:p> </span> </p> <p> </p> <table class="MsoTableGrid" style="MARGIN: auto 4.85pt; BORDER-COLLAPSE: collapse; mso-yfti-tbllook: 480; mso-padding-alt: 0mm 5.4pt 0mm 5.4pt; mso-table-lspace: 7.1pt; mso-table-rspace: 7.1pt; mso-table-anchor-vertical: paragraph; mso-table-anchor-horizontal: margin; mso-table-left: left; mso-table-top: .1pt" cellspacing="0" cellpadding="0" align="left" border="0"> <tbody> <tr style="HEIGHT: 116.65pt; mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes"> <td style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0mm; BORDER-LEFT: #d4d0c8; WIDTH: 149.4pt; PADDING-TOP: 0mm; BORDER-BOTTOM: #d4d0c8; HEIGHT: 116.65pt; BACKGROUND-COLOR: transparent" valign="top" width="199"> <p class="MsoNormal" style="MARGIN: 0mm 0mm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-element: frame; mso-element-frame-hspace: 7.1pt; mso-element-wrap: around; mso-element-anchor-vertical: paragraph; mso-element-anchor-horizontal: margin; mso-element-top: .1pt; mso-height-rule: exactly" align="left"> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS Qゴ゗?; mso-font-kerning: 0pt"> <o:p> <img src="http://odbmsjournal.org/icoodb/img/icoodb_revised.gif" /> </o:p> </span> </p> </td> <td style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0mm; BORDER-LEFT: #d4d0c8; WIDTH: 768.6pt; PADDING-TOP: 0mm; BORDER-BOTTOM: #d4d0c8; HEIGHT: 116.65pt; BACKGROUND-COLOR: transparent" valign="top" width="1025"> <p class="MsoNormal" style="MARGIN: 0mm 0mm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS Qゴ゗?; mso-fareast-language: ZH-CN; mso-font-kerning: 0pt"> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS Qゴ゗?; mso-fareast-language: ZH-CN; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">对象数据库在某些特定的应用程序类型中是明智的选择Q这栯减少开发者成本和旉Q也能帮助他们构建更加富?/span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS Qゴ゗?; mso-fareast-language: ZH-CN; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">OO</span> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS Qゴ゗?; mso-fareast-language: ZH-CN; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">Ҏ(gu)的应用E序。否则,如果盲目地加大数据库I间Q迟早也q是?x)被关系数据库?/span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS Qゴ゗?; mso-fareast-language: ZH-CN; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">O/R</span> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS Qゴ゗?; mso-fareast-language: ZH-CN; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">映射l充填满?jin)。因此,本次大会(x)的一个目的就是让大家能更好的理解什么情况下和ؓ(f)什么?/span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS Qゴ゗?; mso-fareast-language: ZH-CN; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">ODBMS</span> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS Qゴ゗?; mso-fareast-language: ZH-CN; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">。有?jin)这U精,我们想邀(g)请你<strong>加入本次</strong></span> </span> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS Qゴ゗?; mso-fareast-language: ZH-CN; mso-font-kerning: 0pt"> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS Qゴ゗?; mso-fareast-language: ZH-CN; mso-ansi-language: EN-US; mso-bidi-language: AR-SA"> <strong>大会(x)、v草一份论文或演讲、展Cv?/strong> </span> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS Qゴ゗?; mso-fareast-language: ZH-CN; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">或简单的到场观摩或和我们q一步接z。如果你Ҏ(gu)个主题有兴趣Q只需要访?/span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS Qゴ゗?; mso-fareast-language: ZH-CN; mso-ansi-language: EN-US; mso-bidi-language: AR-SA"> <a >odbms.org</a> </span> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS Qゴ゗?; mso-fareast-language: ZH-CN; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">q?/span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS Qゴ゗?; mso-fareast-language: ZH-CN; mso-ansi-language: EN-US; mso-bidi-language: AR-SA"> <a > <span lang="ZH-CN">专家文章</span> </a> </span> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS Qゴ゗?; mso-fareast-language: ZH-CN; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">或浏览包括演讲稿、指南、文章等在内?/span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS Qゴ゗?; mso-fareast-language: ZH-CN; mso-ansi-language: EN-US; mso-bidi-language: AR-SA"> <a > <span lang="ZH-CN">免费内容</span> </a> </span> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS Qゴ゗?; mso-fareast-language: ZH-CN; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">?/span> </span> </p> <p class="MsoNormal" style="MARGIN: 0mm 0mm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-element: frame; mso-element-frame-hspace: 7.1pt; mso-element-wrap: around; mso-element-anchor-vertical: paragraph; mso-element-anchor-horizontal: margin; mso-element-top: .1pt; mso-height-rule: exactly" align="left"> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS Qゴ゗?; mso-fareast-language: ZH-CN; mso-font-kerning: 0pt"> <o:p> (tng)</o:p> </span> </p> </td> </tr> </tbody> </table> <p class="MsoNormal" style="MARGIN: 0mm 0mm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS Qゴ゗?; mso-fareast-language: ZH-CN; mso-font-kerning: 0pt"> <o:p> (tng)</o:p> </span> </p> <p class="MsoPlainText" style="MARGIN: 0mm 0mm 0pt"> <b style="mso-bidi-font-weight: normal"> <span lang="ZH-CN" style="FONT-SIZE: 18pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN"> <font color="#ffffff">?/font> <font color="#ffffff">?/font> <font color="#ffffff">?/font> <font color="#ffffff">?/font> </span> </b> <b style="mso-bidi-font-weight: normal"> <span lang="EN-US" style="FONT-SIZE: 18pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN"> <o:p> </o:p> </span> </b> </p> <p class="MsoPlainText" style="MARGIN: 0mm 0mm 0pt"> <span lang="EN-US" style="FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN"> <o:p> (tng)</o:p> </span> </p> <p class="MsoPlainText" style="MARGIN: 0mm 0mm 0pt"> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN"> <font color="#ffffff">?/font> <br /> </span> </p> <p class="MsoPlainText" style="MARGIN: 0mm 0mm 0pt"> <b style="mso-bidi-font-weight: normal"> <span lang="ZH-CN" style="FONT-SIZE: 18pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN"> <br /> <br /> <br />大会(x)内容</span> </b> <b style="mso-bidi-font-weight: normal"> <span lang="EN-US" style="FONT-SIZE: 18pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN"> <o:p> </o:p> </span> </b> </p> <p class="MsoPlainText" style="MARGIN: 0mm 0mm 0pt"> <br /> (tng)</p> <p class="MsoPlainText" style="MARGIN: 0mm 0mm 0pt"> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN">感兴的主题被包括在内Q但不局限于此:(x)</span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN"> <o:p> </o:p> </span> </p> <p class="MsoPlainText" style="MARGIN: 0mm 0mm 0pt"> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN"> <o:p> (tng)</o:p> </span> </p> <p class="MsoPlainText" style="MARGIN: 0mm 0mm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 21.0pt"> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-language: ZH-CN; mso-fareast-font-family: Wingdings"> <span style="mso-list: Ignore">l<span style="FONT: 7pt 'Times New Roman'"> (tng) (tng) (tng) (tng) (tng) (tng) (tng) </span></span> </span> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN">对象数据?b style="mso-bidi-font-weight: normal">研究</b></span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN"> <o:p> </o:p> </span> </p> <p class="MsoPlainText" style="MARGIN: 0mm 0mm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 21.0pt"> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-language: ZH-CN; mso-fareast-font-family: Wingdings"> <span style="mso-list: Ignore">l<span style="FONT: 7pt 'Times New Roman'"> (tng) (tng) (tng) (tng) (tng) (tng) (tng) </span></span> </span> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN">对象数据库与关系型技术、映?/span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN">JPA</span> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN">{的<b style="mso-bidi-font-weight: normal">比较</b>?/span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN"> <o:p> </o:p> </span> </p> <p class="MsoPlainText" style="MARGIN: 0mm 0mm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 21.0pt"> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-language: ZH-CN; mso-fareast-font-family: Wingdings"> <span style="mso-list: Ignore">l<span style="FONT: 7pt 'Times New Roman'"> (tng) (tng) (tng) (tng) (tng) (tng) (tng) </span></span> </span> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN">对象数据库在工业、案例研IӞ能源、生物、移动领域、汽?/span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN">?/span> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN">Q?/span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN"> <o:p> </o:p> </span> </p> <p class="MsoPlainText" style="MARGIN: 0mm 0mm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 21.0pt"> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-language: ZH-CN; mso-fareast-font-family: Wingdings"> <span style="mso-list: Ignore">l<span style="FONT: 7pt 'Times New Roman'"> (tng) (tng) (tng) (tng) (tng) (tng) (tng) </span></span> </span> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN">对象数据?b style="mso-bidi-font-weight: normal">产品</b></span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN"> <o:p> </o:p> </span> </p> <p class="MsoPlainText" style="MARGIN: 0mm 0mm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 21.0pt"> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-language: ZH-CN; mso-fareast-font-family: Wingdings"> <span style="mso-list: Ignore">l<span style="FONT: 7pt 'Times New Roman'"> (tng) (tng) (tng) (tng) (tng) (tng) (tng) </span></span> </span> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN">对象数据库与<b style="mso-bidi-font-weight: normal">性能</b></span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN"> <o:p> </o:p> </span> </p> <p class="MsoPlainText" style="MARGIN: 0mm 0mm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 21.0pt"> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-language: ZH-CN; mso-fareast-font-family: Wingdings"> <span style="mso-list: Ignore">l<span style="FONT: 7pt 'Times New Roman'"> (tng) (tng) (tng) (tng) (tng) (tng) (tng) </span></span> </span> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN">对象数据库与<b style="mso-bidi-font-weight: normal">查询语言</b></span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN"> <o:p> </o:p> </span> </p> <p class="MsoPlainText" style="MARGIN: 0mm 0mm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 21.0pt"> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-language: ZH-CN; mso-fareast-font-family: Wingdings"> <span style="mso-list: Ignore">l<span style="FONT: 7pt 'Times New Roman'"> (tng) (tng) (tng) (tng) (tng) (tng) (tng) </span></span> </span> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN">对象数据?b style="mso-bidi-font-weight: normal">体系和模?/b></span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN"> <o:p> </o:p> </span> </p> <p class="MsoPlainText" style="MARGIN: 0mm 0mm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 21.0pt"> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-language: ZH-CN; mso-fareast-font-family: Wingdings"> <span style="mso-list: Ignore">l<span style="FONT: 7pt 'Times New Roman'"> (tng) (tng) (tng) (tng) (tng) (tng) (tng) </span></span> </span> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN">对象数据库在<b style="mso-bidi-font-weight: normal">嵌入式系l?/b>?/span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN"> <o:p> </o:p> </span> </p> <p class="MsoPlainText" style="MARGIN: 0mm 0mm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 21.0pt"> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-language: ZH-CN; mso-fareast-font-family: Wingdings"> <span style="mso-list: Ignore">l<span style="FONT: 7pt 'Times New Roman'"> (tng) (tng) (tng) (tng) (tng) (tng) (tng) </span></span> </span> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN">对象数据库在<b style="mso-bidi-font-weight: normal">高可用?/b>?b style="mso-bidi-font-weight: normal">可变规模pȝ</b>?/span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN"> <o:p> </o:p> </span> </p> <p class="MsoPlainText" style="MARGIN: 0mm 0mm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 21.0pt"> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-language: ZH-CN; mso-fareast-font-family: Wingdings"> <span style="mso-list: Ignore">l<span style="FONT: 7pt 'Times New Roman'"> (tng) (tng) (tng) (tng) (tng) (tng) (tng) </span></span> </span> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN">对象数据库的不同<b style="mso-bidi-font-weight: normal">~程语言</b></span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN"> <o:p> </o:p> </span> </p> <p class="MsoPlainText" style="MARGIN: 0mm 0mm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 21.0pt"> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-language: ZH-CN; mso-fareast-font-family: Wingdings"> <span style="mso-list: Ignore">l<span style="FONT: 7pt 'Times New Roman'"> (tng) (tng) (tng) (tng) (tng) (tng) (tng) </span></span> </span> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN">对象数据库和<b style="mso-bidi-font-weight: normal">标准</b>Q例?/span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN">odmg</span> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN">?/span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN">4th generation</span> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN">”)(j)</span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN"> <o:p> </o:p> </span> </p> <p class="MsoPlainText" style="MARGIN: 0mm 0mm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 21.0pt"> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-language: ZH-CN; mso-fareast-font-family: Wingdings"> <span style="mso-list: Ignore">l<span style="FONT: 7pt 'Times New Roman'"> (tng) (tng) (tng) (tng) (tng) (tng) (tng) </span></span> </span> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN">对象数据库的<b style="mso-bidi-font-weight: normal">培训</b></span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN"> <o:p> </o:p> </span> </p> <p class="MsoPlainText" style="MARGIN: 0mm 0mm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 21.0pt"> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-language: ZH-CN; mso-fareast-font-family: Wingdings"> <span style="mso-list: Ignore">l<span style="FONT: 7pt 'Times New Roman'"> (tng) (tng) (tng) (tng) (tng) (tng) (tng) </span></span> </span> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN">对象数据?b style="mso-bidi-font-weight: normal">实现</b></span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN"> <o:p> </o:p> </span> </p> <p class="MsoPlainText" style="MARGIN: 0mm 0mm 0pt"> <b style="mso-bidi-font-weight: normal"> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN"> <o:p> (tng)</o:p> </span> </b> </p> <p class="MsoPlainText" style="MARGIN: 0mm 0mm 0pt"> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN">如果你能在以上的M主题有所贡献Q或M其他相关主题Q请与我联系?/span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN"> <o:p> </o:p> </span> </p> <p class="MsoPlainText" style="MARGIN: 0mm 0mm 0pt"> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN"> <o:p> (tng)</o:p> </span> </p> <p class="MsoPlainText" style="MARGIN: 0mm 0mm 0pt"> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">最后,请参考本|站?/span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA"> <a >FAQ</a> </span> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">Q相x(chng)d</span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA"> <a > <span lang="ZH-CN">q里</span> </a> </span> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">查阅Q官Ҏ(gu)v报可以在</span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA"> <a > <span lang="ZH-CN">q里</span> </a> </span> <span lang="ZH-CN" style="FONT-SIZE: 12pt; FONT-FAMILY: SimSun; mso-bidi-font-family: 'QS ゴシック'; mso-fareast-language: ZH-CN; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">览?/span> <br /> <br /> <span id="ctl00_ctl00_bcr_topicView___TopicBody"> <span id="ctl00_ctl00_bcr_topicView___TopicBody"> <span style="FONT-FAMILY: ?hu)?> <strong> <font color="#ff0000" size="2">h意!引用、{贴本文应注明原译者:(x)RosenJiang 以及(qing)出处Q?/font> </strong> <a href="/rosen/archive/2007/02/rosen/rosen/rosen"> <font face="?hu)? color="#ff0000" size="2"> <strong>http://www.aygfsteel.com/rosen</strong> </font> </a> </span> </span> </span> </p> <img src ="http://www.aygfsteel.com/rosen/aggbug/177365.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/rosen/" target="_blank">Rosen</a> 2008-01-23 21:24 <a href="http://www.aygfsteel.com/rosen/archive/2008/01/23/177365.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MapMeQ翻译)(j)http://www.aygfsteel.com/rosen/archive/2007/12/13/167622.htmlRosenRosenThu, 13 Dec 2007 15:44:00 GMThttp://www.aygfsteel.com/rosen/archive/2007/12/13/167622.htmlhttp://www.aygfsteel.com/rosen/comments/167622.htmlhttp://www.aygfsteel.com/rosen/archive/2007/12/13/167622.html#Feedback3http://www.aygfsteel.com/rosen/comments/commentRss/167622.htmlhttp://www.aygfsteel.com/rosen/services/trackbacks/167622.html ?/font>

本项目基?a >Davanum Srinivas开发的BrowseMapQ?a >BrowseMap是一个ؓ(f)Android开发的Google Maps览器,能提供:(x)
  • 在Android上浏览Google Maps
  • 地图的放大和~小
  • 跟随鼠标UdQ在真实讑֤上应该是触摸屏)(j)
  • 交通和卫星视图之间转换
  • 定位

Q这L(fng)地图应用E序基础功能实际上已l在Android上实C(jin)Q?br />
但是MapMe在这些基功能之上提供?jin)不新?gu),q都得感谢db4o对象持久引擎Q?

  • 把位|信息登记到db4oQ完整的地图持久化,包括~放U别以及(qing)卫星交通视图)(j)
  • 览书签列表
  • ~辑书签
  • 从书{中D到地图上某个位置
  • Ҏ(gu)当前GPS所报告的位|居中显C地?

屏幕截图

想看应用E序是如何运作的Q你可以观看?a >YouTube上的MapMe视频、从一个外部服务器下蝲高分辨率视频(30 Mb)或下面的屏幕截图Q?br />
db4o总部Q卫?交通视图)(j)



MapMe主菜单:(x)



建立书签/D?navpoint)Q?br />


保存的书{?D?navpoint)列表Q?br />


MapMe是如何运用db4o?/font>

如果你查看源代码Q下面有下蝲Q,你会(x)发现DB helpercd理了(jin)所有的持久化操作(开启、存储、查询、计数数据库Q,而这一切都不超q?0行代码!

q一切都很简单,而且不会(x)丧失性能。让我们来看一些项目中用到的持久化Ҏ(gu)?/p>

开启数据库

开启数据库的确单,q且在必要的时候还能自动生成数据库文g。一旦打开Qdb4o锁定数据库文g?/p>

public  (tng)ObjectContainer (tng)db(){

 (tng) (tng) (tng) (tng) (tng) (tng)
try  (tng){

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)
if (oc (tng) ==  (tng) null  (tng) ||  (tng)oc.ext().isClosed())

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)oc (tng)
=  (tng)Db4o.openFile(dbConfig(), (tng)db4oDBFullPath(context));

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)
return  (tng)oc;

 (tng) (tng) (tng) (tng) (tng) (tng)} (tng)
catch  (tng)(Exception (tng)e) (tng){

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)Log.e(Db4oHelper.
class .getName(), (tng)e.toString());

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)
return  (tng) null ;

 (tng) (tng) (tng) (tng) (tng) (tng)}

}

 (tng)

private  (tng)String (tng)db4oDBFullPath(Context (tng)ctx) (tng){

 (tng) (tng) (tng) (tng) (tng) (tng)
return  (tng)ctx.getDataDir() (tng) +  (tng) " / "  (tng) +  (tng) " browsemap.db4o " ;

}

注意我们所存放的数据库文g路径是和上下文数据目录有关的?br />
配置数据?/font>

q里我们提供一个配|对象,以便在打开数据库的时候把它传递进去(代码如下Q?br />
private (tng)Configuration (tng)dbConfig(){

 (tng) (tng) (tng) (tng) (tng) (tng)Configuration (tng)c (tng)
= (tng)Db4o.newConfiguration();

 (tng) (tng) (tng) (tng) (tng) (tng)c.objectClass(MapBookmark.
class).objectField("name").indexed(true);

 (tng) (tng) (tng) (tng) (tng) (tng)c.objectClass(MapBookmark.
class).updateDepth(2);

 (tng) (tng) (tng) (tng) (tng) (tng)c.objectClass(MapBookmark.
class).minimumActivationDepth(3);

 (tng) (tng) (tng) (tng) (tng) (tng)c.objectClass(MapBookmark.
class).cascadeOnDelete(true);

 (tng) (tng) (tng) (tng) (tng) (tng)
return (tng)c;

} (tng)

注意Qؓ(f)MapBookmark对象建立的烦(ch)引字D|“name”,q设|激zd更新U别?br />
保存?sh)?/font>

在这里我们调用一pd的操作,无论对象是否存在于数据库Q对象都?x)被更新或插入?/p>

public (tng)void (tng)setBookmark(

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)String (tng)name,

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)String (tng)description,

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)
int (tng)latitude,

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)
int (tng)longitude,

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)
int (tng)zoomLevel,

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)
boolean (tng)satellite,

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)
boolean (tng)traffic){

 (tng) (tng) (tng) (tng) (tng)

 (tng) (tng) (tng) (tng) (tng) (tng)MapBookmark (tng)bkm (tng)
= (tng)getBookmark(name);

 (tng) (tng) (tng) (tng) (tng) (tng)
if(bkm (tng)== (tng)null)

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)bkm (tng)
= (tng)new (tng)MapBookmark(name);

 (tng) (tng) (tng) (tng) (tng) (tng)bkm.setDescription(description);

 (tng) (tng) (tng) (tng) (tng) (tng)bkm.setLatitude(latitude);

 (tng) (tng) (tng) (tng) (tng) (tng)bkm.setLongitude(longitude);

 (tng) (tng) (tng) (tng) (tng) (tng)bkm.setZoomLevel(zoomLevel);

 (tng) (tng) (tng) (tng) (tng) (tng)bkm.setSatellite(satellite);

 (tng) (tng) (tng) (tng) (tng) (tng)bkm.setTraffic(traffic);

 (tng) (tng) (tng) (tng) (tng) (tng)db().set(bkm);

 (tng) (tng) (tng) (tng) (tng) (tng)db().commit();

}

在保存到数据库之前,我们讄好所有字Dc(din)?/p>

Ҏ(gu)名字查询书签

我们通过Query by Example(QBE)传入一个原型来取回以名字ؓ(f)条g的书{?/p>

public (tng)MapBookmark (tng)getBookmark(String (tng)name){

 (tng) (tng) (tng) (tng) (tng) (tng)MapBookmark (tng)proto (tng)
= (tng)new (tng)MapBookmark(name);

 (tng) (tng) (tng) (tng) (tng) (tng)ObjectSet (tng)result (tng)
= (tng)db().get(proto);

 (tng) (tng) (tng) (tng) (tng) (tng)
if(result.hasNext()){

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)
return (tng)(MapBookmark)result.next();

 (tng) (tng) (tng) (tng) (tng) (tng)}

 (tng) (tng) (tng) (tng) (tng) (tng)
return (tng)null;

}

QBE利用反射来检查原型对象的字段?br />
查询所有书{?/font>

q里我们把SODA查询l果拯到ArrayList中。但要注意,当用Native Queries时你不必q样做(在这U情况下直接返回List<MapBookmark>Q?/p>

public (tng)List<MapBookmark> (tng)getBookmarkList(){

 (tng) (tng) (tng) (tng) (tng) (tng)ArrayList
<MapBookmark> (tng)ret (tng)= (tng)new (tng)ArrayList<MapBookmark>();

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)ObjectSet (tng)result (tng)
= (tng)getBookmarks();

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)
while (tng)(result.hasNext())

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)ret.add((MapBookmark)result.next());

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)
return (tng)ret;

}

 (tng) (tng) (tng)

private (tng)ObjectSet (tng)getBookmarks(){

 (tng) (tng) (tng) (tng) (tng) (tng)Query (tng)query (tng)
= (tng)db().query();

 (tng) (tng) (tng) (tng) (tng) (tng)query.constrain(MapBookmark.
class);

 (tng) (tng) (tng) (tng) (tng) (tng)query.descend(
"name").orderAscending();

 (tng) (tng) (tng) (tng) (tng) (tng)
return (tng)query.execute();

}

删除书签

public (tng)void (tng)deleteBookmark(String (tng)name) (tng){

 (tng) (tng) (tng) (tng) (tng) (tng)MapBookmark (tng)bkm (tng)
= (tng)getBookmark(name);

 (tng) (tng) (tng) (tng) (tng) (tng)
if(bkm (tng)!= (tng)null){

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)db().delete(bkm);

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)db().commit();

 (tng) (tng) (tng) (tng) (tng) (tng)}

} (tng)

如果你的对象在db4o参考系l中存在Q你可以L的调用delete()操作从数据库中删除它?br />
书签计数

public (tng)int (tng)bookamrkCount(){

 (tng) (tng) (tng) (tng) (tng) (tng)
return (tng)getBookmarks().size();

}

 (tng) (tng) (tng)

private (tng)ObjectSet (tng)getBookmarks(){

 (tng) (tng) (tng) (tng) (tng) (tng)Query (tng)query (tng)
= (tng)db().query();

 (tng) (tng) (tng) (tng) (tng) (tng)query.constrain(MapBookmark.
class);

 (tng) (tng) (tng) (tng) (tng) (tng)query.descend(
"name").orderAscending();

 (tng) (tng) (tng) (tng) (tng) (tng)
return (tng)query.execute();

}


要通过查询来进行对象计敎ͼ你只要询问查询结果的大小卛_?br />
待完?/font>

  • Z书签的查询功能(通过db4o查询Q?
  • 支持手势识别(gesture recognition)Q?a >链接Q?
  • 当前位置提示(Tweet current location)Q?a >链接Q?
  • 把跟t到的GPS位置接收到屏q上q把GPS路线存储到数据库上(以便今后查看Q?
  • 把位|发送给联系人(短消息、e-mail{)(j)

下蝲

MapMe.Zip
YouTube上的MapMe视频
高分辨率视频(30 Mb)

h意!引用、{贴本文应注明原译者:(x)RosenJiang 以及(qing)出处Q?/font>http://www.aygfsteel.com/rosen



Rosen 2007-12-13 23:44 发表评论
]]>
Z么Android掀起一场手机领域的狂风(Why Android will start the mobile Tornado)http://www.aygfsteel.com/rosen/archive/2007/12/02/164654.htmlRosenRosenSun, 02 Dec 2007 08:46:00 GMThttp://www.aygfsteel.com/rosen/archive/2007/12/02/164654.htmlhttp://www.aygfsteel.com/rosen/comments/164654.htmlhttp://www.aygfsteel.com/rosen/archive/2007/12/02/164654.html#Feedback5http://www.aygfsteel.com/rosen/comments/commentRss/164654.htmlhttp://www.aygfsteel.com/rosen/services/trackbacks/164654.html阅读全文

Rosen 2007-12-02 16:46 发表评论
]]>
实战 OpenLaszlo ?db4ohttp://www.aygfsteel.com/rosen/archive/2007/08/12/136191.htmlRosenRosenSun, 12 Aug 2007 08:45:00 GMThttp://www.aygfsteel.com/rosen/archive/2007/08/12/136191.htmlhttp://www.aygfsteel.com/rosen/comments/136191.htmlhttp://www.aygfsteel.com/rosen/archive/2007/08/12/136191.html#Feedback6http://www.aygfsteel.com/rosen/comments/commentRss/136191.htmlhttp://www.aygfsteel.com/rosen/services/trackbacks/136191.html阅读全文

Rosen 2007-08-12 16:45 发表评论
]]>
开源面向对象数据库 db4o 之旅: 深入 db4o “db4o 之旅Q三Q?/title><link>http://www.aygfsteel.com/rosen/archive/2006/12/30/91052.html</link><dc:creator>Rosen</dc:creator><author>Rosen</author><pubDate>Sat, 30 Dec 2006 11:11:00 GMT</pubDate><guid>http://www.aygfsteel.com/rosen/archive/2006/12/30/91052.html</guid><wfw:comment>http://www.aygfsteel.com/rosen/comments/91052.html</wfw:comment><comments>http://www.aygfsteel.com/rosen/archive/2006/12/30/91052.html#Feedback</comments><slash:comments>17</slash:comments><wfw:commentRss>http://www.aygfsteel.com/rosen/comments/commentRss/91052.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/rosen/services/trackbacks/91052.html</trackback:ping><description><![CDATA[ <p> <a name="N10082"> <span id="wmqeeuq" class="atitle"> <strong> <font size="4">前言</font> </strong> </span> </a> </p> <p>在开源面向对象数据库 <a ><i><font color="#996699">db4o 之旅</font></i></a> pd文章的第 1 部分Q?a ><font color="#5c81a7">初识 db4o</font></a> 中,作者介l了(jin) db4o 的历史和现状Q应用领域,以及(qing)?ORM {的比较Q?在第 2 部分Q?a ><font color="#996699">db4o 查询方式</font></a>? 作者介l了(jin) db4o 的三U不同的查询方式QQBE、SODA 以及(qing) Native QueriesQƈ分别通过q三U不同的途径实现?jin)两个关联对象的查询?/p> <p>前面我们已经介绍?jin)如何?db4o 中查询以?qing)添加对象,在本文中我们?x)向?zhn)介绍?db4o 中如何对对象q行更新以及(qing)删除操作?br /> (tng)</p> <p> <a name="N1009C"> <font size="4"> <strong> <span id="wmqeeuq" class="atitle">更新数据</span> </strong> </font> </a> </p> <p> <b>场景一</b> </p> <p>我们来设惌L(fng)场景Q一位名叫“张三”的Z?jin)RQƈ上好?jin)牌照(如本pdW二部分之代码)(j)Q而他基本信息的地址q不详细Q只写了(jin)“成都市(jng)”,在一ơ主部门检查此Z息的时候,发现?jin)这个问题,q立即着手修攏V?/p> <p>?db4o 中,我们q样来实现对q个用户信息的修改(<a ><font color="#5c81a7">清单1</font></a>Q:(x)</p> <p> <br /> <a name="code1"> <b>清单1. 修改地址</b> </a> <br /> </p> <table cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td class="code-outline"> <pre class="displaycode"> package com; import bo.People; import com.db4o.Db4o; import com.db4o.ObjectContainer; import com.db4o.ObjectSet; import com.db4o.query.Predicate; public class DB4OTest{ public static void main(String[] args){ //打开数据? ObjectContainer db = Db4o.openFile("auto.yap"); try{ ObjectSet<People> result = db.query(new Predicate<People>() { public boolean match(People people) { return people.getName().equals("张三"); } }); People people = result.next(); //修改地址 people.setAddress("成都?jng)金牛区xxx?); db.set(people); }finally{ //关闭q接 db.close(); } } } </pre> </td> </tr> </tbody> </table> <br /> <p>修改数据是如此的单,通过 NQ 查询?People 对象Q接着修改其地址Q最后保存即可。现在我们来看看修改是否成功, 打开 ObjectManager Q如<a ><font color="#5c81a7">?1</font></a> 所C,我们可以看到数据库里的用h据已l更C(jin)?/p> <p> <br /> <a name="fig1"> <b>?. 修改地址</b> </a> <br /> <br /> <img height="388" alt="db4o31.jpg" src="http://www.aygfsteel.com/images/blogjava_net/rosen/db4o31.jpg" width="552" border="0" /> </p> <p>与本pd文章W二部分不同的是Q我们利?ObjectSet<People> result 来获取返回结果,而不?List<People> list。查?ObjectSet ?API 我们发现 ObjectSet 实际上(h)承了(jin) java.util.List ?java.util.Iterator。ؓ(f)什么要l承两个接口Q这是由?db4o Z(jin)方便开发者而有意这栯计的Qdb4o 的设计目标就是轻量Q这L(fng)l承方式?ObjectSet 提供?jin)多U特性,而无需开发者在多个集合接口之间转换?/p> <p> <b>场景?/b> </p> <p>让我们考虑下面q个场景:<br />׃工作原因Q“张三”要d省会(x)d他城?jng)发展,他的汽R也要在那里用,Z(jin)方便Q他q是军_重新更换为本地牌照?</p> <p>q次我们几乎和场景一采用同样的代码,但结果却不同Q?a ><font color="#5c81a7">清单2</font></a>Q:(x)</p> <p> <br /> <a name="code2"> <b>清单2. 修改地址和R牌(不成功)(j)</b> </a> <br /> </p> <table cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td class="code-outline"> <pre class="displaycode"> package com; import bo.People; import com.db4o.Db4o; import com.db4o.ObjectContainer; import com.db4o.ObjectSet; import com.db4o.query.Predicate; public class DB4OTest{ public static void main(String[] args){ //打开数据? ObjectContainer db = Db4o.openFile("auto.yap"); try{ ObjectSet<People> result = db.query(new Predicate<People>() { public boolean match(People people) { return people.getName().equals("张三"); } }); People people = result.next(); //修改地址 people.setAddress("l阳?jng)xx区xxx?); //修改车牌? people.getAutoInfoList().get(0).setLicensePlate("川B00000"); db.set(people); }finally{ //关闭q接 db.close(); } } } </pre> </td> </tr> </tbody> </table> <br /> <p>惛_应该保存成功?jin)吧Q只是多加入?jin)设|R牌的代码。打开 ObjectManagerQ如<a ><font color="#5c81a7">?2</font></a> 所C。很奇怪,地址保存成功?jin),而R牌却Ҏ(gu)没变化?/p> <p> <br /> <a name="fig2"> <b>?. 修改地址和R牌(不成功)(j)</b> </a> <br /> <br /> <img height="391" alt="db4o32.jpg" src="http://www.aygfsteel.com/images/blogjava_net/rosen/db4o32.jpg" width="564" border="0" /> </p> <p>其实q也?db4o 的有意安排。设想一个复杂对象有很多成员Qƈ且这些成员又有自q成员。当更新该对象,db4o 不得不更新其所有的兌对象、关联对象的兌对象Q等{。这引起严重的性能惩罚Q而且在大部分的情况下是没有必要这L(fng)?/p> <p>db4o 引入?jin)“更新深?update depth)”这一概念来控制被更新的对象成员树(wi)深度。默认的更新深度?1Q这意味着只有基本cd?String cd的成员变量可以被更新Q而修改对象成员将得不CQ何反映,例如本例中修?People 对象?_autoInfoList 成员?/p> <p>Z(jin)能更新成员对象,ob4o 提供?cascadeOnUpdate() Ҏ(gu)Q该Ҏ(gu)必须在每ơ开启数据库之前讄<a ><font color="#5c81a7">清单3</font></a>Q?/p> <p> <br /> <a name="code3"> <b>清单3. 修改地址和R牌(成功Q?/b> </a> <br /> </p> <table cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td class="code-outline"> <pre class="displaycode"> package com; import bo.People; import com.db4o.Db4o; import com.db4o.ObjectContainer; import com.db4o.ObjectSet; import com.db4o.query.Predicate; public class DB4OTest{ public static void main(String[] args){ //U联讄 Db4o.configure().objectClass("bo.People") .cascadeOnUpdate(true); //打开数据? ObjectContainer db = Db4o.openFile("auto.yap"); try{ ObjectSet<People> result = db.query(new Predicate<People>() { public boolean match(People people) { return people.getName().equals("张三"); } }); People people = result.next(); //修改地址 people.setAddress("l阳?jng)xx区xxx?); //修改车牌? people.getAutoInfoList().get(0).setLicensePlate("川B00000"); db.set(people); }finally{ //关闭q接 db.close(); } } } </pre> </td> </tr> </tbody> </table> <br /> <p>q下l于如愿以偿Q如<a ><font color="#5c81a7">?3</font></a> 所C。其?db4o 为开发者想得很周到Q关键是如何用好q些Ҏ(gu)?/p> <p> <br /> <a name="fig3"> <b>?. 修改地址和R牌(成功Q?/b> </a> <br /> <br /> <img height="379" alt="db4o33.jpg" src="http://www.aygfsteel.com/images/blogjava_net/rosen/db4o33.jpg" width="553" border="0" /> <br /> </p> <p> <a name="N10132"> <span id="wmqeeuq" class="atitle"> <font size="4"> <strong>删除数据</strong> </font> </span> </a> </p> <p> <b>场景?/b> </p> <p>“张三”换?jin)工作后Q事业发展很快,准备把R卖了(jin)换新的,于是他去交管部门办理UM手箋(hu)Q删除关联的车辆信息<a ><font color="#5c81a7">清单4</font></a>Q?/p> <p> <br /> <a name="code4"> <b>清单4. 删除车辆</b> </a> <br /> </p> <table cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td class="code-outline"> <pre class="displaycode"> package com; import bo.AutoInfo; import com.db4o.Db4o; import com.db4o.ObjectContainer; import com.db4o.ObjectSet; import com.db4o.query.Predicate; public class DB4OTest{ public static void main(String[] args){ //打开数据? ObjectContainer db = Db4o.openFile("auto.yap"); try{ ObjectSet<AutoInfo> result = db.query(new Predicate<AutoInfo>() { public boolean match(AutoInfo ai) { //匚w姓名和R牌号 return ai.getLicensePlate().equals("川B00000") && ai.getOwnerNo().getName().equals("张三"); } }); AutoInfo ai = result.next(); //删除车辆信息 db.delete(ai); }finally{ //关闭q接 db.close(); } } } </pre> </td> </tr> </tbody> </table> <br /> <p>?a ><font color="#5c81a7">?4</font></a> 所C,所兌的R辆信息已被删除了(jin)?/p> <p> <br /> <a name="fig4"> <b>?. 删除车辆信息</b> </a> <br /> <br /> <img height="379" alt="db4o34.jpg" src="http://www.aygfsteel.com/images/blogjava_net/rosen/db4o34.jpg" width="553" border="0" /> </p> <p> <b>场景?/b> </p> <p>在场景三的基上修改一下,设想“张三”由于工作不,D最后维护汽车的开支都困难Q他不得不退出有车一族的行列<a ><font color="#5c81a7">清单5</font></a>Q?/p> <p> <br /> <a name="code5"> <b>清单5. 删除所有信?/b> </a> <br /> </p> <table cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td class="code-outline"> <pre class="displaycode"> package com; import bo.People; import com.db4o.Db4o; import com.db4o.ObjectContainer; import com.db4o.ObjectSet; import com.db4o.query.Predicate; public class DB4OTest{ public static void main(String[] args){ //U联讄 Db4o.configure().objectClass("bo.People") .cascadeOnDelete(true); //打开数据? ObjectContainer db = Db4o.openFile("auto.yap"); try{ ObjectSet<People> result = db.query(new Predicate<People>() { public boolean match(People people) { //匚w姓名 return people.getName().equals("张三"); } }); People people = result.next(); //删除车主以及(qing)兌的R辆信? db.delete(people); }finally{ //关闭q接 db.close(); } } } </pre> </td> </tr> </tbody> </table> <br /> <p>用过 Hibernate 的开发者都知道Q它的联删除让人留下了(jin)深刻印象Q第一ơ用的时候都?x)?f)之振奋。db4o 也ؓ(f)开发者提供了(jin)U联删除Q和场景二的U联更新一P cascadeOnDelete() 是专门ؓ(f)删除准备的,基本概念?cascadeOnUpdate() 一致。打开 ObjectManager 我们?x)发现数据库已经清空了(jin),张三的购车经历到此结束?br /> (tng)</p> <p> <a name="N1017F"> <span id="wmqeeuq" class="atitle"> <font size="4"> <strong>l论</strong> </font> </span> </a> </p> <p>通过本系列文章,db4o 的优势已l体现得淋漓致Q它的添加、更新、删除是如此的简单,正如 db4o 的口号那样——“仅需一行代码就能存储复杂结构对象,极大的降低了(jin)开发时间和成本Q提供高效的性能Q无需 DBA q预”?/p> <p>如本文有不详之处,大家可以参考官方的《用h南》或讉K <a ><font color="#5c81a7">db4o 官方中文论坛</font></a>Qdb4o 中文C֌正在火热成长Q?br /> (tng)</p> <p> <a name="resources"> <span id="wmqeeuq" class="atitle"> <font size="4"> <strong>参考资?/strong> </font> </span> </a> </p> <p> <b>学习(fn)</b> <br /> </p> <ul> <li>db4o <a ><font color="#996699">官方|站</font></a> ?br /><br /></li> <li> <a > <i> <font color="#996699">面向对象数据?db4o 之旅pd</font> </i> </a>Q查看此pd文章完整列表?br /><br /></li> <li> <a > <font color="#5c81a7">ODMG 官方|站</font> </a>Q了(jin)?ODMG 技术?br /><br /></li> <li> <a > <font color="#5c81a7">developerWorks Java 技术专?/font> </a>Q数癄关于 Java ~程各个斚w的文章?<br /></li> </ul> <p> <br /> <b>获得产品和技?/b> <br /> </p> <ul> <li> <a > <font color="#5c81a7">下蝲 db4o 免费?/font> </a>?br /></li> </ul> <p> <br /> <b>讨论</b> <br /> </p> <ul> <li>db4o <a ><font color="#5c81a7">开发者论?/font></a>Q讨?db4o 技术?br /><br /></li> <li> <a > <font color="#5c81a7">developerWorks Java 论坛</font> </a>Q学?Java 技术。?br /> (tng) </li> </ul> <p> <a name="author"> <span id="wmqeeuq" class="atitle"> <strong> <font size="4">作者简?/font> </strong> </span> </a> </p> <p> </p> <table cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td colspan="3"> (tng)</td> </tr> <tr valign="top" align="left"> <td> <p> </p> </td> <td> <img height="5" alt="" src="http://www.ibm.com/i/c.gif" width="4" /> </td> <td width="100%"> <p>Rosen Jiang 来自成都Q是 db4o ?OO 的忠?fansQ是 2005 q?db4o ?dvp 获得者之一。他正在 J2me 应用中?db4oQ你可以通过 <a href="mailto:rosener_722@hotmail.com?cc="><font color="#5c81a7">rosener_722@hotmail.com</font></a> 和他联系?/p> </td> </tr> </tbody> </table> <br /> <table cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td colspan="3"> <img height="5" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /> </td> </tr> <tr valign="top" align="left"> <td> <p> </p> </td> <td> <img height="5" alt="" src="http://www.ibm.com/i/c.gif" width="4" /> </td> <td width="100%"> <p>Chris 来自香港Q热爱开源和 db4o。他创办?jin)中国最火热?Java 和开源社?MatrixQhttp://www.Matrix.org.cnQ, 你可以通过 <a href="mailto:chris@Matrix.org.cn?cc="><font color="#5c81a7">chris@Matrix.org.cn</font></a> 和他联系?/p> </td> </tr> </tbody> </table> <br /> <table cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td colspan="3"> <img height="5" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /> </td> </tr> <tr valign="top" align="left"> <td> <p> </p> </td> <td> <img height="5" alt="" src="http://www.ibm.com/i/c.gif" width="4" /> </td> <td width="100%"> <p>张黄瞩,热爱开源YӞ熟?zhn)?Java/C/C++ ~程语言Q对数据库技术网l技术均感兴。你可以通过 <a href="mailto:zhanghuangzhu@gmail.com?cc="><font color="#5c81a7">zhanghuangzhu@gmail.com</font></a> 联系他?/p> </td> </tr> </tbody> </table> <br /> <strong> <font face="Arial" color="#ff0000">IBM DeveloperWorks(IBM DW) 版权所有!引用、{贴本文应注明本文来自 IBM DW?/font> </strong> <img src ="http://www.aygfsteel.com/rosen/aggbug/91052.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/rosen/" target="_blank">Rosen</a> 2006-12-30 19:11 <a href="http://www.aygfsteel.com/rosen/archive/2006/12/30/91052.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开源面向对象数据库 db4o 之旅: db4o 查询方式“db4o 之旅Q二Q?http://www.aygfsteel.com/rosen/archive/2006/11/21/82529.htmlRosenRosenTue, 21 Nov 2006 06:21:00 GMThttp://www.aygfsteel.com/rosen/archive/2006/11/21/82529.htmlhttp://www.aygfsteel.com/rosen/comments/82529.htmlhttp://www.aygfsteel.com/rosen/archive/2006/11/21/82529.html#Feedback3http://www.aygfsteel.com/rosen/comments/commentRss/82529.htmlhttp://www.aygfsteel.com/rosen/services/trackbacks/82529.html 前言

?开源面向对象数据库 db4o 之旅 pd文章的第一部分Q?a >初识 db4o 中,作者介l了(jin) db4o 的历史和现状Q应用领域,以及(qing)?ORM {的比较。在q篇文章中,作者将?x)介l?db4o 的安装、启动以?qing)三U不同的查询方式QQBEQQuery by ExampleQ、SODAQSimple Object Database AccessQ?以及(qing) NQQNative QueriesQ,q分别通过q三U不同的途径实现?jin)两个关联对象的查询。本文还C?jin)开发中最l常用到的几个典型功能的 db4o 实现?/p>

下蝲和安?db4o

db4o 所有最新的版本都可以直接在官方|站上下载,q入 db4o ?a target="_blank">下蝲面Q我们可以看到最新的 for Java E_版本?5.5Q包?JAR、源代码、入门文档、API {内容的完整的打包文件只?6 MBQdb4o q有一个对象数据库理工具 ObjectManagerQ目前版本是 1.8Q请在参考资源中下蝲Q?/p>

接着?Eclipse 中新?Java 目Q把 db4o 对象数据库引擎包 db4o-5.5-java5.jar 导入q项目。由?db4o 支持多种版本?JDKQ除?for JDK 5.0 ?db4o-5.5-java5.jar 外,q有 for JDK 1.1?.2-1.4 ?JAR 包,以适应多种环境。与 Hibernate、iBATIS SQL Maps 相比Qdb4o 更加自然Q无需q多地引用第三方支持库?/p>

开启数据库

db4o 怎样q行对象持久化呢Q通过览目录可以发现Q与传统?RDBMS 一Pdb4o 也有自己的数据库文g, ?db4o 中数据库文g的后~名是?.yap”。让我们先来?jin)解一?db4o 对象数据库引擎的主要包结构:(x)

  • com.db4o
    com.db4o 包含?jin)?db4o 时最l常用到的功能。两个最重要的接口是 com.db4o.Db4o ?com.db4o.ObjectContainer。com.db4o.Db4o 工厂是运?db4o 的v点,q个cM的静(rn)态方法可以开启数据库文g、启动服务器或连接一个已l存在的服务器,q可以在开启数据库之前q行 db4o 环境配置。com.db4o.ObjectContainer 接口很重要,开发过E中 99% 的时间都?x)用到它QObjectContainer 可在单用h式下作ؓ(f)数据库实例,也可作ؓ(f) db4o 服务器的客户端。每?ObjectContainer 实例都有自己的事务。所有的操作都有事务保证。当打开 ObjectContainerQ就已经q入事务?jin),commit() ?rollback() Ӟ下一个事务立卛_动。每?ObjectContainer 实例l护它自己所理的已存储和已实例化对象,在需?ObjectContainer 的时候,它会(x)一直保持开启状态,一旦关闭,内存?sh)数据库所引用的对象将被丢弃?
  • com.db4o.ext
    你也许想知道Z么在 ObjectContainer 中只能看见很的Ҏ(gu)Q原因如下:(x)db4o 接口提供?jin)两个途径Q分别在 com.db4o ?com.db4o.ext 包中。这样做首先是ؓ(f)?jin)让开发者能快速上手;其次Z(jin)让其他品能更容易的复制基本?db4o 接口Q开发者从q一点上也能看出 db4o 是相当轻量的。每?com.db4o.ObjectContainer 对象也是 com.db4o.ext.ExtObjectContainer 对象。可以{换成 ExtObjectContainer 获得更多高Ҏ(gu)?
  • com.db4o.config
    com.db4o.config 包含?jin)所有配|?db4o 所需的类?
  • com.db4o.query
    com.db4o.query 包包含了(jin)构造“原生查? NQQNative QueriesQ”所需?Predicate cRNQ ?db4o 最主要的查询接口?

db4o 提供两种q行模式Q分别是本地模式和服务器模式。本地模式是指直接在E序里打开 db4o 数据库文件进行操作:(x)

ObjectContainer db = Db4o.openFile("auto.yap");

而服务器模式则是客户端通过 IP 地址、端口以?qing)授权口令来讉K服务器:(x)

服务器端Q?
ObjectServer server=Db4o.openServer("auto.yap",1212);
server.grantAccess("admin","123456");

客户端:(x)
ObjectContainer db=Db4o.openClient("192.168.0.10",1212,"admin","123456");

两种方式都可以得?ObjectContainer 实例Q就目前 Java EE 应用环境来看Q服务器模式更有现实意义Q而本地模式更适合于嵌入式应用。ؓ(f)?jin)简化演C,本文在下面的例子都将采用本地模式?/p>

在下面的例子里,我们都会(x)用到下面两个对象Q?People ?AutoInfo 对象?/p>

People 对象Q?/p>
清单1. People 对象
				
package bo;

public class People {

	private java.lang.Integer _id;
	private java.lang.String _name;
	private java.lang.String _address;
	private java.util.List<AutoInfo> _autoInfoList;

	public java.lang.Integer getId() {
		return _id;
	}

	public void setId(java.lang.Integer _id) {
		this._id = _id;
	}

	public java.lang.String getName() {
		return _name;
	}

	public void setName(java.lang.String _name) {
		this._name = _name;
	}

	public java.lang.String getAddress() {
		return _address;
	}

	public void setAddress(java.lang.String _address) {
		this._address = _address;
	}

	public java.util.List<AutoInfo> getAutoInfoList() {
		return this._autoInfoList;
	}

	public void addAutoInfo(AutoInfo _autoInfoList) {
		if (null == this._autoInfoList)
			this._autoInfoList = new java.util.ArrayList<AutoInfo>();
		this._autoInfoList.add(_autoInfoList);
	}

}

AutoInfo 对象Q?/p>
清单2. AutoInfo 对象
				
package bo;

public class AutoInfo{

	private java.lang.Integer _id;
	private java.lang.String _licensePlate;
	private bo.People _ownerNo;

	public java.lang.Integer getId () {
		return _id;
	}

	public void setId (java.lang.Integer _id) {
		this._id = _id;
	}

	public java.lang.String getLicensePlate () {
		return _licensePlate;
	}

	public void setLicensePlate (java.lang.String _licensePlate) {
		this._licensePlate = _licensePlate;
	}

	public bo.People getOwnerNo () {
		return this._ownerNo;
	}

	public void setOwnerNo (bo.People _ownerNo) {
		this._ownerNo = _ownerNo;
	}

}

利用 set Ҏ(gu)把新对象存入 ObjectContainerQ而对 ObjectContainer 中已有对象进?set 操作则是更新该对象。db4o 保存数据库很单,下面是一个段完整的保存对象的代码Q?/p>

AutoInfo 对象Q?/p>
清单3
				
package com;

import bo.AutoInfo;
import bo.People;

import com.db4o.Db4o;
import com.db4o.ObjectContainer;

public class DB4OTest{
	
	public static void main(String[] args){
		//打开数据?
		ObjectContainer db = Db4o.openFile("auto.yap");
		try{
			//构?People 对象
			People peo = new People(); 
			peo.setId(1);
			peo.setAddress("成都?);
			peo.setName("张三");
			//构?AutoInfo 对象
			AutoInfo ai = new AutoInfo();
			ai.setId(1);
			ai.setLicensePlate("川A00000");
			//讄 People ?AutoInfo 的关p?
			ai.setOwnerNo(peo);
			peo.addAutoInfo(ai);
			//保存对象
			db.set(peo);
		}finally{
			//关闭q接
			db.close();
		}
	}
}

当我们运行上qC码,db4o ?x)自动创建“auto.yap”文件。让我们来看看到底保存成功没有,打开 ObjectManager 工具Q?font color="#996699">?1 所C?/p>
?. 对象数据库管理工?/b>
?. 对象数据库管理工? src=

“File”->“Open File”->选择刚才我们保存的“auto.yap”文Ӟ“auto.yap”文件可在项目的根目录下扑ֈQ,最新的 ObjectManager 1.8 版本为我们提供了(jin)“Read Only”方式读取数据库文gQ避?ObjectManager 占用数据库文件所D的程序异常?/p>

打开之后Q图 2 所C,刚才存贮?People 对象已经在数据库中了(jin)Qƈ且还可以很直观的看到 AutoInfo 对象也放入了(jin) ArrayList 中。这U可视化的对象关pL利于我们Ҏ(gu)据的理解Q是传统 RDBMS 无法比拟的。有些开发者会(x)?ObjectManager 工具略显单,q点我想随着 db4o 的不断发展会(x)加入更多的特性。在q个工具中,我们意外的发C(jin) Java 集合对象的踪影,db4o 把与 ArrayList 有直接关pȝ所有接口和父类都保存(sh)(jin)Q这h得更直观?/p>

在此Q我保留?_id 属性,q是因ؓ(f)通常?Java EE 环境中,DAO W一ơ不是把整个对象都返回到表现层,而是只返回了(jin)“标题”、“发布时间”这些信息(q式的q回idQ,接着 DAO 与数据库断开Q要查看详情Q比如文章内容)(j)需要进?findById 操作Q这?DAO 要再ơ与数据库交互,只有唯一标识W才能正地扑ֈ对象。这U?i>懒加?/i>方式也是很多书籍所推荐的?/p>

回到本文的范例程序中Q这?_id 属性可׃h工编码实现的“序列”进行赋|当然 db4o 也提供了(jin)内部标识W?Internal IDsQ图 2 中的 id=1669Q以?UUIDs?/p>
?. 对象l构
?. 对象l构 (tng)


查询数据?/font>

?RDBMS 一Pdb4o 也有自己的查询语aQ分别是 QBEQQuery by ExampleQ、NQQNative QueriesQ、SODAQSimple Object Database AccessQ,db4o 更推荐?NQ q行查询。NQ 方式提供?jin)非常强大的查询功能Q支持原生语aQ也意味着你可以?Java 来判断该对象是否W合条gQ这是其他数据库查询语言无法比拟的。在某些情况下, db4o 核心(j)?x)?NQ 译?SODA 以获得更高的性能。下面详l介l一下这三种查询语言?/p>

QBEQQuery by ExampleQ?/font>

QBE 规范可在q里下蝲。QBE 最初由 IBM 提出Q同时业界也有许多和 QBE 兼容的接口,包括著名?Paradox。有些系l,比如微Y?AccessQ它的基于表单的查询也是受到?jin)部?QBE 思想的启发。在 db4o 中,用户可借用 QBE 快速上手,可以很容易适应 db4o 存取数据的方式?/p>

当利?QBE ?db4o 提供模板QexampleQ对象时Qdb4o 返回所有和非默认值字D匹配的全部对象。内部是通过反射所有的字段和构造查询表辑ּQ所有非默认值字D늻合”AND”表辑ּQ来实现?/p>

例如Q利?QBE 查找到R牌号为“川A00000”的车主姓名Q这是一个联查询?/p>
清单4
				
package com;

import java.util.List;

import bo.AutoInfo;

import com.db4o.Db4o;
import com.db4o.ObjectContainer;

public class DB4OTest{
	
	public static void main(String[] args){
		//打开数据?
		ObjectContainer db = Db4o.openFile("auto.yap");
		try{
			//构造模板对?
			AutoInfo ai = new AutoInfo();
			ai.setLicensePlate("川A00000");
			//查询对象
			List<AutoInfo> list = db.get(ai);
	    	for(int x = 0; x < list.size(); x++){
	    		System.out.println("车主姓名Q?+list.get(x).getOwnerNo().getName());
			}
		}finally{
			//关闭q接
			db.close();
		}
	}
}

但是 QBE 也有明显的限Ӟ(x)db4o 必须反射模板QexampleQ对象的所有成员;无法执行更进一步的查询表达式(例如 AND、OR、NOT {等Q;不能U束 0Q整型)(j)、””(I字W串Q或?nullQ对象)(j)Q因些都被认为是不受U束的。要l过q些限制Qdb4o 提供?NQQNative QueriesQ?/p>

SODAQSimple Object Database AccessQ?/font>

SODA Q简单对象数据库讉KQ请查看官方站点Q其中一位主要维护者是 Carl RosenbergerQCarl 正是 db4o 首席架构师?/p>

SODA 是一U与数据库通讯的对?API。最l的目标是实现类型安全、对象复用、最的字符串用、与~程语言无关{特性。SODA ?db4o 最底层的查?APIQ目?SODA 中用字W串来定义字D,q样不能实现类型安全也无法在编译时(g)查代码,而且写v来较ȝ(ch)Q当然要辑ֈ设计目标q个阶段是必ȝ。大部分情况?NQQNative QueriesQ是很好的查询接口,不过遇到动态生成查询的时?SODA 大有作Z(jin)?/p>

通过 SODA 查找到R牌号为“川A00000”的车主姓名Q?/p>
清单5
				
package com;

import java.util.List;

import bo.AutoInfo;

import com.db4o.Db4o;
import com.db4o.ObjectContainer;
import com.db4o.query.Query;

public class DB4OTest{
	
	public static void main(String[] args){
		//打开数据?
		ObjectContainer db = Db4o.openFile("auto.yap");
		try{
			//构造查询对?
			Query query=db.query();
			//讄被约束实?
			query.constrain(AutoInfo.class);
			//讄被约束实例的字段和约束条?
			query.descend("_licensePlate").constrain("川A00000");
			//查询对象
			List<AutoInfo> list = query.execute();
	    	for(int x = 0; x < list.size(); x++){
	    		System.out.println("车主姓名Q?+list.get(x).getOwnerNo().getName());
			}
		}finally{
			//关闭q接
			db.close();
		}
	}
}

通过 APIQ发?Query 实例增加?sortBy 按字D|序方法和 orderAscending正序、orderDescending 倒序排列Ҏ(gu)QSODA ?QBE 更进?jin)一步?/p>

NQQNative QueriesQ?/font>

_ֽL在最后出场,NQ 才是 db4o 查询方式中最_ֽ的地方!有没有想q用你熟(zhn)的的编E语aq行数据库查询呢Q要是这P你的查询代码是 100% 的类型安全?00% 的编译时(g)查以?100% 的可重构Q很奇妙吧?NQ 可以做到q些?/p>

有两论文专门讲解了(jin) NQ 的基本概念和设计思\Q分别是 《Cook/RosenbergerQ持久对象原生数据库查询语言?/font> ?《Cook/RaiQSafe Query Objects: Statically Typed Objects as Remotely Executable Queries》。作为结果集的一部分QNQ 表达式必返?true 值来标记特定实例。如果可能的?db4o 尝试优?NQ 表达式,q依赖烦(ch)引来q行表达式?/p>

通过 NQ 查找到R牌号为“川A00000”的车主姓名Q?/p>
清单6
				
package com;

import java.util.List;

import bo.AutoInfo;

import com.db4o.Db4o;
import com.db4o.ObjectContainer;
import com.db4o.query.Predicate;

public class DB4OTest{
	
	public static void main(String[] args){
		//打开数据?
		ObjectContainer db = Db4o.openFile("auto.yap");
		try{
			List <AutoInfo> list = db.query(new Predicate<AutoInfo>() {
				public boolean match(AutoInfo ai) {
			    	//q样才是cd安全?
			        return ai.getLicensePlate().equals("川A00000");
			    }
			});
	    	for(int x = 0; x < list.size(); x++){
	    		System.out.println(list.get(x).getOwnerNo().getName());
			}
		}finally{
			//关闭q接
			db.close();
		}
	}
}

必须指出 NQ 的一个的问题是:(x)在内部,db4o 设法?NQ 转换?SODA。但q不是所有的查询表达式都可以成功转换。有些查询表辑ּ的流向图QflowgraphQ非帔R于分析。这U情况下Qdb4o 不得不实例化一些持久对象来真实地运?NQ 表达式?/p>

正在开发中?NQ 查询优化器就可以化解q个障碍Q它?yu)分?NQ 表达式的每个部分Q以保最量的实例化对象Q以此提高性能。当?dng)优化器的不是灵丹妙药Q关键还需要自己多优化代码?/p>

开?Java EE 目l常?x)用到分,怎样?NQ 实现呢?向数据库写入六条记录Q?/p>
清单7
				
package com;

import java.util.List;

import bo.AutoInfo;

import com.db4o.Db4o;
import com.db4o.ObjectContainer;
import com.db4o.query.Predicate;

public class DB4OTest{
	
	public static void main(String[] args){
		//打开数据?
		ObjectContainer db = Db4o.openFile("auto.yap");
		try{
			List<AutoInfo> list = db.query(new Predicate<AutoInfo>() {
				public boolean match(AutoInfo ai) {
			        return true;
			    }
			});
			//记录L
			Integer count = list.size();
			//每页两条Q分三页
	    	for(int x = 0; x < 3; x++){
	    		System.out.println("W?+x+":(x)"+list.get(x*2).getLicensePlate());
	    		System.out.println("W?+x+":(x)"+list.get(x*2+1).getLicensePlate());
			}
		}finally{
			//关闭q接
			db.close();
		}
	}
}

我们发现Q在q行 NQ 查询时ƈ没有加入M条gQ无条gq回 trueQ,是不是相当于遍历?jin)整个数据库Qdb4o 的设计者早想C(jin)q个问题Q当 db.query() 执行完毕q回 list 实例的时候,db4o 只是与数据库同步取出内部 IDs 而已Qƈ没有把所有的 AutoInfo 对象全部取出Q只有在 list.get(x*2).getLicensePlate() 之后才会(x)L?IDs 取出记录。所以不必担?j)性能问题?/p>

l论

db4o 为开发者提供了(jin)多种查询方式Q这些方式都很灵zR要引v大家注意的是Q灵zd带来便利的同时也对开发者自w素质提Z(jin)更高的要求,Q比如排序,既可以用 SODA 也可以用 Java 集合对象实现Q在开发过E中一定要形成某种l一的开发模式,q样 db4o 才能最高效能地为我所用?/p>

参考资?/font>

学习(fn)

获得产品和技?/b>
  • db4o 官方|站Qdb4o 最C息以?db4o 下蝲?br />
  • 下蝲 db4o 对象数据库管理工?ObjectManager 1.8 for Windows?/li>

作者简?/p>


 (tng) Rosen Jiang 来自成都Q是 db4o ?OO 的忠?fansQ是 2005 q?db4o ?dvp 获得者之一。他正在 J2me 应用中?db4oQ你可以通过 rosener_722@hotmail.com 和他联系?

 (tng) Chris 来自香港Q热爱开源和 db4o。他创办?jin)中国最火热?Java 和开源社?MatrixQ?a >http://www.Matrix.org.cnQ, 你可以通过 chris@Matrix.org.cn 和他联系?br /> (tng)
 (tng) 张黄瞩,热爱开源YӞ熟?zhn)?Java/C/C++ ~程语言Q对数据库技术网l技术均感兴。你可以通过 zhanghuangzhu@gmail.com 联系他?br />
IBM DeveloperWorks(IBM DW) 版权所有!引用、{贴本文应注明本文来自 IBM DW?/font>



Rosen 2006-11-21 14:21 发表评论
]]>
db4o q接?/title><link>http://www.aygfsteel.com/rosen/archive/2006/09/27/72314.html</link><dc:creator>Rosen</dc:creator><author>Rosen</author><pubDate>Wed, 27 Sep 2006 07:26:00 GMT</pubDate><guid>http://www.aygfsteel.com/rosen/archive/2006/09/27/72314.html</guid><wfw:comment>http://www.aygfsteel.com/rosen/comments/72314.html</wfw:comment><comments>http://www.aygfsteel.com/rosen/archive/2006/09/27/72314.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.aygfsteel.com/rosen/comments/commentRss/72314.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/rosen/services/trackbacks/72314.html</trackback:ping><description><![CDATA[ <p>q几天花?jin)点旉弄?jin)?db4o q接池,比较单,q接池原型是论坛上面的一文章。很单,Ƣ迎拍砖?br /><br />?servlet 开始,在这里初始化q接池:(x)</p> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"> <span style="COLOR: #0000ff">package</span> <span style="COLOR: #000000"> (tng)com;<br /><br /></span> <span style="COLOR: #0000ff">import</span> <span style="COLOR: #000000"> (tng)java.io.File;<br /></span> <span style="COLOR: #0000ff">import</span> <span style="COLOR: #000000"> (tng)java.util.Enumeration;<br /><br /></span> <span style="COLOR: #0000ff">import</span> <span style="COLOR: #000000"> (tng)javax.servlet.ServletConfig;<br /></span> <span style="COLOR: #0000ff">import</span> <span style="COLOR: #000000"> (tng)javax.servlet.ServletException;<br /></span> <span style="COLOR: #0000ff">import</span> <span style="COLOR: #000000"> (tng)javax.servlet.http.HttpServlet;<br /><br /><br /></span> <span style="COLOR: #0000ff">public</span> <span style="COLOR: #000000"> (tng)</span> <span style="COLOR: #0000ff">class</span> <span style="COLOR: #000000"> (tng)ConnectionPollServlet (tng)</span> <span style="COLOR: #0000ff">extends</span> <span style="COLOR: #000000"> (tng)HttpServlet (tng){<br /> (tng) (tng) (tng) (tng)<br /> (tng) (tng) (tng) (tng)</span> <span style="COLOR: #0000ff">private</span> <span style="COLOR: #000000"> (tng)</span> <span style="COLOR: #0000ff">static</span> <span style="COLOR: #000000"> (tng)</span> <span style="COLOR: #0000ff">final</span> <span style="COLOR: #000000"> (tng)String (tng)XML_FILE_PROPERTY (tng)</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000"> (tng)</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">xmlFile</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">;<br /> (tng) (tng) (tng) (tng)<br /> (tng) (tng) (tng) (tng)</span> <span style="COLOR: #008000">/**</span> <span style="COLOR: #008000"> <br /> (tng) (tng) (tng) (tng) (tng)* (tng)servlet (tng)init<br /> (tng) (tng) (tng) (tng) (tng)</span> <span style="COLOR: #008000">*/</span> <span style="COLOR: #000000"> <br /> (tng) (tng) (tng) (tng)</span> <span style="COLOR: #0000ff">public</span> <span style="COLOR: #000000"> (tng)</span> <span style="COLOR: #0000ff">void</span> <span style="COLOR: #000000"> (tng)init(ServletConfig (tng)servletConfig) (tng)</span> <span style="COLOR: #0000ff">throws</span> <span style="COLOR: #000000"> (tng)ServletException{<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)</span> <span style="COLOR: #0000ff">super</span> <span style="COLOR: #000000">.init(servletConfig);<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)String (tng)appDir (tng)</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000"> (tng)servletConfig.getServletContext().getRealPath(</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">/</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">);<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)Enumeration (tng)names (tng)</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000"> (tng)servletConfig.getInitParameterNames();<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)</span> <span style="COLOR: #0000ff">while</span> <span style="COLOR: #000000">(names.hasMoreElements()){<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)String (tng)name (tng)</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000"> (tng)(String) (tng)names.nextElement();<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)String (tng)value (tng)</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000"> (tng)servletConfig.getInitParameter(name);<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)</span> <span style="COLOR: #0000ff">if</span> <span style="COLOR: #000000"> (tng)(name.equals(XML_FILE_PROPERTY)) (tng){<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)File (tng)file (tng)</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000"> (tng)</span> <span style="COLOR: #0000ff">new</span> <span style="COLOR: #000000"> (tng)File(value);<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)</span> <span style="COLOR: #0000ff">if</span> <span style="COLOR: #000000"> (tng)(file.isAbsolute()) (tng){<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)XMLReader.configure(value);<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)} (tng)</span> <span style="COLOR: #0000ff">else</span> <span style="COLOR: #000000"> (tng){<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)XMLReader.configure(appDir (tng)</span> <span style="COLOR: #000000">+</span> <span style="COLOR: #000000"> (tng)File.separator (tng)</span> <span style="COLOR: #000000">+</span> <span style="COLOR: #000000"> (tng)value);<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)}<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)}<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)}<br /> (tng) (tng) (tng) (tng)}<br /><br /> (tng) (tng) (tng) (tng)</span> <span style="COLOR: #008000">/**</span> <span style="COLOR: #008000"> <br /> (tng) (tng) (tng) (tng) (tng)* (tng)servlet (tng)destroy<br /> (tng) (tng) (tng) (tng) (tng)</span> <span style="COLOR: #008000">*/</span> <span style="COLOR: #000000"> <br /> (tng) (tng) (tng) (tng)</span> <span style="COLOR: #0000ff">public</span> <span style="COLOR: #000000"> (tng)</span> <span style="COLOR: #0000ff">void</span> <span style="COLOR: #000000"> (tng)destroy() (tng){<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)</span> <span style="COLOR: #0000ff">super</span> <span style="COLOR: #000000">.destroy();<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)ConnectionPoll.destroy();<br /> (tng) (tng) (tng) (tng)}<br />}</span> </div> <br />然后?XML 解析c:(x)<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> (tng)com;<br /><br /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> (tng)java.io.File;<br /><br /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> (tng)org.dom4j.Document;<br /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> (tng)org.dom4j.DocumentException;<br /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> (tng)org.dom4j.Element;<br /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> (tng)org.dom4j.io.SAXReader;<br /><br /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> (tng)</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> (tng)XMLReader (tng){<br /><br /> (tng) (tng) (tng) (tng)</span><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br /> (tng) (tng) (tng) (tng) (tng)* (tng)parse (tng)XML (tng)file<br /> (tng) (tng) (tng) (tng) (tng)* (tng)</span><span style="COLOR: #808080">@param</span><span style="COLOR: #008000"> (tng)xmlFileName<br /> (tng) (tng) (tng) (tng) (tng)</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br /> (tng) (tng) (tng) (tng)</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> (tng)</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> (tng)</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> (tng)configure(String (tng)xmlFileName) (tng){<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)</span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000"> (tng){<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)File (tng)file (tng)</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (tng)</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> (tng)File(xmlFileName);<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)SAXReader (tng)reader (tng)</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (tng)</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> (tng)SAXReader();<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)Document (tng)doc (tng)</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (tng)reader.read(file);<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)Element (tng)root (tng)</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (tng)doc.getRootElement();<br /><br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)String (tng)fileName (tng)</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (tng)file.getParent()</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\\</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">root.elementText(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">fileName</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)String (tng)sport (tng)</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (tng)root.elementText(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">port</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)String (tng)sminConn (tng)</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (tng)root.elementText(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">minConn</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)String (tng)sidelTime (tng)</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (tng)root.elementText(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">idelTime</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> (tng)port (tng)</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (tng)I(yng)nteger.parseInt(sport);<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> (tng)minConn (tng)</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (tng)I(yng)nteger.parseInt(sminConn);<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> (tng)idelTime (tng)</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (tng)I(yng)nteger.parseInt(sidelTime);<br /><br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)ConnectionPoll.init(fileName,port,minConn,idelTime);<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)} (tng)</span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000"> (tng)(DocumentException (tng)e) (tng){<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)e.printStackTrace();<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)}<br /> (tng) (tng) (tng) (tng)}<br />}</span></div><br /><br />q接池类Q?br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> (tng)com;<br /><br /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> (tng)java.util.concurrent.ConcurrentLinkedQueue;<br /><br /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> (tng)com.db4o.Db4o;<br /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> (tng)com.db4o.ObjectContainer;<br /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> (tng)com.db4o.ObjectServer;<br /><br /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> (tng)</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> (tng)ConnectionPoll (tng){<br /><br /> (tng) (tng) (tng) (tng)</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> (tng)</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> (tng)</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> (tng)idelTime;<br /> (tng) (tng) (tng) (tng)<br /> (tng) (tng) (tng) (tng)</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> (tng)</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> (tng)ConcurrentLinkedQueue</span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">ObjectContainer</span><span style="COLOR: #000000">></span><span style="COLOR: #000000"> (tng)connectionQueue;<br /> (tng) (tng) (tng) (tng)<br /> (tng) (tng) (tng) (tng)</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> (tng)ConnectionPoll(){<br /> (tng) (tng) (tng) (tng)}<br /> (tng) (tng) (tng) (tng)<br /> (tng) (tng) (tng) (tng)</span><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br /> (tng) (tng) (tng) (tng) (tng)* (tng)init (tng)pool<br /> (tng) (tng) (tng) (tng) (tng)</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br /> (tng) (tng) (tng) (tng)</span><span style="COLOR: #0000ff">protected</span><span style="COLOR: #000000"> (tng)</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> (tng)</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> (tng)init(String (tng)fileName,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> (tng)port,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> (tng)minConn,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> (tng)it) (tng){<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)idelTime</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">it;<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)ObjectServer (tng)objectServer (tng)</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (tng)Db4o.openServer(fileName,port);<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)connectionQueue (tng)</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (tng)</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> (tng)ConcurrentLinkedQueue</span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">ObjectContainer</span><span style="COLOR: #000000">></span><span style="COLOR: #000000">();<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000"> (tng)(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> (tng)i (tng)</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (tng)</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">; (tng)i</span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">minConn; (tng)i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">) (tng){<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)connectionQueue.offer(objectServer.openClient());<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)}<br /> (tng) (tng) (tng) (tng)}<br /><br /> (tng) (tng) (tng) (tng)</span><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br /> (tng) (tng) (tng) (tng) (tng)* (tng)get (tng)connection<br /> (tng) (tng) (tng) (tng) (tng)* (tng)</span><span style="COLOR: #808080">@return</span><span style="COLOR: #008000"> (tng)ObjectContainer<br /> (tng) (tng) (tng) (tng) (tng)* (tng)</span><span style="COLOR: #808080">@throws</span><span style="COLOR: #008000"> (tng)ConnectionTimeoutException (tng)<br /> (tng) (tng) (tng) (tng) (tng)* (tng)</span><span style="COLOR: #808080">@throws</span><span style="COLOR: #008000"> (tng)I(yng)nterruptedException<br /> (tng) (tng) (tng) (tng) (tng)</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br /> (tng) (tng) (tng) (tng)</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> (tng)</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> (tng)</span><span style="COLOR: #0000ff">synchronized</span><span style="COLOR: #000000"> (tng)ObjectContainer (tng)getConnection() (tng)</span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> (tng)ConnectionTimeoutException{<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000"> (tng)expiration (tng)</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (tng)System.currentTimeMillis() (tng)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> (tng)idelTime;<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000"> (tng)(connectionQueue.isEmpty())<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng){<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (tng)(expiration (tng)</span><span style="COLOR: #000000"><</span><span style="COLOR: #000000"> (tng)System.currentTimeMillis())<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng){<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)</span><span style="COLOR: #0000ff">throw</span><span style="COLOR: #000000"> (tng)</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> (tng)ConnectionTimeoutException(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">connection (tng)timeout!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)}<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)}<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)ObjectContainer (tng)objectContainer (tng)</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (tng)connectionQueue.poll();<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> (tng)objectContainer;<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)}<br /><br /> (tng) (tng) (tng) (tng)</span><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br /> (tng) (tng) (tng) (tng) (tng)* (tng)release (tng)connection<br /> (tng) (tng) (tng) (tng) (tng)* (tng)</span><span style="COLOR: #808080">@return</span><span style="COLOR: #008000"> (tng)ObjectContainer<br /> (tng) (tng) (tng) (tng) (tng)* (tng)</span><span style="COLOR: #808080">@throws</span><span style="COLOR: #008000"> (tng)I(yng)nterruptedException<br /> (tng) (tng) (tng) (tng) (tng)</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br /> (tng) (tng) (tng) (tng)</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> (tng)</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> (tng)</span><span style="COLOR: #0000ff">synchronized</span><span style="COLOR: #000000"> (tng)</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> (tng)releaseConnection(ObjectContainer (tng)objectContainer) (tng){<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)connectionQueue.offer(objectContainer);<br /> (tng) (tng) (tng) (tng)}<br /> (tng) (tng) (tng) (tng)<br /> (tng) (tng) (tng) (tng)</span><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br /> (tng) (tng) (tng) (tng) (tng)* (tng)destroy (tng)connection<br /> (tng) (tng) (tng) (tng) (tng)*<br /> (tng) (tng) (tng) (tng) (tng)</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br /> (tng) (tng) (tng) (tng)</span><span style="COLOR: #0000ff">protected</span><span style="COLOR: #000000"> (tng)</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> (tng)</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> (tng)destroy() (tng){<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000"> (tng)(connectionQueue.iterator().hasNext()){<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)ObjectContainer (tng)objectContainer (tng)</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (tng)connectionQueue.poll();<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)objectContainer.close();<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)}<br /> (tng) (tng) (tng) (tng)}<br />}</span></div><br />时异常c:(x)<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> (tng)com;<br /><br /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> (tng)</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> (tng)ConnectionTimeoutException (tng)</span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000"> (tng)Exception{<br /><br /> (tng) (tng) (tng) (tng)</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> (tng)ConnectionTimeoutException()<br /> (tng) (tng) (tng) (tng){<br /> (tng) (tng) (tng) (tng)}<br /><br /> (tng) (tng) (tng) (tng)</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> (tng)ConnectionTimeoutException(String (tng)s)<br /> (tng) (tng) (tng) (tng){<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)</span><span style="COLOR: #0000ff">super</span><span style="COLOR: #000000">(s);<br /> (tng) (tng) (tng) (tng)}<br />}</span></div><br />XML 配置文gQ从上到下依ơ是Q数据库文g名、端口、初始连接数、等待时_(d)(x)<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff"><?</span><span style="COLOR: #ff00ff">xml (tng)version="1.0" (tng)encoding="utf-8"</span><span style="COLOR: #0000ff">?></span><span style="COLOR: #000000"><br /> (tng) (tng)</span><span style="COLOR: #0000ff"><</span><span style="COLOR: #800000">config</span><span style="COLOR: #0000ff">></span><span style="COLOR: #000000"><br /> (tng) (tng) (tng) (tng)</span><span style="COLOR: #0000ff"><</span><span style="COLOR: #800000">fileName</span><span style="COLOR: #0000ff">></span><span style="COLOR: #000000">auto.yap</span><span style="COLOR: #0000ff"></</span><span style="COLOR: #800000">fileName</span><span style="COLOR: #0000ff">></span><span style="COLOR: #000000"><br /> (tng) (tng) (tng) (tng)</span><span style="COLOR: #0000ff"><</span><span style="COLOR: #800000">port</span><span style="COLOR: #0000ff">></span><span style="COLOR: #000000">1010</span><span style="COLOR: #0000ff"></</span><span style="COLOR: #800000">port</span><span style="COLOR: #0000ff">></span><span style="COLOR: #000000"><br /> (tng) (tng) (tng) (tng)</span><span style="COLOR: #0000ff"><</span><span style="COLOR: #800000">minConn</span><span style="COLOR: #0000ff">></span><span style="COLOR: #000000">10</span><span style="COLOR: #0000ff"></</span><span style="COLOR: #800000">minConn</span><span style="COLOR: #0000ff">></span><span style="COLOR: #000000"><br /> (tng) (tng) (tng) (tng)</span><span style="COLOR: #0000ff"><</span><span style="COLOR: #800000">idelTime</span><span style="COLOR: #0000ff">></span><span style="COLOR: #000000">1000</span><span style="COLOR: #0000ff"></</span><span style="COLOR: #800000">idelTime</span><span style="COLOR: #0000ff">></span><span style="COLOR: #000000"><br /> (tng) (tng)</span><span style="COLOR: #0000ff"></</span><span style="COLOR: #800000">config</span><span style="COLOR: #0000ff">></span></div><br />web.xml 用于初始化的时候加载:(x)<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff"><?</span><span style="COLOR: #ff00ff">xml (tng)version="1.0" (tng)encoding="UTF-8"</span><span style="COLOR: #0000ff">?></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff"><!</span><span style="COLOR: #ff00ff">DOCTYPE (tng)web-app (tng)PUBLIC (tng)"-//Sun (tng)Microsystems, (tng)I(yng)nc.//DTD (tng)Web (tng)Application (tng)2.3//EN" (tng)"http://java.sun.com/dtd/web-app_2_3.dtd"</span><span style="COLOR: #0000ff">></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff"><</span><span style="COLOR: #800000">web-app</span><span style="COLOR: #0000ff">></span><span style="COLOR: #000000"><br /> (tng) (tng)</span><span style="COLOR: #0000ff"><</span><span style="COLOR: #800000">servlet</span><span style="COLOR: #0000ff">></span><span style="COLOR: #000000"><br /> (tng) (tng) (tng) (tng)</span><span style="COLOR: #0000ff"><</span><span style="COLOR: #800000">servlet-name</span><span style="COLOR: #0000ff">></span><span style="COLOR: #000000">ConnectionPoll</span><span style="COLOR: #0000ff"></</span><span style="COLOR: #800000">servlet-name</span><span style="COLOR: #0000ff">></span><span style="COLOR: #000000"><br /> (tng) (tng) (tng) (tng)</span><span style="COLOR: #0000ff"><</span><span style="COLOR: #800000">servlet-class</span><span style="COLOR: #0000ff">></span><span style="COLOR: #000000">com.ConnectionPollServlet</span><span style="COLOR: #0000ff"></</span><span style="COLOR: #800000">servlet-class</span><span style="COLOR: #0000ff">></span><span style="COLOR: #000000"><br /> (tng) (tng) (tng) (tng) (tng) (tng)</span><span style="COLOR: #0000ff"><</span><span style="COLOR: #800000">init-param</span><span style="COLOR: #0000ff">></span><span style="COLOR: #000000"><br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)</span><span style="COLOR: #0000ff"><</span><span style="COLOR: #800000">param-name</span><span style="COLOR: #0000ff">></span><span style="COLOR: #000000">xmlFile</span><span style="COLOR: #0000ff"></</span><span style="COLOR: #800000">param-name</span><span style="COLOR: #0000ff">></span><span style="COLOR: #000000"><br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)</span><span style="COLOR: #0000ff"><</span><span style="COLOR: #800000">param-value</span><span style="COLOR: #0000ff">></span><span style="COLOR: #000000">WEB-INF/poolConfig.xml</span><span style="COLOR: #0000ff"></</span><span style="COLOR: #800000">param-value</span><span style="COLOR: #0000ff">></span><span style="COLOR: #000000"><br /> (tng) (tng) (tng) (tng) (tng) (tng)</span><span style="COLOR: #0000ff"></</span><span style="COLOR: #800000">init-param</span><span style="COLOR: #0000ff">></span><span style="COLOR: #000000"><br /> (tng) (tng) (tng) (tng)</span><span style="COLOR: #0000ff"><</span><span style="COLOR: #800000">load-on-startup</span><span style="COLOR: #0000ff">></span><span style="COLOR: #000000">1</span><span style="COLOR: #0000ff"></</span><span style="COLOR: #800000">load-on-startup</span><span style="COLOR: #0000ff">></span><span style="COLOR: #000000"><br /> (tng) (tng)</span><span style="COLOR: #0000ff"></</span><span style="COLOR: #800000">servlet</span><span style="COLOR: #0000ff">></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff"></</span><span style="COLOR: #800000">web-app</span><span style="COLOR: #0000ff">></span></div><br /><br />数据库文件和参数配置文g都放?WEB-INF 文g夹下。这个连接池q未实现 maxConnQ最大连接数Q和对多数据库文件的支持以及(qing)日志{?br /><br /><br /><strong><font face="Arial" color="#ff0000" size="2">h意!引用、{贴本文应注明原作者:(x)Rosen Jiang 以及(qing)出处Q?/font></strong><a href="/rosen"><font face="?hu)? color="#ff0000" size="2"><strong>http://www.aygfsteel.com/rosen</strong></font></a><img src ="http://www.aygfsteel.com/rosen/aggbug/72314.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/rosen/" target="_blank">Rosen</a> 2006-09-27 15:26 <a href="http://www.aygfsteel.com/rosen/archive/2006/09/27/72314.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>dRS 产品信息 V1.0Q中文版Q?/title><link>http://www.aygfsteel.com/rosen/archive/2006/08/09/62669.html</link><dc:creator>Rosen</dc:creator><author>Rosen</author><pubDate>Wed, 09 Aug 2006 15:14:00 GMT</pubDate><guid>http://www.aygfsteel.com/rosen/archive/2006/08/09/62669.html</guid><wfw:comment>http://www.aygfsteel.com/rosen/comments/62669.html</wfw:comment><comments>http://www.aygfsteel.com/rosen/archive/2006/08/09/62669.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/rosen/comments/commentRss/62669.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/rosen/services/trackbacks/62669.html</trackback:ping><description><![CDATA[     摘要: "dRS Product Information V1.0" 中文版发布了(jin)Q请在这里下载:(x) dRS 产品信息 V1.0 中文? ? -------------------------------------------1.0 版本 ...  <a href='http://www.aygfsteel.com/rosen/archive/2006/08/09/62669.html'>阅读全文</a><img src ="http://www.aygfsteel.com/rosen/aggbug/62669.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/rosen/" target="_blank">Rosen</a> 2006-08-09 23:14 <a href="http://www.aygfsteel.com/rosen/archive/2006/08/09/62669.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开源面向对象数据库 db4o 之旅: 初识 db4o“db4o 之旅Q一Q?/title><link>http://www.aygfsteel.com/rosen/archive/2006/06/15/53094.html</link><dc:creator>Rosen</dc:creator><author>Rosen</author><pubDate>Thu, 15 Jun 2006 13:39:00 GMT</pubDate><guid>http://www.aygfsteel.com/rosen/archive/2006/06/15/53094.html</guid><wfw:comment>http://www.aygfsteel.com/rosen/comments/53094.html</wfw:comment><comments>http://www.aygfsteel.com/rosen/archive/2006/06/15/53094.html#Feedback</comments><slash:comments>21</slash:comments><wfw:commentRss>http://www.aygfsteel.com/rosen/comments/commentRss/53094.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/rosen/services/trackbacks/53094.html</trackback:ping><description><![CDATA[     摘要: 很多开发者对 hibernate 性能表示|疑Q下一ơ技术革C(x)是什么呢Q——对象数据库 <br>本文?db4o 之旅pd文章的第一,介绍?jin)面向对象数据?db4o 的基本特性,q且与传l关pd数据库以?OR 映射技术做?jin)比较分析,读者可以体验到 db4o 的全新的面向对象存储的理念,q且l出?jin)性能试数据?nbsp; <a href='http://www.aygfsteel.com/rosen/archive/2006/06/15/53094.html'>阅读全文</a><img src ="http://www.aygfsteel.com/rosen/aggbug/53094.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/rosen/" target="_blank">Rosen</a> 2006-06-15 21:39 <a href="http://www.aygfsteel.com/rosen/archive/2006/06/15/53094.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>持久对象原生数据库查询语aQ中文版Q?/title><link>http://www.aygfsteel.com/rosen/archive/2006/02/26/32519.html</link><dc:creator>Rosen</dc:creator><author>Rosen</author><pubDate>Sun, 26 Feb 2006 12:21:00 GMT</pubDate><guid>http://www.aygfsteel.com/rosen/archive/2006/02/26/32519.html</guid><wfw:comment>http://www.aygfsteel.com/rosen/comments/32519.html</wfw:comment><comments>http://www.aygfsteel.com/rosen/archive/2006/02/26/32519.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.aygfsteel.com/rosen/comments/commentRss/32519.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/rosen/services/trackbacks/32519.html</trackback:ping><description><![CDATA[     摘要: 持久对象原生数据库查询语a 设计白皮?  (tng) ...  <a href='http://www.aygfsteel.com/rosen/archive/2006/02/26/32519.html'>阅读全文</a><img src ="http://www.aygfsteel.com/rosen/aggbug/32519.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/rosen/" target="_blank">Rosen</a> 2006-02-26 20:21 <a href="http://www.aygfsteel.com/rosen/archive/2006/02/26/32519.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank">ʯȪ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ѿ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ű</a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ͬ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ǭ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ϸ</a>| <a href="http://" target="_blank">«</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Զ</a>| <a href="http://" target="_blank">Ƥ</a>| <a href="http://" target="_blank">̨</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ٳ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ϫ</a>| <a href="http://" target="_blank">ֹ</a>| <a href="http://" target="_blank">ͨ</a>| <a href="http://" target="_blank">۷</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ĵ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">°Ͷ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Դ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>