1

次のコードがコマンド「execute」の最後の行でエラーメッセージを表示してエラーを引き起こしている理由を誰か教えてください:

タイプ Query のメソッド execute(Object, Object, Object) は、引数 (Long、Long、Date、Date) には適用されません。

Query q = pm.newQuery(Appointment.class,"AdminID == AID"+
  " && EmployeeID == CEID"+
  " && Time > STime"+
  " && Time < ETime");
q.declareImports("import java.util.Date");
q.declareParameters("Long AID, Long CEID, Date STime, Date ETime");
q.setOrdering("Time");
Appointments = (List<Appointment>) q.execute(AdminID, CurrentEmployeeID, Time1, Time2);

私が知る限り(エラーメッセージで暗示されているように、実行関数は最大3つの引数しか取ることができません。この場合、私がやりたいことを達成する方法について誰かアドバイスできますか?私は次のコードを試しました、しかし、実行するたびに解析エラーが発生します!

Query q = pm.newQuery(Appointment.class,"AdminID == "+AdminID+
  " && EmployeeID == "+CurrentEmployeeID+
  " && Time > "+Time1+
  " && Time < "+Time2);
q.declareImports("import java.util.Date");
q.setOrdering("Time");
Appointments = (List<Appointment>) q.execute();

私が得る解析エラーは次のとおりです。

org.datanucleus.store.query.QueryCompilerSyntaxException: 式の一部を解析できませんでした: Aug 13 11:44:55 BST 2012 && Time < Mon Aug 13 11:45:05 BST 2012

4

1 に答える 1

3

executeWithArrayまたはexecuteWithMapを試してください。

HashMap<String, Object> params = new HashMap<String, Object>();
params.put( "AID", adminId );
params.put( "CEID", currentEmployeeId );
params.put( "STime", startTime );
params.put( "ETime", endTime );

query.executeWithMap( params );

ノート:

  1. 変数はより低いCamelCaseであるべきです
  2. startTimeよりendTimeも説明的でありTime1Time2
  3. 一般に「ID」よりも「ID」が好まれます - IDの正しい Java 命名規則は何ですか?
  4. 暗黙的に呼び出しているため、2回目の試行は機能しません..." && Time > " + Time1.toString() + ...
于 2012-08-12T00:41:54.573 に答える