0

私はAndroidプロジェクトに取り組んでおり、SQLITEでlikeクエリを実行する必要があります SELECT * FROM table WHERE column LIKE %value%.

以下は、クエリを作成するために使用しているコードです。

myDB = context.openOrCreateDatabase("PasswordManager", Context.MODE_PRIVATE, null);
            String[] columns = new String[]{"*"};
            if (searchType == SearchType.App)
            {
                where = "appName like ?";
            }
            else if (searchType == SearchType.Username)
            {
                where = "username like ?";
            }
            else if (searchType == SearchType.Name)
            {
                where = "company like ?";
            }

            String[] args = {"%" + searchTerm + "%"};
            cursor = myDB.query("password", columns, where, args, null, null, null);

何らかの理由で、パターンを検索しようとしても結果が返されませんが、文字列全体を検索すると何かが見つかります。たとえば、Hello World という値があり、Hello の検索を実行すると、何も返されません。Hello World の検索を実行すると、結果が得られます。

なぜこれがうまくいかないのかわかりません。検索用語の前後に記号を追加したり削除したりしてみまし%たが、違いはありませんでした。

ご協力いただきありがとうございます。

更新 私はdymmehが言ったことを試しましたが、これはうまくいかないようです. 以下は私が試したコードです。

myDB = context.openOrCreateDatabase("PasswordManager", Context.MODE_PRIVATE, null);
            String[] columns = new String[]{"*"};
            if (searchType == SearchType.App)
            {
                where = "appName like %" + searchTerm + "%";
            }
            else if (searchType == SearchType.Username)
            {
                where = "username like %" + searchTerm + "%";
            }
            else if (searchType == SearchType.Name)
            {
                where = "company like %" + searchTerm + "%";
            }

            //String[] args = {"%" + searchTerm + "%"};
            cursor = myDB.query("password", columns, where, null, null, null, null);

上記のコードを使用すると、アプリがクラッシュします。% searchTerm % を一重引用符で囲んでみました。これにより、アプリのクラッシュが停止しますが、正確な文字列を検索すると、次の場合に結果が見つかるという元の問題が発生します。文字列の一部を検索しますが、結果が得られません。

4

2 に答える 2

2

like..を使用する場合は、select 引数を使用しないでください。

代わりに

where = "appName like '%" + searchTerm + "%'";

nullそして、あなたのために渡すだけですargs

于 2012-12-01T23:49:23.090 に答える
0

sqliteについてはよくわかりませんが、プリペアドステートメントを使用している場合は、%をクエリ文字列の一部として解釈していると確信しています。

あなたは次のようなものを試してみたいかもしれません

select * from myTable where myField like concat('%', ?, '%')

しかし、それがうまくいくかどうかはわかりません。

于 2012-12-01T23:50:45.947 に答える