⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 java数据对象(jdo)的应用1.htm

📁 详细地讨论Sun公司的Java数据对象(JDO)标准。JDO允许我们使用Java对象
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0067)http://www.javaeasy.com/ArticleShow.asp?ArticleID=326&ArticlePage=2 -->
<HTML><HEAD><TITLE>Java数据对象(JDO)的应用</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312"><LINK 
href="Java数据对象(JDO)的应用1.files/default.css" type=text/css rel=stylesheet>
<META 
content="java;java程序员;编程;程序员; java文档; java编程; java应用; java数据库; java源码; java开发; swing; JDK; java技术; J2EE; JSP; JavaScript; EJB; XML; 数据库; 软件开发; java网络技术; 陈光明; java资料; " 
name=KEYWORDS>
<META content="MSHTML 6.00.2800.1491" name=GENERATOR></HEAD>
<BODY bgColor=#660033 leftMargin=0 topMargin=0 marginwidth="0" 
marginheight="0"><LINK href="Java数据对象(JDO)的应用1.files/default.css" type=text/css 
rel=stylesheet>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
  <TBODY>
  <TR vAlign=top>
    <TD vAlign=top width="100%" height=86>
      <TABLE cellSpacing=0 cellPadding=0 width="99%" align=center 
      bgColor=#ffffff border=0>
        <TBODY>
        <TR>
          <TD vAlign=top width="38%"><IMG height=86 
            src="Java数据对象(JDO)的应用1.files/ci.jpg" width=279 border=0></TD>
          <TD vAlign=center width="62%">
            <DIV align=center>
            <OBJECT 
            codeBase=http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0 
            height=60 width=480 
            classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000><PARAM NAME="movie" VALUE="images/bannerswf.swf"><PARAM NAME="quality" VALUE="high">
                                                                  <embed 
            src="images/bannerswf.swf" width="480" height="60" quality="high" 
            pluginspage="http://www.macromedia.com/go/getflashplayer" 
            type="application/x-shockwave-flash"></embed></OBJECT></DIV></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="99%" align=center border=0>
  <TBODY>
  <TR>
    <TD vAlign=top align=middle colSpan=5 height=301>
      <TABLE cellSpacing=0 cellPadding=0 width="100%" align=center 
      bgColor=#ffffff border=0>
        <TBODY>
        <TR>
          <TD>&nbsp;</TD>
          <TD class=class-name width="100%" height=30><A 
            href="http://www.javaeasy.com/index.asp">首页</A>&gt;&gt;<A 
            href="http://www.javaeasy.com/artclelist.asp">文档中心</A>&gt;&gt;&nbsp;<A 
            href="http://www.javaeasy.com/artclelist2.asp?BigClassName=数据库">数据库&nbsp;</A>&gt;&gt;&nbsp;<A 
            href="http://www.javaeasy.com/artclelist2.asp?BigClassName=数据库&amp;SmallClassName=JDO">JDO&nbsp;</A>&gt;&gt;&nbsp; 
          </TD>
          <TD></TD></TR>
        <TR>
          <TD width=5></TD>
          <TD vAlign=top>
            <TABLE cellSpacing=0 cellPadding=0 width="100%" bgColor=#ffffff 
            border=0>
              <TBODY>
              <TR>
                <TD bgColor=#cccccc height=1><IMG height=1 
                  src="Java数据对象(JDO)的应用1.files/blank.gif" width=1></TD></TR>
              <TR>
                <TD bgColor=#f6f6f6 height=89>
                  <P align=center><FONT face="黑体,Arial, Helvetica, sans-serif" 
                  color=#000000 
                  size=4><STRONG><BR>Java数据对象(JDO)的应用</STRONG></FONT><FONT 
                  color=gray size=1>阅读次数1455</FONT> </P>
                  <P 
                  align=right>作者:刘彦青&nbsp;&nbsp;&nbsp;&nbsp;出处:不详&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                  </P></TD></TR></TBODY></TABLE>
            <P>person&nbsp;=&nbsp;(Person)&nbsp;pm.getObjectById(id.elementAt(i),&nbsp;<BR>false);&nbsp;<BR>System.out.println("Name&nbsp;:&nbsp;"&nbsp;+&nbsp;person.getName());&nbsp;<BR>System.out.println("Address&nbsp;:&nbsp;"&nbsp;+&nbsp;<BR>person.getAddress());&nbsp;<BR>System.out.println("SSN&nbsp;:&nbsp;"&nbsp;+&nbsp;person.getSsn());&nbsp;<BR>System.out.println("Email&nbsp;:&nbsp;"&nbsp;+&nbsp;person.getEmail());&nbsp;<BR>System.out.println("Home&nbsp;Phone:&nbsp;"&nbsp;+&nbsp;<BR>person.getHomePhone());&nbsp;<BR>System.out.println("Work&nbsp;Phone:&nbsp;"&nbsp;+&nbsp;<BR>person.getWorkPhone());&nbsp;<BR>}&nbsp;<BR>pm.close();&nbsp;<BR>}&nbsp;<BR>第四步:改变其中一个人的名字&nbsp;<BR>改变存储在数据库中的一个人的信息的代码也十分简单,它与显示数据库中人的信息的代码非常类似。在这里,我们需要创建一个事务(因为要修改其中的记录),使用定义的setName()方法修改一个人的名字,最终提交该事务,保存所作的修改。这种操作与处理临时对象之间真正的差别是,我们考虑是事务。&nbsp;<BR>public&nbsp;void&nbsp;change()&nbsp;{&nbsp;<BR>Person&nbsp;person;&nbsp;<BR><BR>//&nbsp;从数据存储库中获取对象&nbsp;<BR>pm&nbsp;=&nbsp;pmf.getPersistenceManager();&nbsp;<BR>transaction&nbsp;=&nbsp;pm.currentTransaction();&nbsp;<BR>//&nbsp;修改第二个保持记录的DataString字段&nbsp;<BR>person&nbsp;=&nbsp;(Person)&nbsp;pm.getObjectById(id.elementAt(1),&nbsp;<BR>false);&nbsp;<BR>person.setName("Steve&nbsp;Gerrard");&nbsp;<BR>//&nbsp;提交事务并关闭可保持性管理器&nbsp;<BR>transaction.commit();&nbsp;<BR>pm.close();&nbsp;<BR>}&nbsp;<BR>第五步:删除一个人的资料&nbsp;<BR>你自己能够想象出从数据库中删除第二个人资料的代码吗?因为我们已经了解了所有编写这一代码所需要的知识。仔细地研究一下下面的代码就会发现,我们使用了第二步中的可保持性管理器方法中提到的deletePersistent()方法。&nbsp;<BR>public&nbsp;void&nbsp;delete()&nbsp;{&nbsp;<BR>//&nbsp;从数据库中获取对象&nbsp;<BR>pm&nbsp;=&nbsp;pmf.getPersistenceManager();&nbsp;<BR>transaction&nbsp;=&nbsp;pm.currentTransaction();&nbsp;<BR>//&nbsp;从数据库中删除第二个人的信息,并从ID向量中删除其ID&nbsp;<BR>pm.deletePersistent(pm.getObjectById(id.remove(1),&nbsp;<BR>false));&nbsp;<BR>//&nbsp;提交事务并关闭可保持性管理器&nbsp;<BR>transaction.commit();&nbsp;<BR>pm.close();&nbsp;<BR>}&nbsp;<BR>第六步:在main()方法中运行上面的代码&nbsp;<BR>最后,整个代码需要有一个main()串起来,在数据库中输入人的信息、改变其中一个人的名字,然后删除该人的资料。如果运行这一程序,就会看到程序运行到每一步时的地址簿。&nbsp;<BR>public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;{&nbsp;<BR>System.out.println("Create&nbsp;PersonPersist");&nbsp;<BR>PersonPersist&nbsp;personPersist&nbsp;=&nbsp;new&nbsp;PersonPersist();&nbsp;<BR><BR>System.out.println("Setup&nbsp;and&nbsp;persist&nbsp;a&nbsp;group&nbsp;of&nbsp;people");&nbsp;<BR>personPersist.persistPeople();&nbsp;<BR><BR>System.out.println("Display&nbsp;the&nbsp;persisted&nbsp;people");&nbsp;<BR>personPersist.display(SIZE);&nbsp;<BR><BR>System.out.println("Change&nbsp;a&nbsp;name&nbsp;");&nbsp;<BR>personPersist.change();&nbsp;<BR>personPersist.display(SIZE);&nbsp;<BR><BR>System.out.println("Delete&nbsp;a&nbsp;person&nbsp;");&nbsp;<BR>personPersist.delete();&nbsp;<BR>personPersist.display(SIZE&nbsp;-&nbsp;1);&nbsp;<BR>}&nbsp;<BR>JDOEnhancer:创建JDOEnhancer的JDO描述符&nbsp;<BR><BR>现在,我们已经编写好了整个应用程序的源代码,下一步需要作的就是创建一个JDOEnhancer将要使用的&nbsp;<BR>JDO描述符。读者一定会问,JDOEnhancer是什么?JDO架构是基于下面的理念的:一个JDO实现能够获取类的字节码,对它们进行处理,添加一些必要的功能。例如,JDOEnhancer将使类实现PersistanceCapable接口(因此我们不用自己编程实现这一接口),而且能够实现该接口中的一些方法。因此在对代码编译后我们就会发现,我们必须运行JDOEnhancer对字节码进行适当的处理。我们需要创建一个给出我们需要保持的类的信息的描述符文件,这一文件如下所示:&nbsp;<BR><BR>&lt;?xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"?&gt;&nbsp;<BR>&lt;!DOCTYPE&nbsp;jdo&nbsp;SYSTEM&nbsp;<BR>"file:/D:/Apps/OpenFusionJDO/xml/schema/jdo.dtd"&gt;&nbsp;<BR>&lt;jdo&gt;&nbsp;<BR>&lt;package&nbsp;name="addressbook"&gt;&nbsp;<BR>&lt;class&nbsp;name="Person"&nbsp;identity-type="datastore"&gt;&nbsp;<BR>&lt;/class&gt;&nbsp;<BR>&lt;/package&gt;&nbsp;<BR>&lt;/jdo&gt;&nbsp;<BR>这只是一个最基本的文件,但能够满足我们的要求。当然了,还有许多更复杂的映射。下面是OpenFusion例子中一个稍微复杂一些的映射:&nbsp;<BR>&lt;class&nbsp;name="Department"&nbsp;identity-type="datastore"&gt;&nbsp;<BR>&lt;field&nbsp;name="name"/&gt;&nbsp;<BR>&lt;field&nbsp;name="employees"&gt;&nbsp;<BR>&lt;collection&nbsp;element-&nbsp;<BR>type="com.prismt.j2ee.jdo.examples.appKeyDepartment.Employee"&gt;&nbsp;<BR>&lt;/collection&gt;&nbsp;<BR>&lt;/field&gt;&nbsp;<BR>&lt;field&nbsp;name="manager"/&gt;&nbsp;<BR>&lt;/class&gt;&nbsp;<BR>&lt;/package&gt;&nbsp;<BR>&lt;/jdo&gt;&nbsp;<BR>现在我们已经编写好了代码和JDO描述符文件,我们将对它们进行整合,并讨论如何建立整个系统。要建立整个系统,我们只需要简单的几步工作即可:&nbsp;<BR>1、编译代码。&nbsp;<BR>2、运行JDOEnhancer。&nbsp;<BR>3、使用JDOEnhancer的输出建立数据库。&nbsp;<BR>4、运行应用程序。&nbsp;<BR>第一步:编译代码&nbsp;<BR>我想广大的读者想必已经知道如何运行javac了吧。在运行javac之前,我们只要保证正确地设置CLASSPATH就可以了。下面是一个在Windows平台上运行javac的例子:&nbsp;<BR>%&nbsp;set&nbsp;OPENFUSION_DIR=D:\Apps\OpenFusionJDO&nbsp;<BR>%&nbsp;set&nbsp;<BR>CLASSPATH=%OPENFUSION_DIR%\lib\connector.jar;%OPENFUSION_DIR%\&nbsp;<BR>lib\jndi.jar;%OPENFUSION_DIR%\lib\log4j.jar;%OPENFUSION_DIR%\l&nbsp;<BR>ib\xerces.jar;%OPENFUSION_DIR%\lib\classes12.zip;%OPENFUSION_D&nbsp;<BR>IR%\lib\jdo.jar;%OPENFUSION_DIR%\lib\jta-&nbsp;<BR>spec1_0_1.jar;%OPENFUSION_DIR%\lib\ofjdo.jar;.&nbsp;<BR><BR>%&nbsp;javac&nbsp;?d&nbsp;.&nbsp;Person*.java&nbsp;<BR>第二步:运行JDOEnhancer&nbsp;<BR>JDOEnhancer需要使用在上一步编译中得到的字节码和我们先前建立的JDO描述符文件。下面是OpenFusion&nbsp;JDOEnhancer的完整语法:&nbsp;<BR>java&nbsp;com.prismt.j2ee.jdo.enhancer.JDOEnhancer&nbsp;<BR><BR>命令选项:&nbsp;<BR>-cp&nbsp;开始搜索需要强化的类的基本路径,与CLASSPATH不同,它是编译后的可保持类所在的目录&nbsp;<BR>-oc&nbsp;存储强化后的类的目录&nbsp;<BR>-pd&nbsp;JDO描述符文件&nbsp;<BR><BR>可选项:&nbsp;<BR>-db&nbsp;指定目标数据库&nbsp;[oracle、sybase等]&nbsp;<BR>-od&nbsp;生成SQL脚本的目录&nbsp;<BR><BR>下面是为建立我们的应用程序而运行JDOEnhancer的一个例子:&nbsp;<BR>%&nbsp;java&nbsp;com.prismt.j2ee.jdo.enhancer.JDOEnhancer&nbsp;-oc&nbsp;.&nbsp;-pd&nbsp;<BR>person.jdo&nbsp;-db&nbsp;oracle&nbsp;-od&nbsp;db&nbsp;-cp&nbsp;.&nbsp;<BR>第三步:使用JDOEnhancer的输出建立数据库&nbsp;<BR>,只要使用?db和-od可选项,JDOEnhancer就能够创建建立数据库的数据库脚本。它能够创建许多脚本,但其中有一个的名字叫load_all.sql,打开该文件并将它加载到一个SQL提示符中。(例如sqlplus&nbsp;for&nbsp;Oracle)&nbsp;<BR><BR>CREATE&nbsp;SEQUENCE&nbsp;instid_seq&nbsp;INCREMENT&nbsp;BY&nbsp;1&nbsp;<BR>;&nbsp;<BR><BR>CREATE&nbsp;TABLE&nbsp;JDO_addressbook_Person_SCO&nbsp;<BR>(&nbsp;<BR>inst_id&nbsp;INTEGER&nbsp;NOT&nbsp;NULL,&nbsp;<BR>class&nbsp;INTEGER&nbsp;NOT&nbsp;NULL,&nbsp;<BR>JDO_address&nbsp;VARCHAR2(255),&nbsp;<BR>JDO_email&nbsp;VARCHAR2(255),&nbsp;<BR>JDO_homePhone&nbsp;VARCHAR2(255),&nbsp;<BR>JDO_name&nbsp;VARCHAR2(255),&nbsp;<BR>JDO_ssn&nbsp;VARCHAR2(255),&nbsp;<BR>JDO_workPhone&nbsp;VARCHAR2(255)&nbsp;<BR>)&nbsp;<BR>;&nbsp;<BR>CREATE&nbsp;TABLE&nbsp;JDO_addressbook_Person&nbsp;<BR>(&nbsp;<BR>inst_id&nbsp;INTEGER&nbsp;NOT&nbsp;NULL,&nbsp;<BR>class&nbsp;INTEGER&nbsp;NOT&nbsp;NULL,&nbsp;<BR>JDO_address&nbsp;VARCHAR2(255),&nbsp;<BR>JDO_email&nbsp;VARCHAR2(255),&nbsp;<BR>JDO_homePhone&nbsp;VARCHAR2(255),&nbsp;<BR>JDO_name&nbsp;VARCHAR2(255),&nbsp;<BR>JDO_ssn&nbsp;VARCHAR2(255),&nbsp;<BR>JDO_workPhone&nbsp;VARCHAR2(255)&nbsp;<BR>)&nbsp;<BR>;&nbsp;<BR>CREATE&nbsp;TABLE&nbsp;prismjdoProp&nbsp;<BR>(&nbsp;<BR>name&nbsp;VARCHAR2(255)&nbsp;PRIMARY&nbsp;KEY,&nbsp;<BR>value&nbsp;VARCHAR2(255)&nbsp;<BR>)&nbsp;<BR>;&nbsp;<BR>CREATE&nbsp;TABLE&nbsp;prismjdoExtents&nbsp;<BR>(&nbsp;<BR>class_id&nbsp;NUMBER(38,0)&nbsp;PRIMARY&nbsp;KEY,&nbsp;<BR>class_name&nbsp;VARCHAR2(255)&nbsp;UNIQUE,&nbsp;<BR>app_key&nbsp;VARCHAR2(255)&nbsp;<BR>)&nbsp;<BR>;&nbsp;<BR>ALTER&nbsp;TABLE&nbsp;JDO_addressbook_Person_SCO&nbsp;ADD&nbsp;PRIMARY&nbsp;KEY&nbsp;<BR>(inst_id,&nbsp;class)&nbsp;<BR>;&nbsp;<BR>ALTER&nbsp;TABLE&nbsp;JDO_addressbook_Person&nbsp;ADD&nbsp;PRIMARY&nbsp;KEY&nbsp;(inst_id,&nbsp;<BR>class)&nbsp;<BR>;&nbsp;<BR><BR>INSERT&nbsp;INTO&nbsp;prismjdoExtents&nbsp;VALUES(0,&nbsp;'addressbook.Person',&nbsp;<BR>'com.prismt.j2ee.jdo.spi.DBKey')&nbsp;<BR>;&nbsp;<BR>COMMIT&nbsp;WORK&nbsp;<BR>;&nbsp;<BR><BR>INSERT&nbsp;INTO&nbsp;prismjdoProp&nbsp;VALUES('USE.RDBMS.TRIGGERS',&nbsp;'true')&nbsp;<BR>;&nbsp;<BR>COMMIT&nbsp;WORK&nbsp;<BR>;&nbsp;<BR>第四步:运行应用程序&nbsp;<BR>现在已经建立了数据库,我们就可以运行应用程序了。怎么样,分享一下自己的劳动成果吧!&nbsp;<BR>%&nbsp;java&nbsp;addressbook.PersonPersist&nbsp;<BR>结束语&nbsp;<BR>我们已经讨论了如何使用OpenFusion&nbsp;JDO实现来处理JDO标准。这是一个全新的领域,开发人员可以集中精力处理业务需求和对象,而无需对SQL十分精通。&nbsp;<BR< 
            p>
            <P align=center><B><A 
            href="http://www.javaeasy.com/ArticleShow.asp?ArticleID=326&amp;ArticlePage=1">上一页</A>&nbsp;&nbsp;<A 
            href="http://www.javaeasy.com/ArticleShow.asp?ArticleID=326&amp;ArticlePage=1">[1]</A>&nbsp;<FONT 
            color=red>[2]</FONT>&nbsp;</B></P>
            <P></P></TD>
          <TD width=20>&nbsp;</TD></TR></TBODY></TABLE>
      <TABLE cellSpacing=0 cellPadding=0 width="100%" align=center 
      bgColor=#ffffff border=0>
        <TBODY>
        <TR>
          <TD vAlign=top height=37>
            <DIV align=center></DIV></TD></TR></TBODY></TABLE>
      <TABLE class=border style="WORD-BREAK: break-all" cellSpacing=0 
      cellPadding=0 width="100%" align=center bgColor=#ffffff border=0>
        <TBODY>
        <TR class=tdbg>
          <TD><IMG height=14 src="Java数据对象(JDO)的应用1.files/aer.gif" width=8 
            border=0>上一篇文章:<A 
            title="文章标题:JDO是什么&#13;&#10;作    者:zhangxhsj&#13;&#10;更新时间:2004-4-21 20:09:54&#13;&#10;点击次数:253" 
            href="http://www.javaeasy.com/ArticleShow.asp?ArticleID=229">JDO是什么</A><BR><IMG 
            height=14 src="Java数据对象(JDO)的应用1.files/aer.gif" width=8 
            border=0>下一篇文章:<A 
            title="文章标题:一个纽约女技术员的JDO经验&#13;&#10;作    者:Teresa&nbsp;Lau&#13;&#10;更新时间:2004-5-9 16:56:11&#13;&#10;点击次数:457" 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -