2016-08-11 7 views
1

私はリストビュー内にドキュメントのデータを取り込むことでデータが取り込まれるユーザーリストを持っています。私はこれ以上の任意の行をクリックすると、私がダウンして記載されている自分の情報のすべてを見ることができるはずです(各行が1人のユーザーを表す)。(これは私の問題である)私は、行をクリックした場合DQLを介してドキュメントから1行のデータを取得

public void selectedItemFromListView(){ 
    selected = lwAllUserGrp.getSelectionModel().getSelectedItem(); 
    System.out.println(selected); 
    String query =" select * from dm_user where user_name = '@aclName'" ; 
    String test = query.replace("@aclname", selected); 

    GetDataWithDqlProfile(_session , query , "user_login_name" , "user_address" , "user_state"); 
    System.out.println(user.getAddress()); 
    System.out.println(user.getState()); 
    System.out.println(user.getUsername()); 

} 

私は正常に誰が選択されているかを見ることができ、DQLを介してドキュメント名からそのユーザ名(同じ人物)の他のすべての属性を検索する必要があります。

private void GetDataWithDqlProfile(IDfSession session, String Query, String username , String address , String state) { 

    try { 
     IDfQuery UpdateQuery = new DfQuery(); 
     UpdateQuery.setDQL(Query); 
     IDfCollection col = UpdateQuery.execute(_session, IDfQuery.DF_QUERY); 


      user.setAddress(col.getString(username)); 
      user.setUsername(col.getString(address)); 
      user.setState(col.getString(state)); 

     col.close(); 
    } catch (Exception e) { 
     Alert alert = new Alert(Alert.AlertType.ERROR, e.getMessage()); 
     alert.showAndWait(); 
     Logs.WriteLog(LoginController.Repository + ",User:" + LoginController.Username, "DQL Query", e.toString()); 
     e.getStackTrace(); 
    } 

と私の出力は次のとおりです。

User's name 
null 
null 
null 

私はDQLテスターでDQLクエリを試みたし、それはあなたが呼び出す必要がありIDfCollectionから行をフェッチするためにも

答えて

0

は、私は、問題解決方法です:

public ArrayList<User> GetDataWithDqlpro(IDfSession session, String Query, String username , String state , String address) { 

    try { 
     IDfQuery UpdateQuery = new DfQuery(); 
     UpdateQuery.setDQL(Query); 
     IDfCollection col = UpdateQuery.execute(_session, IDfQuery.DF_QUERY); 

     while (col.next()) { 
      list.add(new User(col.getString(username),col.getString(address) , col.getString(state))); 

     } 
     col.close(); 

    }catch (Exception e) { 
      Alert alert = new Alert(Alert.AlertType.ERROR, e.getMessage()); 
      alert.showAndWait(); 
      Logs.WriteLog(LoginController.Repository + ",User:" + LoginController.Username, "DQL Query", e.toString()); 
      e.getStackTrace(); 
} 
     return (ArrayList<User>) list; 

} 



public void selectedItemFromListView(){ 
    selected = lwAllUserGrp.getSelectionModel().getSelectedItem(); 
    System.out.println(selected); 
    String Query = "select user_login_name , user_state , user_address from dm_user where user_login_name ='@aclname'"; 
    Query = Query.replace("@aclname",selected); 
    ArrayList<User> allUserNames = GetDataWithDqlpro(_session, Query, "user_login_name","user_address","user_state"); 
    for (int i = 0 ; i <= allUserNames.size()-1 ; i++){ 
     if (selected.compareToIgnoreCase(allUserNames.get(i).getUsername()) == 0){ 
       System.out.println(allUserNames.get(i).getState()); 
       System.out.println(allUserNames.get(i).getAddress()); 
       System.out.println(allUserNames.get(i).getUsername()); 

     } 

    } 

}

私はコンストラクタでユーザーというクラスを持っているし、取得した方法を設定することを言及する価値が

私は@eiviamuすでにmentiとして)それはいくつかのいずれか:)

2

の作品コレクションオブジェクトのnext()。このメソッドは、次の行に進み、成功した場合はブール値を返します。

IDfCollection col = UpdateQuery.execute(_session, IDfQuery.DF_QUERY); 

if (col.next()) { 
    user.setAddress(col.getString(username)); 
    user.setUsername(col.getString(address)); 
    user.setState(col.getString(state)); 
} 

col.close(); 

反復コレクションは1行しか含まれている場合でも必要である。このように、反復するブーリアンテスト(例えば、while又はif)を使用します。つまり、手動で最初の行に進む必要があります。後でここにこの質問を参照の人のために

+0

エラーはなくなりましたが、私はまだ3つすべてnullです;)@eivamu –

+1

デバッグ出力を 'if(){}'ブロック内に追加して 'next()'が返るかどうかを調べてみましょう「真」。そうでない場合、あなたのDQLは間違っているか、単に空のコレクション(行がない)を返します。 – eivamu

2

1を助けることを願っています次の行を取得するには、IDfCollection.next()を呼び出す必要があります。
2)あなたのコードには、他の問題の中でも1つのドキュメント関連があります。回収の終了は、常にfinallyブロックで行わなければなりません。
そうでないと、メモリリークや奇妙なアプリケーションの動作につながる可能性があります(たとえば、私が間違っていないと、デフォルトで1つのDCTMセッションに対して同時に開いているコレクションが9つあります。

関連する問題