📄 java数据对象(jdo)的应用.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0053)http://www.javaeasy.com/ArticleShow.asp?ArticleID=326 -->
<HTML><HEAD><TITLE>Java数据对象(JDO)的应用</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312"><LINK
href="Java数据对象(JDO)的应用.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)的应用.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)的应用.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)的应用.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>阅读次数1454</FONT> </P>
<P
align=right>作者:刘彦青 出处:不详
</P></TD></TR></TBODY></TABLE>
<P>在本篇文章中,我们将详细地讨论Sun公司的Java数据对象(JDO)标准。JDO允许我们使用Java对象,支持事务和多用户。与ODBC不同的是,它使我们无需考虑SQL和与数据库有关的其他东西。它与串行化也有所区别,因为它支持多个用户和事务。JDO允许Java开发人员将他们的数据模型用作数据模型,无需在“数据端”、“对象端”之间的转移方面花费大量的时间。 <BR>包括CocoBase、WebGain TOPLink和Castor JDO在内的多种产品都可以实现了JDO标准。既然有一种标准的方法,我们就可以只学习其中的一种,就象有了ODBC,我们就可以使用任何提供了驱动程序的数据库那样。 <BR>在本篇文章中,我们将使用Prism技术公司的OpenFusion JDO。读者在后面会发现,只有很小一部分代码使用了PrismTech API,其他部分都使用了标准的JDO标准。 <BR>创建Person对象 <BR>我们将首先创建一个Person对象,该对象遵循了JavaBean的惯例,可以对其属性执行get和set操作。需要注意的是,尽管我们是在创建这个类,但它并没有什么特别的,它没有继承或实现任何基本类。对一个可保持类的要求是: <BR>1、所有域必须能够被JDO类访问(public或set*方法) <BR>2、域的数据类型必须符合JDO规格。 <BR>3、不能支持一些类型的字段(例如Thread、File、Socket等不能串行化的字段)。 <BR>下面是符合上述要求的Person.java: <BR><BR>public class Person { <BR>private String name; <BR>private String address; <BR>private String ssn; <BR>private String email; <BR>private String homePhone; <BR>private String workPhone; <BR><BR>// 允许我们使用构造器创建Person对象 <BR>public Person(String name, String address, String ssn, <BR>String email, String homePhone, String workPhone) { <BR>this.name = name; <BR>this.address = address; <BR>this.ssn = ssn; <BR>this.email = email; <BR>this.homePhone = homePhone; <BR>this.workPhone = workPhone; <BR>} <BR><BR><BR>// 方法 <BR>public String getName() { return name; } <BR><BR>public String getAddress() { return address; } <BR><BR>public String getSsn() { return ssn; } <BR><BR>public String getEmail() { return email; } <BR><BR>public String getHomePhone() { return homePhone; } <BR><BR>public String getWorkPhone() { return workPhone; } <BR><BR>public void setName(String name) { this.name = name; } <BR><BR>public void setAddress(String address) { <BR>this.address = address; <BR>} <BR><BR>public void setSsn(String ssn) { this.ssn = ssn; } <BR><BR>public void setEmail(String email) { this.email = email; } <BR><BR>public void setHomePhone(String homePhone) { <BR>this.homePhone = homePhone; <BR>} <BR>public void setWorkPhone(String workPhone) { <BR>this.workPhone = workPhone; <BR>} <BR>} <BR>创建PersonPersist对象管理可保持性 <BR>现在已经有了Person对象,我们需要创建一些代码来管理这种可保持性。下面我们将详细讨论这些代码,并学习如何: <BR>1、初始化JDO可保持性管理器。 <BR>2、向数据库中输入三个人的资料。 <BR>3、从数据库中显示人的资料。 <BR>4、修改其中一个人的名字。 <BR>5、从数据库中删除一个人的资料。 <BR>6、在main()方法中进行相关的处理。 <BR>第一步:初始化JDO可保持性管理器 <BR>我们从OpenFusion实现中导入了标准的JDO类和ManagedConnectionFactory,当然了我们也可以将它们抽象成一个独立的类。构造器使用javax.jdo.PersistenceManagerFactoryClass属性设置连接代理,这一点与在JDBC中设置数据库驱动程序的属性很相似。 <BR>package addressbook; <BR><BR>import java.util.*; <BR>import javax.jdo.*; <BR><BR>import <BR>com.prismt.j2ee.connector.jdbc.ManagedConnectionFactoryImpl; <BR><BR>public class PersonPersist <BR>{ <BR>private final static int SIZE = 3; <BR>private PersistenceManagerFactory pmf = null; <BR>private PersistenceManager pm = null; <BR>private Transaction transaction = null; <BR><BR>// 需要保持的人的数组 <BR>private Person[] people; <BR>// 现有对象标识符的向量 <BR>private Vector id = new Vector(SIZE); <BR><BR>public PersonPersist() { <BR>try { <BR>Properties props = new Properties(); <BR><BR>props.setProperty("javax.jdo.PersistenceManagerFactoryClass", <BR>"com.prismt.j2ee.jdo.PersistenceManagerFactoryImpl"); <BR>pmf = JDOHelper.getPersistenceManagerFactory(props); <BR>pmf.setConnectionFactory( createConnectionFactory() ); <BR>} catch(Exception ex) { <BR>ex.printStackTrace(); <BR>System.exit(1); <BR>} <BR>} <BR>连接代理是在名字为createConnectionFactory()的静态方法中创建的,该代理需要JDBC URL、JDBC驱动程序、用户名和口令。 <BR>public static Object createConnectionFactory() { <BR>ManagedConnectionFactoryImpl mcfi = new <BR>ManagedConnectionFactoryImpl(); <BR>Object connectionFactory = null; <BR><BR>try { <BR>mcfi.setUserName("scott"); <BR>mcfi.setPassword("tiger"); <BR>mcfi.setConnectionURL( <BR>"jdbc:oracle:thin:@localhost:1521:thedb"); <BR><BR>mcfi.setDBDriver("oracle.jdbc.driver.OracleDriver"); <BR><BR>connectionFactory = mcfi.createConnectionFactory(); <BR>} catch(Exception e) { <BR>e.printStackTrace(); <BR>System.exit(1); <BR>} <BR>return connectionFactory; <BR>} <BR><BR><BR>第二步:在数据库中输入三个人的资料 <BR><BR>PersistPeople()使用Person.java文件中的构造器创建了3个人的资料。。我们要作的第一件事是通过 <BR>getPersistenceManager()获得一个可保持性管理器,然后创建一个执行我们的任务的事务。为了保持这一对象结构图,我们简单地调用makePersistentAll( Object[] )方法即可。代码底部的for()循环获得每个保持对象的唯一的ID,并保存起来供以后使用。 <BR>public void persistPeople() { <BR>// 创建人的资料的数组 <BR>people = new Person[SIZE]; <BR><BR>// 创建3个人的资料 <BR>people[0] = new Person("Gary Segal", "123 Foobar Lane", <BR>"123-123-1234", "gary@segal.com", <BR>"(608) 294-0192", "(608) 029-4059"); <BR>people[1] = new Person("Michael Owen", <BR>"222 Bazza Lane, Liverpool, MN", <BR>"111-222-3333", "michael@owen.com", <BR>"(720) 111-2222", "(303) 222-3333"); <BR>people[2] = new Person("Roy Keane", <BR>"222 Trafford Ave, Manchester, MN", <BR>"234-235-3830", "roy@keane.com", <BR>"(720) 940-9049", "(303) 309-7599)"); <BR><BR>// 保持这3个人的资料 <BR>pm = pmf.getPersistenceManager(); <BR>transaction = pm.currentTransaction(); <BR>pm.makePersistentAll(people); <BR>transaction.commit(); <BR><BR>// 获取被保持对象的对象ID <BR>for(int i = 0; i < people.length; i++) { <BR>id.add(pm.getObjectId(people[i])); <BR>} <BR><BR>// 关闭现有的保持性管理器,保证对象是从数据库而不是从保持性管理器的缓存中读取的 <BR>pm.close(); <BR>} <BR>下面是一些可以针对保持性管理器的其他方法: <BR>使实例成为可保持的:获得一个临时对象,并保持它。 <BR>删除可保持实例:从数据存储库中删除信息。 <BR>使实例临时化:使实例与可保持性管理器分离,而不删除在数据存储库中的信息。 <BR>使实例处于保持状态 删除保持的实例 使实例处于临时状态 <BR>makePersistent(Object o) deletePersistent(Object o) makeTransient(Object o) <BR>makePersistentAll(Object[] os) deletePersistentAll(Object[] os) makeTransientAll(Object[] os) <BR>makePersistentAll(Collection os) deletePersistentAll(Collection os) makeTransientAll(Collection os) <BR>(这里是一个4X3的表格,可以参阅原稿中的英文表格) <BR><BR>第三步:显示数据库中人的信息 <BR>显示信息代码以获得可保持性管理器开始。我们使用上面代码中用persistPeople()方法保存的对象ID获得对象,调用对象的方法━━在本例中是gets,来得到我们输入的信息。我们可以发现,要保持我们的对象,并不需要编写大量的代码。 <BR>public void display(int end) { <BR>Person person; <BR>int max = end <= SIZE ? end : SIZE; <BR><BR>// 获得一个新的可保持性管理器 <BR>pm = pmf.getPersistenceManager(); <BR>// 从数据库中获取对象并进行显示 <BR>for(int i = 0; i < max; i++) { <BR<
p>
<P align=center><B><FONT color=red>[1]</FONT> <A
href="http://www.javaeasy.com/ArticleShow.asp?ArticleID=326&ArticlePage=2">[2]</A> <A
href="http://www.javaeasy.com/ArticleShow.asp?ArticleID=326&ArticlePage=2">下一页</A></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)的应用.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)的应用.files/aer.gif" width=8
border=0>下一篇文章:<A
title="文章标题:一个纽约女技术员的JDO经验 作 者:Teresa Lau 更新时间:2004-5-9 16:56:11 点击次数:457"
href="http://www.javaeasy.com/ArticleShow.asp?ArticleID=343">一个纽约女技术员的JDO经验</A>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -