0

プリコンパイルされたデータベースがあり、渡されたパラメータに従ってデータを取得したい

しかし、奇妙な理由で、カーソルの結果は常に空になります

アダプターのgetDataメソッドは

    public Cursor getData(String uso, String eta, String category,
            String class) {
        try {
            Cursor c;
            if (class.equals(null) && category.equals(null)) {
                c = mDb.rawQuery("SELECT * FROM dbtable WHERE Uso LIKE \""
                        + uso + "\" AND Eta LIKE \"" + eta
                        + "\" AND Language LIKE \"" + language
                        + "\" order by Name asc", null);
            } else if (class.equals(null)) {
                c = mDb.rawQuery("SELECT * FROM dbtable WHERE Uso LIKE \""
                        + uso + "\" AND Eta LIKE \"" + eta
                        + "\" AND Tipo LIKE \"" + category
                        + "\" AND Language LIKE \"" + language
                        + "\" order by Name asc", null);
            } else if (category.equals(null)) {
                c = mDb.rawQuery("SELECT * FROM dbtable WHERE Uso LIKE \""
                        + uso + "\" AND Eta LIKE \"" + eta
                        + "\" AND Certification LIKE \"" + class
                        + "\" AND Language LIKE \"" + language
                        + "\" order by Name asc", null);
            } else {
                c = mDb.rawQuery("SELECT * FROM dbtable WHERE Uso LIKE \""
                        + uso + "\" AND Eta LIKE \"" + eta
                        + "\" AND Tipo LIKE \"" + category
                        + "\" AND Certification LIKE \"" + class
                        + "\" AND Language LIKE \"" + language
                        + "\" order by Name asc", null);
            }
            if (c != null) {
                c.moveToNext();
            }
            return c;
        } catch (SQLException mSQLException) {
            Log.e(TAG, "getDataCar >>" + mSQLException.toString());
            throw mSQLException;
        }

    } 
...

このカーソルは、Carオブジェクトの配列にすべてのエントリを配置するメソッドで使用されます

public Car[] getDataDBCarsArray(String uso, String eta,
            String category, String class) {
        ArrayList<Car> list = new ArrayList<Car>();
        Cursor c = getData(uso, eta, category, class);
        try {
.....

上記のgetData(....)の代わりに使用しようとするとすべて正常に動作します

public Cursor getAllData(){
    try {
        Cursor c = mDb.rawQuery("SELECT * FROM dbtable order by Name asc", null);
        if (c != null) {
            c.moveToNext();
        }
        return c;
    }catch (SQLException mSQLException) {
        throw mSQLException;
    }

}

したがって、getData(...)のクエリに問題があるようです。

しかし、どこにエラーがあるのか​​わかりません。

データベースを開こうとすると、渡されたパラメーターの要素はたくさんありますが、奇妙なことに何も見つかりません。

NB

言語は、デバイスの言語に依存する静的な値です

4

1 に答える 1

2

SQLワイルドカードを忘れてしまいました...

これ:

WHERE column = "John"

と同じです:

WHERE column LIKE "John"

ワイルドカードを組み込ん%で、_次のような句を作成します。

WHERE column LIKE "%John%"

また、SQLiteのパラメーター化を利用して、 SQLインジェクション攻撃から身を守る必要があります。

c = mDb.rawQuery("SELECT * FROM dbtable " + 
        "WHERE Uso LIKE ? AND Eta LIKE ? AND Language LIKE ? ORDER BY Name",
        new String[] { "%" + uso + "%", 
                       "%" + eta + "%", 
                       "%" + language + "%" });
于 2012-12-10T20:09:44.747 に答える