2011-09-21 11 views
0

私はいくつかのアドバイスが必要ですどのようにデータベース内の検索を実行することができます。たとえば、私はデータベースにテーブルを持っています:Student列は:NAME, SURNAME, UNIVERSITY, AGE, COURSEです。データベースで検索する

私は検索フォームに記入するとき、私はSURNAMEとUNIVERSITYを指定せず、検索結果をNAME =私の指定した名前、AGE - 私の指定した年齢とCOURSE - 私の指定したコースとSURNAME、大学は任意である可能性があります。

誰かからアドバイスをいただけますか?クイックリプレイのための

EDIT

感謝。しかし、私は何かを理解していないか、動作していないようです。実際のクエリは次のとおりです。

SELECT UNIVERSITY, INFORMANT_NAME, AGE 
FROM informant 
WHERE UNIVERSITY='%VDU%' 
    AND INFORMANT_NAME='%Mindaugas Jonaitis%' 
    AND AGE='%21%'; 

私は結果を返しません。

SELECT UNIVERSITY, INFORMANT_NAME, AGE 
FROM informant 
WHERE UNIVERSITY='VDU' 
    AND INFORMANT_NAME='Mindaugas Jonaitis' 
    AND AGE='21'; 

このクエリは指定された値に対してのみ行います。返された結果は、UNIVERSITY = 'VDU'または他の値が提供されていないか、またはスキップされるnullまたは何かを提供したテーブルのすべてのデータになります。

SELECT UNIVERSITY, INFORMANT_NAME, AGE 
FROM informant 
WHERE UNIVERSITY='VDU' 
    AND INFORMANT_NAME='????' 
    AND AGE='????'; 

答えて

0

これには多くの方法があります。しかしそれらすべてのためにSessionHibernateからつかむ必要があります。もしその時点から次のことができます。

  • だけで、その後、Criteriaオブジェクト

それらのすべてを作成しsql string

  • からQueryオブジェクトを作成しますnamed query
  • からqueryオブジェクトを作成します。 query.list()またはcriteria.list()のいずれかです。詳細情報については

  • 1

    あなたはLIKE、ない=を使用する必要がワイルドカードを使用したい場合。

    ​​

    しかし有力ワイルドカードでlikeを使用すると、そのフィールドにインデックスを使用して、任意のチャンスを無効にします。あなたはMyISAMテーブルとMySQLを使用している場合は
    、あなたはワイルドカードと使用して検索したいフィールド上に置くフルテキストインデックス:

    SELECT UNIVERSITY, INFORMANT_NAME, AGE 
    FROM informant 
    WHERE UNIVERSITY LIKE '%VDU%' 
        AND MATCH(INFORMANT_NAME) AGAINST('Mindaugas Jonaitis') 
        AND AGE LIKE '21%'; 
    

    Match .. againstはわずか4文字より長い検索フレーズのために動作します。また、時代に先駆けてワイルドカードを使って検索することは本当に意味がありません。私は通常21,31,41であるすべての人を取得したくない、私はしばしばすべての20のsomethingsを取得したい。

    0

    findByExample DAOメソッドは、ここでは常に有効です。