JDO:查詢你的資料 (轉)

gugu99發表於2007-08-16
JDO:查詢你的資料 (轉)[@more@]

JDO學習筆記(一)

 :namespace prefix = o ns = "urn:schemas--com::office" />

查詢你的資料

 

在JDO 中和查詢相關密切的有兩個介面(它們的具體實現由JDO產品來完成):

.jdo.Query

========================

  該介面的例項是由另一個介面PersistenceManager來建立的,在JDO中PersistenceManager是一個比較重要的介面,我們所有的事務處理都是透過該介面來定義的。

  PersistenceManager介面有一組newQuery方法來產生Query的例項:

  public Query newQuery()

  public Query newQuery(java.lang.Class cls)

  public Query newQuery(java.lang.Class cls, java.util.Collection cln)

  public Query newQuery(java.lang.Class cls,

java.util.Collection cln,

java.lang.String filter)

  public Query newQuery(java.lang.Class cls, java.lang.String filter)

  public Query newQuery(Extent cln)

  public Query newQuery(Extent cln, java.lang.String filter)

  public Query newQuery(java.lang. compiled)

  public Query newQuery(java.lang.String language, java.lang.Object query)

 

  有查詢就要有返回結果,Query介面裡一組execute方法來返回查詢的結果:

 

  public Object execute()

public Object execute(java.lang.Object p1)

public Object execute(java.lang.Object p1, java.lang.Object p2)

public Object execute(java.lang.Object p1,

 java.lang.Object p2,

 java.lang.Object p3)

通常我不用上邊的方法,特別是在綜合查詢的時候,我比較喜歡下面兩個方法來返回查詢結果:

public Object excuteWithArray(java.lang.Object[] parameters)

public Object excuteWithMap(java.util.Map parameters)

 

當然如果是非常簡單條件的查詢,上邊四種方法可以搞定就不要用後兩種方法,後兩種方法要自己構造陣列或者集合。

個人認為上述查詢方式跟java.. PreparedStatement差不多都是要為指定的“引數”賦值;如p1,p2,p3,array啦,map啦其中存放的都是前面需要指定的引數的值,跟PreparedStatement它們的順序要和定義引數的順序一樣。

要注意的是

l  Array引數集合中陣列的順序很定義引數的順序要一致。

l  Map引數集合中的key為引數的名稱,value為引數的值

 

 

上邊已經開始提及帶引數的查詢了,是的,Query介面中定義了引入引數的方法:

  public void declareParameters(java.lang.String parameters)

如果事多了引數的情況要用逗號隔開。

 

JDO的查詢方式不光可以引入引數,同時可以引入變數以及其他的類,下面分別是引入變數和引入類的方法,其語法和一般JAVA語法沒什麼差別:

  引入變數,當引入多個變數的時候中間用分號隔開

 

  public void declareVariables(java.lang.String variables)

  例子:public void declareVariables(“Student students;Teacher teacher1”);

 

  引入類,當引入多個類的時候,跟字串的連線方式差不多,不好說明,看例子吧:

public void declareImports(java.lang.String imports)

例子:public void declareImports(“import java.util.Date;”+”import com.yourname.Student”);

 

  既然查詢就要存在查詢條件,Query介面定義了過濾條件的方法:serFilter()

  public void setFilter(java.lang.String filter)

  filter的寫法跟sql中where語句中的條件寫法思想應該一樣的,如查詢條件為:找出學生中姓李的,那麼寫法如下:

  query.setFilter(“name.startsWith(startname)”);

並同時找出性別等於女的,寫法改為:

  query.setFilter(“name.startsWith(startname) && sex==it_sex”);

 

  JDO中關於字串的操作,我怎麼只見startsWith和endsWith啊,這樣的話如何對字串進行更模糊的查詢啊?望指教?

 

  JDO查詢中同樣也提供了排序方法,setOrdering 如下:

  Public void setOrdering(java.lang.String ordering)

  如按照學生的年齡排序:

  query.setOrdering(“age ascending”); 升序

  query.setOrdering(“age descending”);降序

  如果多個排序條件,如按年齡的大小,身高的高低:

  query.setOrdering(“age ascending,”+” stature descending”);

 

java.jdo.Extend

========================

  該介面的例項代表當前中存在的所有的類。它也是由介面PersistenceManager來建立的,如下:

  public Extent getExtent(Class persistenceCapableClass, boolean subclasses)

  引數subclass的真假表示含有第一個引數類的子類:真,表示包括子類;假,不包括子類。

  可能有兩個地方要用到Extend例項

l  得到特定持久類的一個集合。

l  針對資料庫中所有特定持久類進行查詢

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-960834/,如需轉載,請註明出處,否則將追究法律責任。

相關文章