2012-05-04 6 views
0

私はgrailsでクエリを実行しようとしています。フィルタリングするフィールドの1つはmysqlのdatetime型です。私はこれをやってみました:grailsの日付を使用してクエリを行う

def formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") 
def timeNow = formatter.format(new Date()) 
foundUsers = User.executeQuery("from User u where u.username LIKE '%"+params.searchStr+"%' and u.enabled =1 and u.expiration_date>"+timeNow,[max:20]) 

しかし、これは私にエラーが発生しています:予期しないトークン! ドメインUserとデータベースは、古いデータであり、ライブデータを含んでいるため、変更できません。 どうすればいいですか?

答えて

2
  1. は私が予期しないトークンが原因である裏切る '>' u.expiration_date
  2. あなたのコードは、SQLインジェクションのために保存されていません後。
  3. あなたのタラは、このような何か

    DEF foundUsers = User.findByUsernameLikeAndEnabledAndExpiration_date( '%params.searchStrは%'、1、timeNow)

ダイナミックファインダ

についての詳細を読むべきである

  • http://grails.org/doc/latest/guide/GORM.html#querying

  • +0

    また、middlename、lastname、firstnameの類似性をチェックする必要があります。どうすればいいですか?そんなに好きなものをサポートできますか? –

    +0

    はいあなたは、私がこの foundUsers = User.findByUsernameLikeOrFirstnameLikeOrMiddlenameLikeOrLastnameLikeAndEnabledAndExpirationDate( '%params.searchStr%'、 '%のparamsをした User.findByUsernameLikeAndMiddlenameLikeAndLastnameLike( '%1%'、 '%2%'、 '%3%') –

    +0

    を持つことができます。 '%params.searchStr%'、1、新しい日付()) とエラーが発生しました。名前が見つかりません –

    0

    これを試してみてください:

    foundUsers = User.executeQuery("from User u where u.username LIKE ? and u.enabled = 1 and u.expiration_date > ?",['%params.searchStr%', timeNow],[max:20]) 
    
    +0

    は機能しません。同じエラー! –

    関連する問題