?? 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 + -