JDO:查詢你的數據

JDO學習筆記(一)

 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

查詢你的數據

 

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

java.jdo.Query

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

      該接口的實例是由另一個接口PersistenceManager來創建的,在JDOPersistenceManager是一個比較重要的接口,我們所有的事務處理都是通過該接口來定義的。

       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.Object 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.sql. 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的寫法跟sqlwhere語句中的條件寫法思想應該一樣的,如查詢條件爲:找出學生中姓李的,那麼寫法如下:

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

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

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

 

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

 

       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         針對數據庫中所有特定持久類進行查詢

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章