?? java數據對象(jdo)的應用.txt
字號:
false);
System.out.println("Name : " + person.getName());
System.out.println("Address : " +
person.getAddress());
System.out.println("SSN : " + person.getSsn());
System.out.println("Email : " + person.getEmail());
System.out.println("Home Phone: " +
person.getHomePhone());
System.out.println("Work Phone: " +
person.getWorkPhone());
}
pm.close();
}
第四步:改變其中一個人的名字
改變存儲在數據庫中的一個人的信息的代碼也十分簡單,它與顯示數據庫中人的信息的代碼非常類似。在這里,我們需要創建一個事務(因為要修改其中的記錄),使用定義的setName()方法修改一個人的名字,最終提交該事務,保存所作的修改。這種操作與處理臨時對象之間真正的差別是,我們考慮是事務。
public void change() {
Person person;
// 從數據存儲庫中獲取對象
pm = pmf.getPersistenceManager();
transaction = pm.currentTransaction();
// 修改第二個保持記錄的DataString字段
person = (Person) pm.getObjectById(id.elementAt(1),
false);
person.setName("Steve Gerrard");
// 提交事務并關閉可保持性管理器
transaction.commit();
pm.close();
}
第五步:刪除一個人的資料
你自己能夠想象出從數據庫中刪除第二個人資料的代碼嗎?因為我們已經了解了所有編寫這一代碼所需要的知識。仔細地研究一下下面的代碼就會發現,我們使用了第二步中的可保持性管理器方法中提到的deletePersistent()方法。
public void delete() {
// 從數據庫中獲取對象
pm = pmf.getPersistenceManager();
transaction = pm.currentTransaction();
// 從數據庫中刪除第二個人的信息,并從ID向量中刪除其ID
pm.deletePersistent(pm.getObjectById(id.remove(1),
false));
// 提交事務并關閉可保持性管理器
transaction.commit();
pm.close();
}
第六步:在main()方法中運行上面的代碼
最后,整個代碼需要有一個main()串起來,在數據庫中輸入人的信息、改變其中一個人的名字,然后刪除該人的資料。如果運行這一程序,就會看到程序運行到每一步時的地址簿。
public static void main(String[] args) {
System.out.println("Create PersonPersist");
PersonPersist personPersist = new PersonPersist();
System.out.println("Setup and persist a group of people");
personPersist.persistPeople();
System.out.println("Display the persisted people");
personPersist.display(SIZE);
System.out.println("Change a name ");
personPersist.change();
personPersist.display(SIZE);
System.out.println("Delete a person ");
personPersist.delete();
personPersist.display(SIZE - 1);
}
JDOEnhancer:創建JDOEnhancer的JDO描述符
現在,我們已經編寫好了整個應用程序的源代碼,下一步需要作的就是創建一個JDOEnhancer將要使用的
JDO描述符。讀者一定會問,JDOEnhancer是什么?JDO架構是基于下面的理念的:一個JDO實現能夠獲取類的字節碼,對它們進行處理,添加一些必要的功能。例如,JDOEnhancer將使類實現PersistanceCapable接口(因此我們不用自己編程實現這一接口),而且能夠實現該接口中的一些方法。因此在對代碼編譯后我們就會發現,我們必須運行JDOEnhancer對字節碼進行適當的處理。我們需要創建一個給出我們需要保持的類的信息的描述符文件,這一文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jdo SYSTEM
"file:/D:/Apps/OpenFusionJDO/xml/schema/jdo.dtd">
<jdo>
<package name="addressbook">
<class name="Person" identity-type="datastore">
</class>
</package>
</jdo>
這只是一個最基本的文件,但能夠滿足我們的要求。當然了,還有許多更復雜的映射。下面是OpenFusion例子中一個稍微復雜一些的映射:
<class name="Department" identity-type="datastore">
<field name="name"/>
<field name="employees">
<collection element-
type="com.prismt.j2ee.jdo.examples.appKeyDepartment.Employee">
</collection>
</field>
<field name="manager"/>
</class>
</package>
</jdo>
現在我們已經編寫好了代碼和JDO描述符文件,我們將對它們進行整合,并討論如何建立整個系統。要建立整個系統,我們只需要簡單的幾步工作即可:
1、編譯代碼。
2、運行JDOEnhancer。
3、使用JDOEnhancer的輸出建立數據庫。
4、運行應用程序。
第一步:編譯代碼
我想廣大的讀者想必已經知道如何運行javac了吧。在運行javac之前,我們只要保證正確地設置CLASSPATH就可以了。下面是一個在Windows平臺上運行javac的例子:
% set OPENFUSION_DIR=D:\Apps\OpenFusionJDO
% set
CLASSPATH=%OPENFUSION_DIR%\lib\connector.jar;%OPENFUSION_DIR%\
lib\jndi.jar;%OPENFUSION_DIR%\lib\log4j.jar;%OPENFUSION_DIR%\l
ib\xerces.jar;%OPENFUSION_DIR%\lib\classes12.zip;%OPENFUSION_D
IR%\lib\jdo.jar;%OPENFUSION_DIR%\lib\jta-
spec1_0_1.jar;%OPENFUSION_DIR%\lib\ofjdo.jar;.
% javac –d . Person*.java
第二步:運行JDOEnhancer
JDOEnhancer需要使用在上一步編譯中得到的字節碼和我們先前建立的JDO描述符文件。下面是OpenFusion JDOEnhancer的完整語法:
java com.prismt.j2ee.jdo.enhancer.JDOEnhancer
命令選項:
-cp 開始搜索需要強化的類的基本路徑,與CLASSPATH不同,它是編譯后的可保持類所在的目錄
-oc 存儲強化后的類的目錄
-pd JDO描述符文件
可選項:
-db 指定目標數據庫 [oracle、sybase等]
-od 生成SQL腳本的目錄
下面是為建立我們的應用程序而運行JDOEnhancer的一個例子:
% java com.prismt.j2ee.jdo.enhancer.JDOEnhancer -oc . -pd
person.jdo -db oracle -od db -cp .
第三步:使用JDOEnhancer的輸出建立數據庫
,只要使用–db和-od可選項,JDOEnhancer就能夠創建建立數據庫的數據庫腳本。它能夠創建許多腳本,但其中有一個的名字叫load_all.sql,打開該文件并將它加載到一個SQL提示符中。(例如sqlplus for Oracle)
CREATE SEQUENCE instid_seq INCREMENT BY 1
;
CREATE TABLE JDO_addressbook_Person_SCO
(
inst_id INTEGER NOT NULL,
class INTEGER NOT NULL,
JDO_address VARCHAR2(255),
JDO_email VARCHAR2(255),
JDO_homePhone VARCHAR2(255),
JDO_name VARCHAR2(255),
JDO_ssn VARCHAR2(255),
JDO_workPhone VARCHAR2(255)
)
;
CREATE TABLE JDO_addressbook_Person
(
inst_id INTEGER NOT NULL,
class INTEGER NOT NULL,
JDO_address VARCHAR2(255),
JDO_email VARCHAR2(255),
JDO_homePhone VARCHAR2(255),
JDO_name VARCHAR2(255),
JDO_ssn VARCHAR2(255),
JDO_workPhone VARCHAR2(255)
)
;
CREATE TABLE prismjdoProp
(
name VARCHAR2(255) PRIMARY KEY,
value VARCHAR2(255)
)
;
CREATE TABLE prismjdoExtents
(
class_id NUMBER(38,0) PRIMARY KEY,
class_name VARCHAR2(255) UNIQUE,
app_key VARCHAR2(255)
)
;
ALTER TABLE JDO_addressbook_Person_SCO ADD PRIMARY KEY (inst_id, class)
;
ALTER TABLE JDO_addressbook_Person ADD PRIMARY KEY (inst_id,class)
;
INSERT INTO prismjdoExtents VALUES(0, 'addressbook.Person','com.prismt.j2ee.jdo.spi.DBKey')
;
COMMIT WORK
;
INSERT INTO prismjdoProp VALUES('USE.RDBMS.TRIGGERS', 'true')
;
COMMIT WORK
;
第四步:運行應用程序
現在已經建立了數據庫,我們就可以運行應用程序了。怎么樣,分享一下自己的勞動成果吧!
% java addressbook.PersonPersist
結束語
我們已經討論了如何使用OpenFusion JDO實現來處理JDO標準。這是一個全新的領域,開發人員可以集中精力處理業務需求和對象,而無需對SQL十分精通。
本欄文章均來自于互聯網,版權歸原作者和各發布網站所有,本站收集這些文章僅供學習參考之用。任何人都不能將這些文章用于商業或者其他目的。( ProgramFan.Com )
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -