hfuob
@hfuob (慎也)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

SpringでIN句指定した条件で検索できない

解決したいこと

SpringでIN句指定した条件で検索できない

発生している問題・エラー

SpringでIN句で条件を指定しましたが、結果がNULLとなっていますのでそのバグを解消したいです。

該当するソースコード

@PostMapping("/searchAll")
	public String searchEach(@ModelAttribute SyainSV SyainSVData
			, Kihon1 kihon1, Syain syain, Model model) {
		
		String syain_id1 = SyainSVData.getSyain_id1();
		String syain_id2 = SyainSVData.getSyain_id2();
		String syain_id3 = SyainSVData.getSyain_id3();
		String syain_id4 = SyainSVData.getSyain_id4();
		String syain_id5 = SyainSVData.getSyain_id5();
		List<String> array = new ArrayList(Arrays.asList(syain_id1, syain_id2, syain_id3, syain_id4, syain_id5));
		array.removeAll(Arrays.asList("", null));
		
		String where_str = "'";
		for (int i = 0; i < array.size();i++) {

			if (!StringUtils.isEmpty(array.get(i))) {
				where_str = where_str + array.get(i);
				where_str = where_str + "'";
			}
			
			if(i == array.size() - 1) {
				break;
			}
			where_str = where_str + ", '";
		}
		
		StringBuilder sql_buil = new StringBuilder();
		sql_buil.append("SELECT syain.syain_id, kihon1.kihon_name, kihon1.mei_st"
				+ ", kihon1.mei_ed, kihon1.kinmu_st, kihon1.kinmu_ed ");
		sql_buil.append("FROM syain ");
		sql_buil.append("     INNER JOIN kihon1 ");
		sql_buil.append("        ON kihon1.kihon_id = syain.syain_id ");
		if (!StringUtils.isEmpty(where_str)) {
			sql_buil.append("WHERE syain.syain_id IN (?)");
		}
		String sql = sql_buil.toString();
		Object[] args = new Object[] {where_str};
		BeanPropertyRowMapper<KintaiList> rowMapper = BeanPropertyRowMapper.newInstance(KintaiList.class);
		List<KintaiList> kintaiList = jdbc.query(sql, rowMapper, args);
		model.addAttribute("list", kintaiList);
		
		return "index";
	}

例)

package jp.winschool.spring.sample09;

import lombok.Data;

@Data
public class KintaiList {
	private String syain_id;
	private String kihon_name;
	private String mei_st;
	private String mei_ed;
	private String kinmu_st;
	private String kinmu_ed;
}

自分で試したこと

IN句に設定した条件がwhere_str=1,2でもwhere_str='1','2'でも検索できませんでした。

下記の検索する箇所までは問題なく処理できていて、下記のコードを処理すると空欄になるので、
別の検索する方法があれば教えていただきたいです。
List kintaiList = jdbc.query(sql, rowMapper, args);

0

3Answer

Comments

  1. ここで解決した感じですね。別のところで解決したのであれば、あとの人の為にもリンクを貼ってどう解決したのかわかる状態にしてください。

DB は何なのですか? MySQL?

問題の切り分けのため、DB に直接 SELECT クエリを投げて結果をみるということはできませんか?

0Like

Comments

  1. @hfuob

    Questioner

    DBはPostgresqlです。SQLで下記を実行すると問題なく抽出できます。
    SELECT
    syain.syain_id
    , kihon1.kihon_name
    , kihon1.mei_st
    , kihon1.mei_ed
    , kihon1.kinmu_st
    , kihon1.kinmu_ed
    FROM
    syain
    INNER JOIN kihon1
    ON kihon1.kihon_id = syain.syain_id
    WHERE
    syain.syain_id IN ('1','2')

where_str = "1" を入れた場合は動きますでしょうか?
もしも動く場合は 要素に合わせて プレースホルダを構築する必要があります。

0Like

Your answer might help someone💌