📄 java数据对象(jdo)的应用1.htm
字号:
<!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> </TD>
<TD class=class-name width="100%" height=30><A
href="http://www.javaeasy.com/index.asp">首页</A>>><A
href="http://www.javaeasy.com/artclelist.asp">文档中心</A>>> <A
href="http://www.javaeasy.com/artclelist2.asp?BigClassName=数据库">数据库 </A>>> <A
href="http://www.javaeasy.com/artclelist2.asp?BigClassName=数据库&SmallClassName=JDO">JDO </A>>>
</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>作者:刘彦青 出处:不详
</P></TD></TR></TBODY></TABLE>
<P>person = (Person) pm.getObjectById(id.elementAt(i), <BR>false); <BR>System.out.println("Name : " + person.getName()); <BR>System.out.println("Address : " + <BR>person.getAddress()); <BR>System.out.println("SSN : " + person.getSsn()); <BR>System.out.println("Email : " + person.getEmail()); <BR>System.out.println("Home Phone: " + <BR>person.getHomePhone()); <BR>System.out.println("Work Phone: " + <BR>person.getWorkPhone()); <BR>} <BR>pm.close(); <BR>} <BR>第四步:改变其中一个人的名字 <BR>改变存储在数据库中的一个人的信息的代码也十分简单,它与显示数据库中人的信息的代码非常类似。在这里,我们需要创建一个事务(因为要修改其中的记录),使用定义的setName()方法修改一个人的名字,最终提交该事务,保存所作的修改。这种操作与处理临时对象之间真正的差别是,我们考虑是事务。 <BR>public void change() { <BR>Person person; <BR><BR>// 从数据存储库中获取对象 <BR>pm = pmf.getPersistenceManager(); <BR>transaction = pm.currentTransaction(); <BR>// 修改第二个保持记录的DataString字段 <BR>person = (Person) pm.getObjectById(id.elementAt(1), <BR>false); <BR>person.setName("Steve Gerrard"); <BR>// 提交事务并关闭可保持性管理器 <BR>transaction.commit(); <BR>pm.close(); <BR>} <BR>第五步:删除一个人的资料 <BR>你自己能够想象出从数据库中删除第二个人资料的代码吗?因为我们已经了解了所有编写这一代码所需要的知识。仔细地研究一下下面的代码就会发现,我们使用了第二步中的可保持性管理器方法中提到的deletePersistent()方法。 <BR>public void delete() { <BR>// 从数据库中获取对象 <BR>pm = pmf.getPersistenceManager(); <BR>transaction = pm.currentTransaction(); <BR>// 从数据库中删除第二个人的信息,并从ID向量中删除其ID <BR>pm.deletePersistent(pm.getObjectById(id.remove(1), <BR>false)); <BR>// 提交事务并关闭可保持性管理器 <BR>transaction.commit(); <BR>pm.close(); <BR>} <BR>第六步:在main()方法中运行上面的代码 <BR>最后,整个代码需要有一个main()串起来,在数据库中输入人的信息、改变其中一个人的名字,然后删除该人的资料。如果运行这一程序,就会看到程序运行到每一步时的地址簿。 <BR>public static void main(String[] args) { <BR>System.out.println("Create PersonPersist"); <BR>PersonPersist personPersist = new PersonPersist(); <BR><BR>System.out.println("Setup and persist a group of people"); <BR>personPersist.persistPeople(); <BR><BR>System.out.println("Display the persisted people"); <BR>personPersist.display(SIZE); <BR><BR>System.out.println("Change a name "); <BR>personPersist.change(); <BR>personPersist.display(SIZE); <BR><BR>System.out.println("Delete a person "); <BR>personPersist.delete(); <BR>personPersist.display(SIZE - 1); <BR>} <BR>JDOEnhancer:创建JDOEnhancer的JDO描述符 <BR><BR>现在,我们已经编写好了整个应用程序的源代码,下一步需要作的就是创建一个JDOEnhancer将要使用的 <BR>JDO描述符。读者一定会问,JDOEnhancer是什么?JDO架构是基于下面的理念的:一个JDO实现能够获取类的字节码,对它们进行处理,添加一些必要的功能。例如,JDOEnhancer将使类实现PersistanceCapable接口(因此我们不用自己编程实现这一接口),而且能够实现该接口中的一些方法。因此在对代码编译后我们就会发现,我们必须运行JDOEnhancer对字节码进行适当的处理。我们需要创建一个给出我们需要保持的类的信息的描述符文件,这一文件如下所示: <BR><BR><?xml version="1.0" encoding="UTF-8"?> <BR><!DOCTYPE jdo SYSTEM <BR>"file:/D:/Apps/OpenFusionJDO/xml/schema/jdo.dtd"> <BR><jdo> <BR><package name="addressbook"> <BR><class name="Person" identity-type="datastore"> <BR></class> <BR></package> <BR></jdo> <BR>这只是一个最基本的文件,但能够满足我们的要求。当然了,还有许多更复杂的映射。下面是OpenFusion例子中一个稍微复杂一些的映射: <BR><class name="Department" identity-type="datastore"> <BR><field name="name"/> <BR><field name="employees"> <BR><collection element- <BR>type="com.prismt.j2ee.jdo.examples.appKeyDepartment.Employee"> <BR></collection> <BR></field> <BR><field name="manager"/> <BR></class> <BR></package> <BR></jdo> <BR>现在我们已经编写好了代码和JDO描述符文件,我们将对它们进行整合,并讨论如何建立整个系统。要建立整个系统,我们只需要简单的几步工作即可: <BR>1、编译代码。 <BR>2、运行JDOEnhancer。 <BR>3、使用JDOEnhancer的输出建立数据库。 <BR>4、运行应用程序。 <BR>第一步:编译代码 <BR>我想广大的读者想必已经知道如何运行javac了吧。在运行javac之前,我们只要保证正确地设置CLASSPATH就可以了。下面是一个在Windows平台上运行javac的例子: <BR>% set OPENFUSION_DIR=D:\Apps\OpenFusionJDO <BR>% set <BR>CLASSPATH=%OPENFUSION_DIR%\lib\connector.jar;%OPENFUSION_DIR%\ <BR>lib\jndi.jar;%OPENFUSION_DIR%\lib\log4j.jar;%OPENFUSION_DIR%\l <BR>ib\xerces.jar;%OPENFUSION_DIR%\lib\classes12.zip;%OPENFUSION_D <BR>IR%\lib\jdo.jar;%OPENFUSION_DIR%\lib\jta- <BR>spec1_0_1.jar;%OPENFUSION_DIR%\lib\ofjdo.jar;. <BR><BR>% javac ?d . Person*.java <BR>第二步:运行JDOEnhancer <BR>JDOEnhancer需要使用在上一步编译中得到的字节码和我们先前建立的JDO描述符文件。下面是OpenFusion JDOEnhancer的完整语法: <BR>java com.prismt.j2ee.jdo.enhancer.JDOEnhancer <BR><BR>命令选项: <BR>-cp 开始搜索需要强化的类的基本路径,与CLASSPATH不同,它是编译后的可保持类所在的目录 <BR>-oc 存储强化后的类的目录 <BR>-pd JDO描述符文件 <BR><BR>可选项: <BR>-db 指定目标数据库 [oracle、sybase等] <BR>-od 生成SQL脚本的目录 <BR><BR>下面是为建立我们的应用程序而运行JDOEnhancer的一个例子: <BR>% java com.prismt.j2ee.jdo.enhancer.JDOEnhancer -oc . -pd <BR>person.jdo -db oracle -od db -cp . <BR>第三步:使用JDOEnhancer的输出建立数据库 <BR>,只要使用?db和-od可选项,JDOEnhancer就能够创建建立数据库的数据库脚本。它能够创建许多脚本,但其中有一个的名字叫load_all.sql,打开该文件并将它加载到一个SQL提示符中。(例如sqlplus for Oracle) <BR><BR>CREATE SEQUENCE instid_seq INCREMENT BY 1 <BR>; <BR><BR>CREATE TABLE JDO_addressbook_Person_SCO <BR>( <BR>inst_id INTEGER NOT NULL, <BR>class INTEGER NOT NULL, <BR>JDO_address VARCHAR2(255), <BR>JDO_email VARCHAR2(255), <BR>JDO_homePhone VARCHAR2(255), <BR>JDO_name VARCHAR2(255), <BR>JDO_ssn VARCHAR2(255), <BR>JDO_workPhone VARCHAR2(255) <BR>) <BR>; <BR>CREATE TABLE JDO_addressbook_Person <BR>( <BR>inst_id INTEGER NOT NULL, <BR>class INTEGER NOT NULL, <BR>JDO_address VARCHAR2(255), <BR>JDO_email VARCHAR2(255), <BR>JDO_homePhone VARCHAR2(255), <BR>JDO_name VARCHAR2(255), <BR>JDO_ssn VARCHAR2(255), <BR>JDO_workPhone VARCHAR2(255) <BR>) <BR>; <BR>CREATE TABLE prismjdoProp <BR>( <BR>name VARCHAR2(255) PRIMARY KEY, <BR>value VARCHAR2(255) <BR>) <BR>; <BR>CREATE TABLE prismjdoExtents <BR>( <BR>class_id NUMBER(38,0) PRIMARY KEY, <BR>class_name VARCHAR2(255) UNIQUE, <BR>app_key VARCHAR2(255) <BR>) <BR>; <BR>ALTER TABLE JDO_addressbook_Person_SCO ADD PRIMARY KEY <BR>(inst_id, class) <BR>; <BR>ALTER TABLE JDO_addressbook_Person ADD PRIMARY KEY (inst_id, <BR>class) <BR>; <BR><BR>INSERT INTO prismjdoExtents VALUES(0, 'addressbook.Person', <BR>'com.prismt.j2ee.jdo.spi.DBKey') <BR>; <BR>COMMIT WORK <BR>; <BR><BR>INSERT INTO prismjdoProp VALUES('USE.RDBMS.TRIGGERS', 'true') <BR>; <BR>COMMIT WORK <BR>; <BR>第四步:运行应用程序 <BR>现在已经建立了数据库,我们就可以运行应用程序了。怎么样,分享一下自己的劳动成果吧! <BR>% java addressbook.PersonPersist <BR>结束语 <BR>我们已经讨论了如何使用OpenFusion JDO实现来处理JDO标准。这是一个全新的领域,开发人员可以集中精力处理业务需求和对象,而无需对SQL十分精通。 <BR<
p>
<P align=center><B><A
href="http://www.javaeasy.com/ArticleShow.asp?ArticleID=326&ArticlePage=1">上一页</A> <A
href="http://www.javaeasy.com/ArticleShow.asp?ArticleID=326&ArticlePage=1">[1]</A> <FONT
color=red>[2]</FONT> </B></P>
<P></P></TD>
<TD width=20> </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是什么 作 者:zhangxhsj 更新时间:2004-4-21 20:09:54 点击次数: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经验 作 者:Teresa Lau 更新时间:2004-5-9 16:56:11 点击次数:457"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -