SQL文に変数を使用したDBの値の取得について

実現したいこと

SQL文のWHERE句の値に変数を設定して条件に合致するレコードを取得する処理
を考えています。

前提

WHERE句の書き方がおかしいのか、条件に合致するSQL文を設定しても「while (res.next())」が
実行されず値を取得することができません。
デバックで処理を確認すると、「while (res.next())」まで来ると、その中身は実行されず処理を抜けてしまうため、
レコードが取得出来ていないと思われます。
また、全件を取得する処理に関しては問題なく動作します。

下記のソースからSQL文の書き方に問題があるのでしょうか?

下記のコードから、引数に「身長,変換パターンA(cmi.getHedderList(head_col.get(j),paternName);)」が
設定されたら、beanにDBから取得した値が入るはずなのですが。。

データベース

イメージ説明

該当のソースコード

Servlet

1 // CSVデータを格納する二次元配列 2 List<String[]> csvData = new ArrayList<>(); 3 // 変換マスタのデータを保持するListを宣言 4 List<ChangeMaster> CMList = new ArrayList<ChangeMaster>(); 5 6 List<ItemPatternMaster> IPList = new ArrayList<ItemPatternMaster>(); 7 8 // 一覧を取得するインスタンスを生成 9 ChangeMasterImpl cmi = new ChangeMasterImpl(); 10 ChangeMaster cm = new ChangeMaster(); 11 BufferedReader br = null; 12 try { 13 // csvファイルの読み込み 14 InputStream is = part.getInputStream(); 15 InputStreamReader isr = new InputStreamReader(is); 16 br = new BufferedReader(isr); 17 String line; 18 while((line = br.readLine()) != null) { 19 csvData.add(line.split(",")); 20 } 21 22 // ヘッダー項目を配列に格納 23 List<String> head_col = Arrays.asList(csvData.get(0)); 24 int errcnt=0; 25 int result = 0; 26 // ★変換処理 27 // 入力データのループ レコード 28 for (int i=1; i< csvData.size(); i++) { // レコード 29 30 for (int j=0; j< head_col.size(); j++) { // カラム 31 // ヘッダー項目の配列 32 //head_col.get(j); 33 // 各セルの情報 34 //csvData.get(i)[j]; 35 // ヘッダー項目の引数に配置(ヘッダー名、変換パターン名、セルのデータ) 36 result = cmi.getHedderList(head_col.get(j),paternName); 37 if(!(cm.getM_item_no() == 0)) { 38 39 //cmi.createCalculation(csvData.get(i)[j],CMList); 40 System.out.println("aa"); 41 } else { 42 errcnt++; 43 } 44 45 } 46 47 } catch (Exception e) { 48 // TODO: handle exception 49 e.printStackTrace(); 50 }

該当のソースコード

Java

1 // SELECT処理 各項目2 public int getHedderList(String string, String patern) throws ClassNotFoundException, SQLException {3 // 返却用リストの初期化4 5 List<ChangeMaster> HeddertList = new ArrayList<>();6 // 変換マスタのインスタンス7 ChangeMaster cm = new ChangeMaster();8 // エラーマスタのインスタンス9 ErrorMaster em = new ErrorMaster();10 // 返却用の変数11 int result = 0;12 13 String sql = "SELECT change_pattern_no, item_no, change_pattern_name, item_pattern_no, display_order, input, output FROM change_master WHERE input = ? AND change_pattern_name = ?";14 15 String sql2 = "SELECT * FROM error_master WHERE error_number = 1";16 try (Connection con = DBConnection.getConnection();17 PreparedStatement pstmt = con.prepareStatement(sql)) {18 pstmt.setString(1, string);19 pstmt.setString(2, patern);20 // SQLを実行し ResultSetの変数に結果を格納する。21 ResultSet res = pstmt.executeQuery();22 23 24 // 変換マスタ25 int ChangePNo = 0; // 変換パターンNo26 int ItemNo = 0; // 項目No27 String ChangePName = null; // 変換パターン名28 int ItemPNo = 0; // 項目パターンNo29 int DisplayOrder = 0; // 表示順30 String Input = null; // Input項目名31 String Output = null; // Output項目名32 33 // エラーマスタ34 int ErrNum = 0; // エラー警告No35 String ErrCon = null; // エラー内容36 37 // エラーナンバーを返す38 //int errcnt = 0;39// System.out.println("テスト1:" + res.next());40 if(res.next()) {41 42 // 実行結果を順番に取り出す43// System.out.println("テスト2:" + res.next());44 while (res.next()) {45 46 // それぞれに格納47 ChangePNo = res.getInt("change_pattern_no");48 ItemNo = res.getInt("item_no");49 ChangePName = res.getString("change_pattern_name");50 ItemPNo = res.getInt("item_pattern_no");51 DisplayOrder = res.getInt("display_order");52 Input = res.getString("input");53 Output = res.getString("output");54 55 // ChangeMasterにセット56 cm.setM_change_pattern_no(ChangePNo);57 cm.setM_item_no(ItemNo);58 cm.setM_change_pattern_name(ChangePName);59 cm.setM_item_pattern_no(ItemPNo);60 cm.setM_display_order(DisplayOrder);61 cm.setM_input(Input);62 cm.setM_output(Output);63 64 System.out.println("テスト:" + cm.getM_item_no());65 66 // HeddertList.add(new ChangeMaster(ChangePNo, ItemNo, ChangePName, ItemPNo, DisplayOrder, Input, Output));67 }68 } 69 else {70 // エラーナンバーを返す71 result = 1;72 return result;73 }74 }75 // 正常の時は"0"を返す76 return result;77 }

補足情報(FW/ツールのバージョンなど)

Mysqlを使用

コメントを投稿

0 コメント