0

私は以前にこのステートメントを試しました:

public Cursor searchForSchools(String[] args) throws SQLException {
    String myQuery = "SELECT skola._id, skola.naziv, skola.privatna, skola.adresa, opstina.naziv, skola.broj_ucenika, skola.telefon, skola.web, oblast.naziv " +
                    "FROM skola JOIN opstina ON skola.id_opstina = opstina._id " +
                    "JOIN profil ON skola.id_tip = profil._id " +
                    "JOIN oblast_m ON profil._id = oblast_m.id_profil " +
                    "JOIN oblast ON oblast_m.id_oblast = oblast._id ";
    return database.rawQuery(myQuery + "WHERE skola.naziv LIKE \"%?%\" AND opstina.naziv = ? AND skola.broj_ucenika ? AND skola.oblasti LIKE \"%?%\" AND skola.privatna ?", args);

しかし、SQL 構文エラーのため、うまくいきませんでした。

そこで、次の方法で句の 2 番目の部分を作成しようとしています。

public Cursor searchForSchools(String[] args) throws SQLException {
    String myQuery = "SELECT skola._id, skola.naziv, skola.privatna, skola.adresa, opstina.naziv, skola.broj_ucenika, skola.telefon, skola.web, oblast.naziv " +
                    "FROM skola JOIN opstina ON skola.id_opstina = opstina._id " +
                    "JOIN profil ON skola.id_tip = profil._id " +
                    "JOIN oblast_m ON profil._id = oblast_m.id_profil " +
                    "JOIN oblast ON oblast_m.id_oblast = oblast._id ";
    return database.rawQuery(myQuery + buildQueryString(args), null);
}

private String buildQueryString(String[] args) {
    String buildString="WHERE";
    if(args[0]!="*")
        buildString += " skola.naziv LIKE %\"" + args[0] + "\" AND";
    if(args[1]!="*")
        buildString += " opstina.naziv = \"" + args[1] + "\" AND";
    if(args[2]!="*")
        buildString += " skola.broj_ucenika " + args[2] + "\" AND";
    if(args[3]!="*")
        buildString += " oblast.naziv LIKE %\"" + args[3] + "\" AND";
    buildString += " skola.privatna " + args[4];
    return buildString;
}

問題は、args 配列に ' ' (アスタリスク記号) が含まれている場合があり、これは、クエリがその列に関連していない (つまり、任意の値が受け入れられる) ことを示しますが、それを呼び出す最初のメソッドでは、" WHERE opstina のような句になります。エラーを返す.naziv = ' ' "...

それでは、私の目標を説明しましょう - すべてのデータを返すことからすべてのケースを処理できる動的 SQL ステートメントを作成したいと思います (args[]={' ',' ',' ',' ',' '} の場合)各 args 文字列が " " とは異なる値を持つ最も複雑なケースに対応します。前もって感謝します...

4

0 に答える 0