QA@IT
«回答へ戻る

5599
 
 > 「行検索が無効」というエラーが出てしまいます。
 
-このエラーはエラーの情報たりないので原因はわからないですが、%を含む文字を検索できないわけないので、%を含んでいてもバインドはできるし検索はできるはずです。
-単に 0件だとエラーが出たりしませんか?
+このエラーはエラーの情報たりないので原因はわからないですが、%を含む文字を検索できないわけないので、%を含んでいてもバインドはできるし検索はできるはずだと思います。
+なので 単に検索結果が 0件だと同じエラーが出たりしませんか?(検索そのものではなくて結果 0件の時のその後の処理で落ちている。 rs が 結果 0件時は無効になるなど。0件かどうかチェックするメソッドがありそうな気がします。)

前回の質問でも書きましたが質問にコード書くときは </> ボタン使うと便利です。記号を全角にしなくてもよくなります。(そこは直しませんでしたが)

あと、serch ではなく search ですね。
面倒でしょうけど直しておいた方がいいと思いますよ。


回答

ざっと見ただけですが、Oracleであいまい検索でバインド変数使いたい場合は
以下の様にすればよかったように思います。

public static final String SERCHNAME_QUERY = "SELECT NAME FROM ITEM WHERE NAME LIKE '%'||?||'%' ORDER BY ID"

バインドは今のままで構いません。

   ps_.setString(1,genreSerch); // ⑥

|| は文字結合です。のバインド時はなにもせず、OracleのSQL上で 前後の '%' を付けています。

setStringに与える変数(genereSerch)に % を含んでしまう場合、本当の % 文字列として利用されると思います。(そうじゃないと 商品名に半角 % を含むものが絶対に検索できなくなりますよね?)

「行検索が無効」というエラーが出てしまいます。

このエラーはエラーの情報たりないので原因はわからないですが、%を含む文字を検索できないわけないので、%を含んでいてもバインドはできるし検索はできるはずだと思います。
なので 単に検索結果が 0件だと同じエラーが出たりしませんか?(検索そのものではなくて結果 0件の時のその後の処理で落ちている。 rs が 結果 0件時は無効になるなど。0件かどうかチェックするメソッドがありそうな気がします。)

前回の質問でも書きましたが質問にコード書くときは </> ボタン使うと便利です。記号を全角にしなくてもよくなります。(そこは直しませんでしたが)

あと、serch ではなく search ですね。
面倒でしょうけど直しておいた方がいいと思いますよ。

---

**回答**

ざっと見ただけですが、Oracleであいまい検索でバインド変数使いたい場合は
以下の様にすればよかったように思います。

```java
public static final String SERCHNAME_QUERY = "SELECT NAME FROM ITEM WHERE NAME LIKE '%'||?||'%' ORDER BY ID"
```

バインドは今のままで構いません。
```java
   ps_.setString(1,genreSerch); // ⑥
```

`||` は文字結合です。`ク`のバインド時はなにもせず、OracleのSQL上で 前後の '%' を付けています。

setStringに与える変数(genereSerch)に `%` を含んでしまう場合、本当の % 文字列として利用されると思います。(そうじゃないと 商品名に半角 % を含むものが絶対に検索できなくなりますよね?)


> 「行検索が無効」というエラーが出てしまいます。

このエラーはエラーの情報たりないので原因はわからないですが、%を含む文字を検索できないわけないので、%を含んでいてもバインドはできるし検索はできるはずだと思います。
なので 単に検索結果が 0件だと同じエラーが出たりしませんか?(検索そのものではなくて結果 0件の時のその後の処理で落ちている。 rs が 結果 0件時は無効になるなど。0件かどうかチェックするメソッドがありそうな気がします。)

回答を投稿

前回の質問でも書きましたが質問にコード書くときは </> ボタン使うと便利です。記号を全角にしなくてもよくなります。(そこは直しませんでしたが)

あと、serch ではなく search ですね。
面倒でしょうけど直しておいた方がいいと思いますよ。


回答

ざっと見ただけですが、Oracleであいまい検索でバインド変数使いたい場合は
以下の様にすればよかったように思います。

public static final String SERCHNAME_QUERY = "SELECT NAME FROM ITEM WHERE NAME LIKE '%'||?||'%' ORDER BY ID"

バインドは今のままで構いません。

   ps_.setString(1,genreSerch); // ⑥

|| は文字結合です。のバインド時はなにもせず、OracleのSQL上で 前後の '%' を付けています。

setStringに与える変数(genereSerch)に % を含んでしまう場合、本当の % 文字列として利用されると思います。(そうじゃないと 商品名に半角 % を含むものが絶対に検索できなくなりますよね?)

「行検索が無効」というエラーが出てしまいます。

このエラーはエラーの情報たりないので原因はわからないですが、%を含む文字を検索できないわけないので、%を含んでいてもバインドはできるし検索はできるはずです。
単に 0件だとエラーが出たりしませんか?

前回の質問でも書きましたが質問にコード書くときは </> ボタン使うと便利です。記号を全角にしなくてもよくなります。(そこは直しませんでしたが)

あと、serch ではなく search ですね。
面倒でしょうけど直しておいた方がいいと思いますよ。

---

**回答**

ざっと見ただけですが、Oracleであいまい検索でバインド変数使いたい場合は
以下の様にすればよかったように思います。

```java
public static final String SERCHNAME_QUERY = "SELECT NAME FROM ITEM WHERE NAME LIKE '%'||?||'%' ORDER BY ID"
```

バインドは今のままで構いません。
```java
   ps_.setString(1,genreSerch); // ⑥
```

`||` は文字結合です。`ク`のバインド時はなにもせず、OracleのSQL上で 前後の '%' を付けています。

setStringに与える変数(genereSerch)に `%` を含んでしまう場合、本当の % 文字列として利用されると思います。(そうじゃないと 商品名に半角 % を含むものが絶対に検索できなくなりますよね?)


> 「行検索が無効」というエラーが出てしまいます。

このエラーはエラーの情報たりないので原因はわからないですが、%を含む文字を検索できないわけないので、%を含んでいてもバインドはできるし検索はできるはずです。
単に 0件だとエラーが出たりしませんか?